diff --git a/dist/bundle/bundle.js b/dist/bundle/bundle.js index a8c0655..f7a14ed 100644 --- a/dist/bundle/bundle.js +++ b/dist/bundle/bundle.js @@ -73,7 +73,7 @@ return /******/ (function(modules) { // webpackBootstrap /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 29); +/******/ return __webpack_require__(__webpack_require__.s = 91); /******/ }) /************************************************************************/ /******/ ([ @@ -81,49 +81,73 @@ return /******/ (function(modules) { // webpackBootstrap /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__hashTransaction__ = __webpack_require__(10); -/* harmony export (immutable) */ __webpack_exports__["a"] = makeTransaction; - - -function makeTransactionTemplate() { +/* harmony export (immutable) */ __webpack_exports__["a"] = getApiUrls; +function getApiUrls(API_PATH) { return { - 'id': null, - 'operation': null, - 'outputs': [], - 'inputs': [], - 'metadata': null, - 'asset': null, - 'version': '0.9' + 'blocks': API_PATH + 'blocks', + 'blocks_detail': API_PATH + 'blocks/%(blockId)s', + 'outputs': API_PATH + 'outputs', + 'statuses': API_PATH + 'statuses', + 'transactions': API_PATH + 'transactions', + 'transactions_detail': API_PATH + 'transactions/%(txId)s', + 'votes': API_PATH + 'votes' }; } -function makeTransaction(operation, asset) { - var metadata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var outputs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; - var inputs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - - var tx = makeTransactionTemplate(); - tx.operation = operation; - tx.asset = asset; - tx.metadata = metadata; - tx.inputs = inputs; - tx.outputs = outputs; - - // Hashing must be done after, as the hash is of the Transaction (up to now) - tx.id = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__hashTransaction__["a" /* default */])(tx); - return tx; -} - /***/ }), /* 1 */ -/***/ (function(module, exports, __webpack_require__) { +/***/ (function(module, __webpack_exports__, __webpack_require__) { -var basex = __webpack_require__(17) -var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__baseRequest__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sanitize__ = __webpack_require__(37); +/* harmony export (immutable) */ __webpack_exports__["a"] = request; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; -module.exports = basex(ALPHABET) + +var DEFAULT_REQUEST_CONFIG = { + credentials: 'include', + headers: { + 'Accept': 'application/json' + } +}; + +/** + * Small wrapper around js-utility-belt's request that provides url resolving, default settings, and + * response handling. + */ +function request(url) { + var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var onlyJsonResponse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + // Load default fetch configuration and remove any falsy query parameters + var requestConfig = _extends({}, DEFAULT_REQUEST_CONFIG, config, { + query: config.query && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__sanitize__["a" /* default */])(config.query) + }); + var apiUrl = url; + + if (requestConfig.jsonBody) { + requestConfig.headers = _extends({}, requestConfig.headers, { + 'Content-Type': 'application/json' + }); + } + if (!url) { + return Promise.reject(new Error('Request was not given a url.')); + } + + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__baseRequest__["a" /* default */])(apiUrl, requestConfig).then(function (res) { + return onlyJsonResponse ? res.json() : { + json: res.json(), + url: res.url + }; + }).catch(function (err) { + console.error(err); + throw err; + }); +} + /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { @@ -139,9 +163,9 @@ module.exports = basex(ALPHABET) -var base64 = __webpack_require__(18) -var ieee754 = __webpack_require__(19) -var isArray = __webpack_require__(20) +var base64 = __webpack_require__(48) +var ieee754 = __webpack_require__(79) +var isArray = __webpack_require__(80) exports.Buffer = Buffer exports.SlowBuffer = SlowBuffer @@ -1919,12 +1943,355 @@ function isnan (val) { return val !== val // eslint-disable-line no-self-compare } -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(11))) /***/ }), /* 3 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__hashTransaction__ = __webpack_require__(40); +/* harmony export (immutable) */ __webpack_exports__["a"] = makeTransaction; + + +function makeTransactionTemplate() { + return { + 'id': null, + 'operation': null, + 'outputs': [], + 'inputs': [], + 'metadata': null, + 'asset': null, + 'version': '0.9' + }; +} + +function makeTransaction(operation, asset) { + var metadata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var outputs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + var inputs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; + + var tx = makeTransactionTemplate(); + tx.operation = operation; + tx.asset = asset; + tx.metadata = metadata; + tx.inputs = inputs; + tx.outputs = outputs; + + // Hashing must be done after, as the hash is of the Transaction (up to now) + tx.id = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__hashTransaction__["a" /* default */])(tx); + return tx; +} + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +var basex = __webpack_require__(47) +var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' + +module.exports = basex(ALPHABET) + + +/***/ }), +/* 5 */ +/***/ (function(module, exports) { + +var core = module.exports = {version: '2.4.0'}; +if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +// Thank's IE8 for his funny defineProperty +module.exports = !__webpack_require__(20)(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; +}); + +/***/ }), +/* 7 */ +/***/ (function(module, exports) { + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); +if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + +module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = __webpack_require__(61) + , defined = __webpack_require__(55); +module.exports = function(it){ + return IObject(defined(it)); +}; + +/***/ }), +/* 10 */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + + +/***/ }), +/* 11 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), +/* 12 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); +/* harmony export (immutable) */ __webpack_exports__["a"] = getStatus; + + + +function getStatus(tx_id, API_PATH) { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['statuses'], { + query: { + tx_id: tx_id + } + }); +} + +/***/ }), +/* 13 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); +/* harmony export (immutable) */ __webpack_exports__["a"] = getTransaction; + + + +function getTransaction(txId, API_PATH) { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['transactions_detail'], { + urlTemplateSpec: { + txId: txId + } + }); +} + +/***/ }), +/* 14 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = makeInputTemplate; function makeInputTemplate() { @@ -1940,19 +2307,22 @@ function makeInputTemplate() { } /***/ }), -/* 4 */ +/* 15 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_json_stable_stringify__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_json_stable_stringify__ = __webpack_require__(81); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_json_stable_stringify___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_json_stable_stringify__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_clone__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_clone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_clone__); /* harmony export (immutable) */ __webpack_exports__["a"] = serializeTransactionIntoCanonicalString; + function serializeTransactionIntoCanonicalString(transaction, input) { // BigchainDB signs fulfillments by serializing transactions into a "canonical" format where // each fulfillment URI is removed before sorting the remaining keys - var tx = clone(transaction); + var tx = __WEBPACK_IMPORTED_MODULE_1_clone___default()(transaction); var match = void 0; tx.inputs.forEach(function (_input) { @@ -1971,7 +2341,387 @@ function serializeTransactionIntoCanonicalString(transaction, input) { } /***/ }), -/* 5 */ +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {var clone = (function() { +'use strict'; + +function _instanceof(obj, type) { + return type != null && obj instanceof type; +} + +var nativeMap; +try { + nativeMap = Map; +} catch(_) { + // maybe a reference error because no `Map`. Give it a dummy value that no + // value will ever be an instanceof. + nativeMap = function() {}; +} + +var nativeSet; +try { + nativeSet = Set; +} catch(_) { + nativeSet = function() {}; +} + +var nativePromise; +try { + nativePromise = Promise; +} catch(_) { + nativePromise = function() {}; +} + +/** + * Clones (copies) an Object using deep copying. + * + * This function supports circular references by default, but if you are certain + * there are no circular references in your object, you can save some CPU time + * by calling clone(obj, false). + * + * Caution: if `circular` is false and `parent` contains circular references, + * your program may enter an infinite loop and crash. + * + * @param `parent` - the object to be cloned + * @param `circular` - set to true if the object to be cloned may contain + * circular references. (optional - true by default) + * @param `depth` - set to a number if the object is only to be cloned to + * a particular depth. (optional - defaults to Infinity) + * @param `prototype` - sets the prototype to be used when cloning an object. + * (optional - defaults to parent prototype). + * @param `includeNonEnumerable` - set to true if the non-enumerable properties + * should be cloned as well. Non-enumerable properties on the prototype + * chain will be ignored. (optional - false by default) +*/ +function clone(parent, circular, depth, prototype, includeNonEnumerable) { + if (typeof circular === 'object') { + depth = circular.depth; + prototype = circular.prototype; + includeNonEnumerable = circular.includeNonEnumerable; + circular = circular.circular; + } + // maintain two arrays for circular references, where corresponding parents + // and children have the same index + var allParents = []; + var allChildren = []; + + var useBuffer = typeof Buffer != 'undefined'; + + if (typeof circular == 'undefined') + circular = true; + + if (typeof depth == 'undefined') + depth = Infinity; + + // recurse this function so we don't reset allParents and allChildren + function _clone(parent, depth) { + // cloning null always returns null + if (parent === null) + return null; + + if (depth === 0) + return parent; + + var child; + var proto; + if (typeof parent != 'object') { + return parent; + } + + if (_instanceof(parent, nativeMap)) { + child = new nativeMap(); + } else if (_instanceof(parent, nativeSet)) { + child = new nativeSet(); + } else if (_instanceof(parent, nativePromise)) { + child = new nativePromise(function (resolve, reject) { + parent.then(function(value) { + resolve(_clone(value, depth - 1)); + }, function(err) { + reject(_clone(err, depth - 1)); + }); + }); + } else if (clone.__isArray(parent)) { + child = []; + } else if (clone.__isRegExp(parent)) { + child = new RegExp(parent.source, __getRegExpFlags(parent)); + if (parent.lastIndex) child.lastIndex = parent.lastIndex; + } else if (clone.__isDate(parent)) { + child = new Date(parent.getTime()); + } else if (useBuffer && Buffer.isBuffer(parent)) { + child = new Buffer(parent.length); + parent.copy(child); + return child; + } else if (_instanceof(parent, Error)) { + child = Object.create(parent); + } else { + if (typeof prototype == 'undefined') { + proto = Object.getPrototypeOf(parent); + child = Object.create(proto); + } + else { + child = Object.create(prototype); + proto = prototype; + } + } + + if (circular) { + var index = allParents.indexOf(parent); + + if (index != -1) { + return allChildren[index]; + } + allParents.push(parent); + allChildren.push(child); + } + + if (_instanceof(parent, nativeMap)) { + parent.forEach(function(value, key) { + var keyChild = _clone(key, depth - 1); + var valueChild = _clone(value, depth - 1); + child.set(keyChild, valueChild); + }); + } + if (_instanceof(parent, nativeSet)) { + parent.forEach(function(value) { + var entryChild = _clone(value, depth - 1); + child.add(entryChild); + }); + } + + for (var i in parent) { + var attrs; + if (proto) { + attrs = Object.getOwnPropertyDescriptor(proto, i); + } + + if (attrs && attrs.set == null) { + continue; + } + child[i] = _clone(parent[i], depth - 1); + } + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(parent); + for (var i = 0; i < symbols.length; i++) { + // Don't need to worry about cloning a symbol because it is a primitive, + // like a number or string. + var symbol = symbols[i]; + var descriptor = Object.getOwnPropertyDescriptor(parent, symbol); + if (descriptor && !descriptor.enumerable && !includeNonEnumerable) { + continue; + } + child[symbol] = _clone(parent[symbol], depth - 1); + if (!descriptor.enumerable) { + Object.defineProperty(child, symbol, { + enumerable: false + }); + } + } + } + + if (includeNonEnumerable) { + var allPropertyNames = Object.getOwnPropertyNames(parent); + for (var i = 0; i < allPropertyNames.length; i++) { + var propertyName = allPropertyNames[i]; + var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName); + if (descriptor && descriptor.enumerable) { + continue; + } + child[propertyName] = _clone(parent[propertyName], depth - 1); + Object.defineProperty(child, propertyName, { + enumerable: false + }); + } + } + + return child; + } + + return _clone(parent, depth); +} + +/** + * Simple flat clone using prototype, accepts only objects, usefull for property + * override on FLAT configuration object (no nested props). + * + * USE WITH CAUTION! This may not behave as you wish if you do not know how this + * works. + */ +clone.clonePrototype = function clonePrototype(parent) { + if (parent === null) + return null; + + var c = function () {}; + c.prototype = parent; + return new c(); +}; + +// private utility functions + +function __objToStr(o) { + return Object.prototype.toString.call(o); +} +clone.__objToStr = __objToStr; + +function __isDate(o) { + return typeof o === 'object' && __objToStr(o) === '[object Date]'; +} +clone.__isDate = __isDate; + +function __isArray(o) { + return typeof o === 'object' && __objToStr(o) === '[object Array]'; +} +clone.__isArray = __isArray; + +function __isRegExp(o) { + return typeof o === 'object' && __objToStr(o) === '[object RegExp]'; +} +clone.__isRegExp = __isRegExp; + +function __getRegExpFlags(re) { + var flags = ''; + if (re.global) flags += 'g'; + if (re.ignoreCase) flags += 'i'; + if (re.multiline) flags += 'm'; + return flags; +} +clone.__getRegExpFlags = __getRegExpFlags; + +return clone; +})(); + +if (typeof module === 'object' && module.exports) { + module.exports = clone; +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer)) + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(75); +module.exports = __webpack_require__(5).Object.entries; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +// false -> Array#indexOf +// true -> Array#includes +var toIObject = __webpack_require__(9) + , toLength = __webpack_require__(71) + , toIndex = __webpack_require__(70); +module.exports = function(IS_INCLUDES){ + return function($this, el, fromIndex){ + var O = toIObject($this) + , length = toLength(O.length) + , index = toIndex(fromIndex, length) + , value; + // Array#includes uses SameValueZero equality algorithm + if(IS_INCLUDES && el != el)while(length > index){ + value = O[index++]; + if(value != value)return true; + // Array#toIndex ignores holes, Array#includes - not + } else for(;length > index; index++)if(IS_INCLUDES || index in O){ + if(O[index] === el)return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(7) + , core = __webpack_require__(5) + , ctx = __webpack_require__(54) + , hide = __webpack_require__(59) + , PROTOTYPE = 'prototype'; + +var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , IS_WRAP = type & $export.W + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] + , key, own, out; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if(own && key in exports)continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function(C){ + var F = function(a, b, c){ + if(this instanceof C){ + switch(arguments.length){ + case 0: return new C; + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if(IS_PROTO){ + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + +/***/ }), +/* 20 */ +/***/ (function(module, exports) { + +module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } +}; + +/***/ }), +/* 21 */ +/***/ (function(module, exports) { + +// 7.1.4 ToInteger +var ceil = Math.ceil + , floor = Math.floor; +module.exports = function(it){ + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + +/***/ }), +/* 22 */ /***/ (function(module, exports, __webpack_require__) { !function(t,e){ true?module.exports=e():"function"==typeof define&&define.amd?define("FiveBellsCondition",[],e):"object"==typeof exports?exports.FiveBellsCondition=e():t.FiveBellsCondition=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var r={};return e.m=t,e.c=r,e.i=function(t){return t},e.d=function(t,e,r){Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=613)}([function(t,e,r){var n=r(4),i=r(32),o=r(14),a=r(15),f=r(33),s="prototype",u=function(t,e,r){var h,c,d,l,p=t&u.F,b=t&u.G,v=t&u.S,y=t&u.P,m=t&u.B,g=b?n:v?n[e]||(n[e]={}):(n[e]||{})[s],w=b?i:i[e]||(i[e]={}),_=w[s]||(w[s]={});b&&(r=e);for(h in r)c=!p&&g&&void 0!==g[h],d=(c?g:r)[h],l=m&&c?f(d,n):y&&"function"==typeof d?f(Function.call,d):d,g&&a(g,h,d,t&u.U),w[h]!=d&&o(w,h,l),y&&_[h]!=d&&(_[h]=d)};n.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,r){"use strict";(function(t,n){function i(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}function o(){return t.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,r){if(o()=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function v(e){return+e!=e&&(e=0),t.alloc(+e)}function y(e,r){if(t.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var i=!1;;)switch(r){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return V(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Y(e).length;default:if(i)return V(e).length;r=(""+r).toLowerCase(),i=!0}}function m(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,e>>>=0,r<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,r);case"utf8":case"utf-8":return B(this,e,r);case"ascii":return R(this,e,r);case"latin1":case"binary":return P(this,e,r);case"base64":return I(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return j(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function g(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function w(e,r,n,i,o){if(0===e.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof r&&(r=t.from(r,i)),t.isBuffer(r))return 0===r.length?-1:_(e,r,n,i,o);if("number"==typeof r)return r&=255,t.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,r,n):Uint8Array.prototype.lastIndexOf.call(e,r,n):_(e,[r],n,i,o);throw new TypeError("val must be string, number or Buffer")}function _(t,e,r,n,i){function o(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var a=1,f=t.length,s=e.length;if(void 0!==n&&(n=String(n).toLowerCase(),"ucs2"===n||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,f/=2,s/=2,r/=2}var u;if(i){var h=-1;for(u=r;uf&&(r=f-s),u=r;u>=0;u--){for(var c=!0,d=0;di&&(n=i)):n=i;var o=e.length;if(o%2!==0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a239?4:o>223?3:o>191?2:1;if(i+f<=r){var s,u,h,c;switch(f){case 1:o<128&&(a=o);break;case 2:s=t[i+1],128===(192&s)&&(c=(31&o)<<6|63&s,c>127&&(a=c));break;case 3:s=t[i+1],u=t[i+2],128===(192&s)&&128===(192&u)&&(c=(15&o)<<12|(63&s)<<6|63&u,c>2047&&(c<55296||c>57343)&&(a=c));break;case 4:s=t[i+1],u=t[i+2],h=t[i+3],128===(192&s)&&128===(192&u)&&128===(192&h)&&(c=(15&o)<<18|(63&s)<<12|(63&u)<<6|63&h,c>65535&&c<1114112&&(a=c))}}null===a?(a=65533,f=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),i+=f}return O(n)}function O(t){var e=t.length;if(e<=tt)return String.fromCharCode.apply(String,t);for(var r="",n=0;nn)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function N(e,r,n,i,o,a){if(!t.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>o||re.length)throw new RangeError("Index out of range")}function L(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function U(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function z(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function D(t,e,r,n,i){return i||z(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),$.write(t,e,r,n,23,4),r+4}function q(t,e,r,n,i){return i||z(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),$.write(t,e,r,n,52,8),r+8}function F(t){if(t=K(t).replace(et,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function K(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function G(t){return t<16?"0"+t.toString(16):t.toString(16)}function V(t,e){e=e||1/0;for(var r,n=t.length,i=null,o=[],a=0;a55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function H(t){for(var e=[],r=0;r>8,i=r%256,o.push(i),o.push(n);return o}function Y(t){return J.toByteArray(F(t))}function W(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function Z(t){return t!==t}var J=r(490),$=r(491),Q=r(492);e.Buffer=t,e.SlowBuffer=v,e.INSPECT_MAX_BYTES=50,t.TYPED_ARRAY_SUPPORT=void 0!==n.TYPED_ARRAY_SUPPORT?n.TYPED_ARRAY_SUPPORT:i(),e.kMaxLength=o(),t.poolSize=8192,t._augment=function(e){return e.__proto__=t.prototype,e},t.from=function(t,e,r){return f(null,t,e,r)},t.TYPED_ARRAY_SUPPORT&&(t.prototype.__proto__=Uint8Array.prototype,t.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0})),t.alloc=function(t,e,r){return u(null,t,e,r)},t.allocUnsafe=function(t){return h(null,t)},t.allocUnsafeSlow=function(t){return h(null,t)},t.isBuffer=function(t){return!(null==t||!t._isBuffer)},t.compare=function(e,r){if(!t.isBuffer(e)||!t.isBuffer(r))throw new TypeError("Arguments must be Buffers");if(e===r)return 0;for(var n=e.length,i=r.length,o=0,a=Math.min(n,i);o0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},t.prototype.compare=function(e,r,n,i,o){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),r<0||n>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&r>=n)return 0;if(i>=o)return-1;if(r>=n)return 1;if(r>>>=0,n>>>=0,i>>>=0,o>>>=0,this===e)return 0;for(var a=o-i,f=n-r,s=Math.min(a,f),u=this.slice(i,o),h=e.slice(r,n),c=0;ci)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return M(this,t,e,r);case"utf8":case"utf-8":return S(this,t,e,r);case"ascii":return E(this,t,e,r);case"latin1":case"binary":return A(this,t,e,r);case"base64":return k(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var tt=4096;t.prototype.slice=function(e,r){var n=this.length;e=~~e,r=void 0===r?n:~~r,e<0?(e+=n,e<0&&(e=0)):e>n&&(e=n),r<0?(r+=n,r<0&&(r=0)):r>n&&(r=n),r0&&(i*=256);)n+=this[t+--e]*i;return n},t.prototype.readUInt8=function(t,e){return e||C(t,1,this.length),this[t]},t.prototype.readUInt16LE=function(t,e){return e||C(t,2,this.length),this[t]|this[t+1]<<8},t.prototype.readUInt16BE=function(t,e){return e||C(t,2,this.length),this[t]<<8|this[t+1]},t.prototype.readUInt32LE=function(t,e){return e||C(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},t.prototype.readUInt32BE=function(t,e){return e||C(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},t.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||C(t,e,this.length);for(var n=this[t],i=1,o=0;++o=i&&(n-=Math.pow(2,8*e)),n},t.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||C(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},t.prototype.readInt8=function(t,e){return e||C(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},t.prototype.readInt16LE=function(t,e){e||C(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt16BE=function(t,e){e||C(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt32LE=function(t,e){return e||C(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},t.prototype.readInt32BE=function(t,e){return e||C(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},t.prototype.readFloatLE=function(t,e){return e||C(t,4,this.length),$.read(this,t,!0,23,4)},t.prototype.readFloatBE=function(t,e){return e||C(t,4,this.length),$.read(this,t,!1,23,4)},t.prototype.readDoubleLE=function(t,e){return e||C(t,8,this.length),$.read(this,t,!0,52,8)},t.prototype.readDoubleBE=function(t,e){return e||C(t,8,this.length),$.read(this,t,!1,52,8)},t.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){var i=Math.pow(2,8*r)-1;N(this,t,e,r,i,0)}var o=1,a=0;for(this[e]=255&t;++a=0&&(a*=256);)this[e+o]=t/a&255;return e+r},t.prototype.writeUInt8=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,1,255,0),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[r]=255&e,r+1},t.prototype.writeUInt16LE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):L(this,e,r,!0),r+2},t.prototype.writeUInt16BE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):L(this,e,r,!1),r+2},t.prototype.writeUInt32LE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[r+3]=e>>>24,this[r+2]=e>>>16,this[r+1]=e>>>8,this[r]=255&e):U(this,e,r,!0),r+4},t.prototype.writeUInt32BE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):U(this,e,r,!1),r+4},t.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);N(this,t,e,r,i-1,-i)}var o=0,a=1,f=0;for(this[e]=255&t;++o>0)-f&255;return e+r},t.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);N(this,t,e,r,i-1,-i)}var o=r-1,a=1,f=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===f&&0!==this[e+o+1]&&(f=1),this[e+o]=(t/a>>0)-f&255;return e+r},t.prototype.writeInt8=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,1,127,-128),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[r]=255&e,r+1},t.prototype.writeInt16LE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8):L(this,e,r,!0),r+2},t.prototype.writeInt16BE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>8,this[r+1]=255&e):L(this,e,r,!1),r+2},t.prototype.writeInt32LE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,2147483647,-2147483648),t.TYPED_ARRAY_SUPPORT?(this[r]=255&e,this[r+1]=e>>>8,this[r+2]=e>>>16,this[r+3]=e>>>24):U(this,e,r,!0),r+4},t.prototype.writeInt32BE=function(e,r,n){return e=+e,r|=0,n||N(this,e,r,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),t.TYPED_ARRAY_SUPPORT?(this[r]=e>>>24,this[r+1]=e>>>16,this[r+2]=e>>>8,this[r+3]=255&e):U(this,e,r,!1),r+4},t.prototype.writeFloatLE=function(t,e,r){return D(this,t,e,!0,r)},t.prototype.writeFloatBE=function(t,e,r){return D(this,t,e,!1,r)},t.prototype.writeDoubleLE=function(t,e,r){return q(this,t,e,!0,r)},t.prototype.writeDoubleBE=function(t,e,r){return q(this,t,e,!1,r)},t.prototype.copy=function(e,r,n,i){if(n||(n=0),i||0===i||(i=this.length),r>=e.length&&(r=e.length),r||(r=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-r=0;--o)e[o+r]=this[o+n];else if(a<1e3||!t.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var a;if("number"==typeof e)for(a=r;a0?i(n(t),9007199254740991):0}},function(t,e,r){var n=r(24);t.exports=function(t){return Object(n(t))}},function(t,e){var r={}.hasOwnProperty;t.exports=function(t,e){return r.call(t,e)}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,r){var n=r(9),i=r(37);t.exports=r(8)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){var n=r(4),i=r(14),o=r(12),a=r(48)("src"),f="toString",s=Function[f],u=(""+s).split(f);r(32).inspectSource=function(t){return s.call(t)},(t.exports=function(t,e,r,f){var s="function"==typeof r;s&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(s&&(o(r,a)||i(r,a,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:f?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,f,function(){return"function"==typeof this&&this[a]||s.call(this)})},function(t,e,r){var n=r(0),i=r(5),o=r(24),a=/"/g,f=function(t,e,r,n){var i=String(o(t)),f="<"+e;return""!==r&&(f+=" "+r+'="'+String(n).replace(a,""")+'"'),f+">"+i+""};t.exports=function(t,e){var r={};r[t]=e(f),n(n.P+n.F*i(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",r)}},function(t,e,r){var n=r(65),i=r(24);t.exports=function(t){return n(i(t))}},function(t,e,r){(function(t){!function(t,e){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function o(t,e,r){return o.isBN(t)?t:(this.negative=0,this.words=null,this.length=0,this.red=null,void(null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))))}function a(t,e,r){for(var n=0,i=Math.min(t.length,r),o=e;o=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(t,e,r,n){for(var i=0,o=Math.min(t.length,r),a=e;a=49?f-49+10:f>=17?f-17+10:f}return i}function s(t){for(var e=new Array(t.bitLength()),r=0;r>>i}return e}function u(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],o=0|e.words[0],a=i*o,f=67108863&a,s=a/67108864|0;r.words[0]=f;for(var u=1;u>>26,c=67108863&s,d=Math.min(u,e.length-1),l=Math.max(0,u-t.length+1);l<=d;l++){var p=u-l|0;i=0|t.words[p],o=0|e.words[l],a=i*o+c,h+=a/67108864|0,c=67108863&a}r.words[u]=0|c,s=0|h}return 0!==s?r.words[u]=0|s:r.length--,r.strip()}function h(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,o=0;o>>26)|0,i+=a>>>26,a&=67108863}r.words[o]=f,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}function c(t,e,r){var n=new d;return n.mulp(t,e,r)}function d(t,e){this.x=t,this.y=e}function l(t,e){this.name=t,this.p=new o(e,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function p(){l.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){l.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function v(){l.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function y(){l.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function m(t){if("string"==typeof t){var e=o._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function g(t){m.call(this,t),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof t?t.exports=o:e.BN=o,o.BN=o,o.wordSize=26;var w;try{w=r(1).Buffer}catch(t){}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,e){return t.cmp(e)>0?t:e},o.min=function(t,e){return t.cmp(e)<0?t:e},o.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36),t=t.toString().replace(/\s+/g,"");var i=0;"-"===t[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},o.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);else if("le"===r)for(i=0,o=0;i>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);return this.strip()},o.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r=e;r-=6)i=a(t,r,r+6),this.words[n]|=i<>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==e&&(i=a(t,e,r+6),this.words[n]|=i<>>26-o&4194303),this.strip()},o.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var o=t.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,h=r;h1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var _=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],M=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],S=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(t,e){t=t||10,e=0|e||1;var r;if(16===t||"hex"===t){r="";for(var i=0,o=0,a=0;a>>24-i&16777215,r=0!==o||a!==this.length-1?_[6-s.length]+s+r:s+r,i+=2,i>=26&&(i-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%e!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var u=M[t],h=S[t];r="";var c=this.clone();for(c.negative=0;!c.isZero();){var d=c.modn(h).toString(t);c=c.idivn(h),r=c.isZero()?d+r:_[u-d.length]+d+r}for(this.isZero()&&(r="0"+r);r.length%e!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,e){return n("undefined"!=typeof w),this.toArrayLike(w,t,e)},o.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},o.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),o=r||Math.max(1,i);n(i<=o,"byte array longer than desired length"),n(o>0,"Requested array length <= 0"),this.strip();var a,f,s="le"===e,u=new t(o),h=this.clone();if(s){for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[f]=a;for(;f=-1&&!i;o--){var a=o>=0?arguments[o]:t.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,i="/"===a.charAt(0))}return e=r(n(e.split("/"),function(t){return!!t}),!i).join("/"),(i?"/":"")+e||"."},e.normalize=function(t){var i=e.isAbsolute(t),o="/"===a(t,-1);return t=r(n(t.split("/"),function(t){return!!t}),!i).join("/"),t||i||(t="."),t&&o&&(t+="/"),(i?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(n(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},e.relative=function(t,r){function n(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=e.resolve(t).substr(1),r=e.resolve(r).substr(1);for(var i=n(t.split("/")),o=n(r.split("/")),a=Math.min(i.length,o.length),f=a,s=0;s0?this.tail.next=e:this.head=e,this.tail=e,++this.length},n.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},n.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},n.prototype.clear=function(){this.head=this.tail=null,this.length=0},n.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r},n.prototype.concat=function(t){if(0===this.length)return i.alloc(0);if(1===this.length)return this.head.data;for(var e=i.allocUnsafe(t>>>0),r=this.head,n=0;r;)r.data.copy(e,n),n+=r.data.length,r=r.next;return e}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){(function(e){function r(t,e){function r(){if(!i){if(n("throwDeprecation"))throw new Error(e);n("traceDeprecation")?console.trace(e):console.warn(e),i=!0}return t.apply(this,arguments)}if(n("noDeprecation"))return t;var i=!1;return r}function n(t){try{if(!e.localStorage)return!1}catch(t){return!1}var r=e.localStorage[t];return null!=r&&"true"===String(r).toLowerCase()}t.exports=r}).call(e,r(39))},function(t,e,r){t.exports=r(249)},function(t,e,r){(function(n){var i=function(){try{return r(31)}catch(t){}}();e=t.exports=r(250),e.Stream=i||e,e.Readable=e,e.Writable=r(155),e.Duplex=r(51),e.Transform=r(154),e.PassThrough=r(249),!n.browser&&"disable"===n.env.READABLE_STREAM&&i&&(t.exports=i)}).call(e,r(26))},function(t,e,r){t.exports=r(154)},function(t,e,r){t.exports=r(155)},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},function(t,e){t.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8}},function(t,e,r){(function(t,n){function i(t,r){var n={seen:[],stylize:a};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),b(r)?n.showHidden=r:r&&e._extend(n,r),_(n.showHidden)&&(n.showHidden=!1),_(n.depth)&&(n.depth=2),_(n.colors)&&(n.colors=!1),_(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=o),s(n,t,n.depth)}function o(t,e){var r=i.styles[e];return r?"["+i.colors[r][0]+"m"+t+"["+i.colors[r][1]+"m":t}function a(t,e){return t}function f(t){var e={};return t.forEach(function(t,r){e[t]=!0}),e}function s(t,r,n){if(t.customInspect&&r&&k(r.inspect)&&r.inspect!==e.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,t);return g(i)||(i=s(t,i,n)),i}var o=u(t,r);if(o)return o;var a=Object.keys(r),b=f(a);if(t.showHidden&&(a=Object.getOwnPropertyNames(r)),A(r)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return h(r);if(0===a.length){if(k(r)){var v=r.name?": "+r.name:"";return t.stylize("[Function"+v+"]","special")}if(M(r))return t.stylize(RegExp.prototype.toString.call(r),"regexp");if(E(r))return t.stylize(Date.prototype.toString.call(r),"date");if(A(r))return h(r)}var y="",m=!1,w=["{","}"];if(p(r)&&(m=!0,w=["[","]"]),k(r)){var _=r.name?": "+r.name:"";y=" [Function"+_+"]"}if(M(r)&&(y=" "+RegExp.prototype.toString.call(r)),E(r)&&(y=" "+Date.prototype.toUTCString.call(r)),A(r)&&(y=" "+h(r)),0===a.length&&(!m||0==r.length))return w[0]+y+w[1];if(n<0)return M(r)?t.stylize(RegExp.prototype.toString.call(r),"regexp"):t.stylize("[Object]","special");t.seen.push(r);var S;return S=m?c(t,r,n,b,a):a.map(function(e){return d(t,r,n,b,e,m)}),t.seen.pop(),l(S,y,w)}function u(t,e){if(_(e))return t.stylize("undefined","undefined");if(g(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}return m(e)?t.stylize(""+e,"number"):b(e)?t.stylize(""+e,"boolean"):v(e)?t.stylize("null","null"):void 0}function h(t){return"["+Error.prototype.toString.call(t)+"]"}function c(t,e,r,n,i){for(var o=[],a=0,f=e.length;a-1&&(f=o?f.split("\n").map(function(t){return" "+t}).join("\n").substr(2):"\n"+f.split("\n").map(function(t){return" "+t}).join("\n"))):f=t.stylize("[Circular]","special")),_(a)){if(o&&i.match(/^\d+$/))return f;a=JSON.stringify(""+i),a.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=t.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=t.stylize(a,"string"))}return a+": "+f}function l(t,e,r){var n=0,i=t.reduce(function(t,e){return n++,e.indexOf("\n")>=0&&n++,t+e.replace(/\u001b\[\d\d?m/g,"").length+1},0);return i>60?r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1]:r[0]+e+" "+t.join(", ")+" "+r[1]}function p(t){return Array.isArray(t)}function b(t){return"boolean"==typeof t}function v(t){return null===t}function y(t){return null==t}function m(t){return"number"==typeof t}function g(t){return"string"==typeof t}function w(t){return"symbol"==typeof t}function _(t){return void 0===t}function M(t){return S(t)&&"[object RegExp]"===I(t)}function S(t){return"object"==typeof t&&null!==t}function E(t){return S(t)&&"[object Date]"===I(t)}function A(t){return S(t)&&("[object Error]"===I(t)||t instanceof Error)}function k(t){return"function"==typeof t}function x(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||"undefined"==typeof t}function I(t){return Object.prototype.toString.call(t)}function B(t){return t<10?"0"+t.toString(10):t.toString(10)}function O(){var t=new Date,e=[B(t.getHours()),B(t.getMinutes()),B(t.getSeconds())].join(":");return[t.getDate(),C[t.getMonth()],e].join(" ")}function R(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var P=/%[sdj%]/g;e.format=function(t){if(!g(t)){for(var e=[],r=0;r=o)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}}),f=n[r];r 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { - issuers[_key - 3] = arguments[_key]; - } - - var inputs = issuers.map(function (issuer) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__["a" /* default */])([issuer]); - }); - - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__makeTransaction__["a" /* default */])('CREATE', assetDefinition, metadata, outputs, inputs); -} - -/***/ }), -/* 13 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_buffer__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_bs58__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition__ = __webpack_require__(5); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_five_bells_condition__); -/* harmony export (immutable) */ __webpack_exports__["a"] = makeEd25519Condition; - - - - - -/** - * Create an Ed25519 Cryptocondition from an Ed25519 public key to put into an Output of a Transaction - * @param {string} publicKey base58 encoded Ed25519 public key for the recipient of the Transaction - * @returns {object} Ed25519 Condition (that will need to wrapped in an Output) - */ -function makeEd25519Condition(publicKey) { - var publicKeyBuffer = new __WEBPACK_IMPORTED_MODULE_0_buffer__["Buffer"](__WEBPACK_IMPORTED_MODULE_1_bs58___default.a.decode(publicKey)); - - var ed25519Fulfillment = new __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default.a.Ed25519(); - ed25519Fulfillment.setPublicKey(publicKeyBuffer); - var conditionUri = ed25519Fulfillment.getConditionUri(); - - return { - 'details': { - 'signature': null, - 'type_id': 4, - 'type': 'fulfillment', - 'bitmask': 32, - 'public_key': publicKey - }, - 'uri': conditionUri - }; -} - -/***/ }), -/* 14 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = makeOutput; -/** - * Create an Output from a Condition. - * Note: Assumes the given Condition was generated from a single public key (e.g. a Ed25519 Condition) - * @param {object} condition Condition (e.g. a Ed25519 Condition from `makeEd25519Condition()`) - * @param {number} amount Amount of the output - * @returns {object} An Output usable in a Transaction - */ -function makeOutput(condition) { - var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - - return { - amount: amount, - condition: condition, - 'public_keys': [condition.details.public_key] - }; -} - -/***/ }), -/* 15 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__makeTransaction__ = __webpack_require__(0); -/* harmony export (immutable) */ __webpack_exports__["a"] = makeTransferTransaction; - - - -/** - * Generate a `TRANSFER` transaction holding the `asset`, `metadata`, and `outputs`, that fulfills - * the `fulfilledOutputs` of `unspentTransaction`. - * @param {object} unspentTransaction Previous Transaction you have control over (i.e. can fulfill - * its Output Condition) - * @param {object} metadata Metadata for the Transaction - * @param {object[]} outputs Array of Output objects to add to the Transaction. - * Think of these as the recipients of the asset after the transaction. - * For `TRANSFER` Transactions, this should usually just be a list of - * Outputs wrapping Ed25519 Conditions generated from the public keys of - * the recipients. - * @param {...number} fulfilledOutputs Indices of the Outputs in `unspentTransaction` that this - * Transaction fulfills. - * Note that the public keys listed in the fulfilled Outputs - * must be used (and in the same order) to sign the Transaction - * (`signTransaction()`). - * @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before - * sending it off! - */ -function makeTransferTransaction(unspentTransaction, metadata, outputs) { - for (var _len = arguments.length, fulfilledOutputs = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { - fulfilledOutputs[_key - 3] = arguments[_key]; - } - - var inputs = fulfilledOutputs.map(function (outputIndex) { - var fulfilledOutput = unspentTransaction.outputs[outputIndex]; - var transactionLink = { - 'output': outputIndex, - 'txid': unspentTransaction.id - }; - - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__["a" /* default */])(fulfilledOutput.public_keys, transactionLink); - }); - - var assetLink = { - 'id': unspentTransaction.operation === 'CREATE' ? unspentTransaction.id : unspentTransaction.asset.id - }; - - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__makeTransaction__["a" /* default */])('TRANSFER', assetLink, metadata, outputs, inputs); -} - -/***/ }), -/* 16 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_buffer__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_bs58__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition__ = __webpack_require__(5); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_five_bells_condition__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__serializeTransactionIntoCanonicalString__ = __webpack_require__(4); -/* harmony export (immutable) */ __webpack_exports__["a"] = signTransaction; - - - - - - -/** - * Sign the given `transaction` with the given `privateKey`s, returning a new copy of `transaction` - * that's been signed. - * Note: Only generates Ed25519 Fulfillments. Thresholds and other types of Fulfillments are left as - * an exercise for the user. - * @param {object} transaction Transaction to sign. `transaction` is not modified. - * @param {...string} privateKeys Private keys associated with the issuers of the `transaction`. - * Looped through to iteratively sign any Input Fulfillments found in - * the `transaction`. - * @returns {object} The signed version of `transaction`. - */ -function signTransaction(transaction) { - for (var _len = arguments.length, privateKeys = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - privateKeys[_key - 1] = arguments[_key]; - } - - var signedTx = clone(transaction); - signedTx.inputs.forEach(function (input, index) { - var privateKey = privateKeys[index]; - var privateKeyBuffer = new __WEBPACK_IMPORTED_MODULE_0_buffer__["Buffer"](__WEBPACK_IMPORTED_MODULE_1_bs58___default.a.decode(privateKey)); - var serializedTransaction = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__serializeTransactionIntoCanonicalString__["a" /* default */])(transaction, input); - var ed25519Fulfillment = new __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default.a.Ed25519(); - ed25519Fulfillment.sign(new __WEBPACK_IMPORTED_MODULE_0_buffer__["Buffer"](serializedTransaction), privateKeyBuffer); - var fulfillmentUri = ed25519Fulfillment.serializeUri(); - - input.fulfillment = fulfillmentUri; - }); - - return signedTx; -} - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(Buffer) {// base-x encoding -// Forked from https://github.com/cryptocoinjs/bs58 -// Originally written by Mike Hearn for BitcoinJ -// Copyright (c) 2011 Google Inc -// Ported to JavaScript by Stefan Thomas -// Merged Buffer refactorings from base58-native by Stephen Pair -// Copyright (c) 2013 BitPay Inc - -module.exports = function base (ALPHABET) { - var ALPHABET_MAP = {} - var BASE = ALPHABET.length - var LEADER = ALPHABET.charAt(0) - - // pre-compute lookup table - for (var z = 0; z < ALPHABET.length; z++) { - var x = ALPHABET.charAt(z) - - if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous') - ALPHABET_MAP[x] = z - } - - function encode (source) { - if (source.length === 0) return '' - - var digits = [0] - for (var i = 0; i < source.length; ++i) { - for (var j = 0, carry = source[i]; j < digits.length; ++j) { - carry += digits[j] << 8 - digits[j] = carry % BASE - carry = (carry / BASE) | 0 - } - - while (carry > 0) { - digits.push(carry % BASE) - carry = (carry / BASE) | 0 - } - } - - var string = '' - - // deal with leading zeros - for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0] - // convert digits to a string - for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]] - - return string - } - - function decodeUnsafe (string) { - if (string.length === 0) return new Buffer(0) - - var bytes = [0] - for (var i = 0; i < string.length; i++) { - var value = ALPHABET_MAP[string[i]] - if (value === undefined) return - - for (var j = 0, carry = value; j < bytes.length; ++j) { - carry += bytes[j] * BASE - bytes[j] = carry & 0xff - carry >>= 8 - } - - while (carry > 0) { - bytes.push(carry & 0xff) - carry >>= 8 - } - } - - // deal with leading zeros - for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) { - bytes.push(0) - } - - return new Buffer(bytes.reverse()) - } - - function decode (string) { - var buffer = decodeUnsafe(string) - if (buffer) return buffer - - throw new Error('Non-base' + BASE + ' character') - } - - return { - encode: encode, - decodeUnsafe: decodeUnsafe, - decode: decode - } -} - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer)) - -/***/ }), -/* 18 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.byteLength = byteLength -exports.toByteArray = toByteArray -exports.fromByteArray = fromByteArray - -var lookup = [] -var revLookup = [] -var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array - -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i -} - -revLookup['-'.charCodeAt(0)] = 62 -revLookup['_'.charCodeAt(0)] = 63 - -function placeHoldersCount (b64) { - var len = b64.length - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 -} - -function byteLength (b64) { - // base64 is 4/3 + up to two characters of the original data - return b64.length * 3 / 4 - placeHoldersCount(b64) -} - -function toByteArray (b64) { - var i, j, l, tmp, placeHolders, arr - var len = b64.length - placeHolders = placeHoldersCount(b64) - - arr = new Arr(len * 3 / 4 - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? len - 4 : len - - var L = 0 - - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] - arr[L++] = (tmp >> 16) & 0xFF - arr[L++] = (tmp >> 8) & 0xFF - arr[L++] = tmp & 0xFF - } - - if (placeHolders === 2) { - tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[L++] = tmp & 0xFF - } else if (placeHolders === 1) { - tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[L++] = (tmp >> 8) & 0xFF - arr[L++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var output = '' - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - output += lookup[tmp >> 2] - output += lookup[(tmp << 4) & 0x3F] - output += '==' - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) - output += lookup[tmp >> 10] - output += lookup[(tmp >> 4) & 0x3F] - output += lookup[(tmp << 2) & 0x3F] - output += '=' - } - - parts.push(output) - - return parts.join('') -} - - -/***/ }), -/* 19 */ -/***/ (function(module, exports) { - -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} - - -/***/ }), -/* 20 */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; - - -/***/ }), -/* 21 */ +/* 23 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process, global) {/** @@ -3157,13 +3244,3472 @@ module.exports = Array.isArray || function (arr) { } })(); -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26), __webpack_require__(6))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10), __webpack_require__(11))) /***/ }), -/* 22 */ +/* 24 */ /***/ (function(module, exports, __webpack_require__) { -var json = typeof JSON !== 'undefined' ? JSON : __webpack_require__(23); +(function(window) { + var re = { + not_string: /[^s]/, + number: /[diefg]/, + json: /[j]/, + not_json: /[^j]/, + text: /^[^\x25]+/, + modulo: /^\x25{2}/, + placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/, + key: /^([a-z_][a-z_\d]*)/i, + key_access: /^\.([a-z_][a-z_\d]*)/i, + index_access: /^\[(\d+)\]/, + sign: /^[\+\-]/ + } + + function sprintf() { + var key = arguments[0], cache = sprintf.cache + if (!(cache[key] && cache.hasOwnProperty(key))) { + cache[key] = sprintf.parse(key) + } + return sprintf.format.call(null, cache[key], arguments) + } + + sprintf.format = function(parse_tree, argv) { + var cursor = 1, tree_length = parse_tree.length, node_type = "", arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = "" + for (i = 0; i < tree_length; i++) { + node_type = get_type(parse_tree[i]) + if (node_type === "string") { + output[output.length] = parse_tree[i] + } + else if (node_type === "array") { + match = parse_tree[i] // convenience purposes only + if (match[2]) { // keyword argument + arg = argv[cursor] + for (k = 0; k < match[2].length; k++) { + if (!arg.hasOwnProperty(match[2][k])) { + throw new Error(sprintf("[sprintf] property '%s' does not exist", match[2][k])) + } + arg = arg[match[2][k]] + } + } + else if (match[1]) { // positional argument (explicit) + arg = argv[match[1]] + } + else { // positional argument (implicit) + arg = argv[cursor++] + } + + if (get_type(arg) == "function") { + arg = arg() + } + + if (re.not_string.test(match[8]) && re.not_json.test(match[8]) && (get_type(arg) != "number" && isNaN(arg))) { + throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg))) + } + + if (re.number.test(match[8])) { + is_positive = arg >= 0 + } + + switch (match[8]) { + case "b": + arg = arg.toString(2) + break + case "c": + arg = String.fromCharCode(arg) + break + case "d": + case "i": + arg = parseInt(arg, 10) + break + case "j": + arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0) + break + case "e": + arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential() + break + case "f": + arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg) + break + case "g": + arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg) + break + case "o": + arg = arg.toString(8) + break + case "s": + arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg) + break + case "u": + arg = arg >>> 0 + break + case "x": + arg = arg.toString(16) + break + case "X": + arg = arg.toString(16).toUpperCase() + break + } + if (re.json.test(match[8])) { + output[output.length] = arg + } + else { + if (re.number.test(match[8]) && (!is_positive || match[3])) { + sign = is_positive ? "+" : "-" + arg = arg.toString().replace(re.sign, "") + } + else { + sign = "" + } + pad_character = match[4] ? match[4] === "0" ? "0" : match[4].charAt(1) : " " + pad_length = match[6] - (sign + arg).length + pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : "") : "" + output[output.length] = match[5] ? sign + arg + pad : (pad_character === "0" ? sign + pad + arg : pad + sign + arg) + } + } + } + return output.join("") + } + + sprintf.cache = {} + + sprintf.parse = function(fmt) { + var _fmt = fmt, match = [], parse_tree = [], arg_names = 0 + while (_fmt) { + if ((match = re.text.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = match[0] + } + else if ((match = re.modulo.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = "%" + } + else if ((match = re.placeholder.exec(_fmt)) !== null) { + if (match[2]) { + arg_names |= 1 + var field_list = [], replacement_field = match[2], field_match = [] + if ((field_match = re.key.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + while ((replacement_field = replacement_field.substring(field_match[0].length)) !== "") { + if ((field_match = re.key_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else if ((field_match = re.index_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + } + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + match[2] = field_list + } + else { + arg_names |= 2 + } + if (arg_names === 3) { + throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported") + } + parse_tree[parse_tree.length] = match + } + else { + throw new SyntaxError("[sprintf] unexpected placeholder") + } + _fmt = _fmt.substring(match[0].length) + } + return parse_tree + } + + var vsprintf = function(fmt, argv, _argv) { + _argv = (argv || []).slice(0) + _argv.splice(0, 0, fmt) + return sprintf.apply(null, _argv) + } + + /** + * helpers + */ + function get_type(variable) { + return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase() + } + + function str_repeat(input, multiplier) { + return Array(multiplier + 1).join(input) + } + + /** + * export to either browser or node.js + */ + if (true) { + exports.sprintf = sprintf + exports.vsprintf = vsprintf + } + else { + window.sprintf = sprintf + window.vsprintf = vsprintf + + if (typeof define === "function" && define.amd) { + define(function() { + return { + sprintf: sprintf, + vsprintf: vsprintf + } + }) + } + } +})(typeof window === "undefined" ? this : window); + + +/***/ }), +/* 25 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Ed25519Keypair__ = __webpack_require__(26); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Ed25519Keypair", function() { return __WEBPACK_IMPORTED_MODULE_0__Ed25519Keypair__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transaction__ = __webpack_require__(41); +/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "Transaction", function() { return __WEBPACK_IMPORTED_MODULE_1__transaction__; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__connection__ = __webpack_require__(29); +/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "Connection", function() { return __WEBPACK_IMPORTED_MODULE_2__connection__; }); + + + + + + + +/***/ }), +/* 26 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bs58__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_tweetnacl__ = __webpack_require__(88); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_tweetnacl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_tweetnacl__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_js_sha3__ = __webpack_require__(23); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_js_sha3___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_js_sha3__); +/* harmony export (immutable) */ __webpack_exports__["a"] = Ed25519Keypair; + + + + +/** + * @class Keypair Ed25519 keypair in base58 (as BigchainDB expects base58 keys) + * @type {Object} + * @param {number} secret A seed that will be used as a key derivation function + * @property {string} publicKey + * @property {string} privateKey + */ +function Ed25519Keypair(secret) { + var keyPair = void 0; + if (secret) { + // Quick and dirty: use key derivation function instead + var secretHash = __WEBPACK_IMPORTED_MODULE_2_js_sha3___default.a.sha3_256.create().update(secret).array(); + keyPair = __WEBPACK_IMPORTED_MODULE_1_tweetnacl___default.a.sign.keyPair.fromSeed(new Uint8Array(secretHash)); + } else { + keyPair = __WEBPACK_IMPORTED_MODULE_1_tweetnacl___default.a.sign.keyPair(); + } + this.publicKey = __WEBPACK_IMPORTED_MODULE_0_bs58___default.a.encode(keyPair.publicKey); + // tweetnacl's generated secret key is the secret key + public key (resulting in a 64-byte buffer) + this.privateKey = __WEBPACK_IMPORTED_MODULE_0_bs58___default.a.encode(keyPair.secretKey.slice(0, 32)); +} + +/***/ }), +/* 27 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_es6_promise__ = __webpack_require__(77); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_es6_promise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_es6_promise__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill__ = __webpack_require__(78); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_sprintf_js__ = __webpack_require__(24); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_sprintf_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_sprintf_js__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__format_text__ = __webpack_require__(36); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__stringify_as_query_param__ = __webpack_require__(39); +/* harmony export (immutable) */ __webpack_exports__["a"] = baseRequest; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + + + + + + + + +var fetch = __WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill___default()(__WEBPACK_IMPORTED_MODULE_0_es6_promise__["Promise"]); + +/** + * imported from https://github.com/bigchaindb/js-utility-belt/ + * + * Global fetch wrapper that adds some basic error handling and ease of use enhancements. + * Considers any non-2xx response as an error. + * + * For more information on fetch, see https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch. + * + * Expects fetch to already be available (either in a ES6 environment, bundled through webpack, or + * injected through a polyfill). + * + * @param {string} url Url to request. Can be specified as a sprintf format string (see + * https://github.com/alexei/sprintf.js) that will be resolved using + * `config.urlTemplateSpec`. + * @param {object} config Additional configuration, mostly passed to fetch as its 'init' config + * (see https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch#Parameters). + * @param {*} config.jsonBody Json payload to the request. Will automatically be + * JSON.stringify()-ed and override `config.body`. + * @param {string|object} config.query Query parameter to append to the end of the url. + * If specified as an object, keys will be + * decamelized into snake case first. + * @param {*[]|object} config.urlTemplateSpec Format spec to use to expand the url (see sprintf). + * @param {*} config.* All other options are passed through to fetch. + * + * @return {Promise} Promise that will resolve with the response if its status was 2xx; + * otherwise rejects with the response + */ +function baseRequest(url) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var jsonBody = _ref.jsonBody, + query = _ref.query, + urlTemplateSpec = _ref.urlTemplateSpec, + fetchConfig = _objectWithoutProperties(_ref, ['jsonBody', 'query', 'urlTemplateSpec']); + + var expandedUrl = url; + + if (urlTemplateSpec != null) { + if (Array.isArray(urlTemplateSpec) && urlTemplateSpec.length) { + // Use vsprintf for the array call signature + expandedUrl = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_sprintf_js__["vsprintf"])(url, urlTemplateSpec); + } else if (urlTemplateSpec && (typeof urlTemplateSpec === 'undefined' ? 'undefined' : _typeof(urlTemplateSpec)) === 'object' && Object.keys(urlTemplateSpec).length) { + expandedUrl = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__format_text__["a" /* default */])(url, urlTemplateSpec); + } else if (process.env.NODE_ENV !== 'production') { + // eslint-disable-next-line no-console + console.warn('Supplied urlTemplateSpec was not an array or object. Ignoring...'); + } + } + + if (query != null) { + if (typeof query === 'string') { + expandedUrl += query; + } else if (query && (typeof query === 'undefined' ? 'undefined' : _typeof(query)) === 'object') { + expandedUrl += __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__stringify_as_query_param__["a" /* default */])(query); + } else if (process.env.NODE_ENV !== 'production') { + // eslint-disable-next-line no-console + console.warn('Supplied query was not a string or object. Ignoring...'); + } + } + + if (jsonBody != null) { + fetchConfig.body = JSON.stringify(jsonBody); + } + + return fetch.fetch(expandedUrl, fetchConfig).then(function (res) { + // If status is not a 2xx (based on Response.ok), assume it's an error + // See https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch + if (!(res && res.ok)) { + throw res; + } + return res; + }); +} +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(10))) + +/***/ }), +/* 28 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); +/* harmony export (immutable) */ __webpack_exports__["a"] = getBlock; + + + +function getBlock(blockId, API_PATH) { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['blocks_detail'], { + urlTemplateSpec: { + blockId: blockId + } + }); +} + +/***/ }), +/* 29 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getBlock__ = __webpack_require__(28); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getBlock", function() { return __WEBPACK_IMPORTED_MODULE_0__getBlock__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getTransaction__ = __webpack_require__(13); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getTransaction", function() { return __WEBPACK_IMPORTED_MODULE_1__getTransaction__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__getStatus__ = __webpack_require__(12); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getStatus", function() { return __WEBPACK_IMPORTED_MODULE_2__getStatus__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__listBlocks__ = __webpack_require__(30); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "listBlocks", function() { return __WEBPACK_IMPORTED_MODULE_3__listBlocks__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__listOutputs__ = __webpack_require__(31); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "listOutputs", function() { return __WEBPACK_IMPORTED_MODULE_4__listOutputs__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__listTransactions__ = __webpack_require__(32); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "listTransactions", function() { return __WEBPACK_IMPORTED_MODULE_5__listTransactions__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__listVotes__ = __webpack_require__(33); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "listVotes", function() { return __WEBPACK_IMPORTED_MODULE_6__listVotes__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__pollStatusAndFetchTransaction__ = __webpack_require__(34); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "pollStatusAndFetchTransaction", function() { return __WEBPACK_IMPORTED_MODULE_7__pollStatusAndFetchTransaction__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__postTransaction__ = __webpack_require__(35); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "postTransaction", function() { return __WEBPACK_IMPORTED_MODULE_8__postTransaction__["a"]; }); + + + + + + + + + + + + + + + + + + + +/***/ }), +/* 30 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); +/* harmony export (immutable) */ __webpack_exports__["a"] = listBlocks; + + + +function listBlocks(_ref, API_PATH) { + var tx_id = _ref.tx_id, + status = _ref.status; + + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['blocks'], { + query: { + tx_id: tx_id, + status: status + } + }); +} + +/***/ }), +/* 31 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); +/* harmony export (immutable) */ __webpack_exports__["a"] = listOutputs; + + + +function listOutputs(_ref, API_PATH) { + var public_key = _ref.public_key, + unspent = _ref.unspent; + var onlyJsonResponse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['outputs'], { + query: { + public_key: public_key, + unspent: unspent + } + }, onlyJsonResponse); +} + +/***/ }), +/* 32 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); +/* harmony export (immutable) */ __webpack_exports__["a"] = listTransactions; + + + +function listTransactions(_ref, API_PATH) { + var asset_id = _ref.asset_id, + operation = _ref.operation; + + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['transactions'], { + query: { + asset_id: asset_id, + operation: operation + } + }); +} + +/***/ }), +/* 33 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); +/* harmony export (immutable) */ __webpack_exports__["a"] = listVotes; + + + +function listVotes(block_id, API_PATH) { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['votes'], { + query: { + block_id: block_id + } + }); +} + +/***/ }), +/* 34 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getTransaction__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getStatus__ = __webpack_require__(12); + + + +/* harmony default export */ __webpack_exports__["a"] = (function (tx_id, API_PATH) { + return new Promise(function (resolve, reject) { + var timer = setInterval(function () { + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__getStatus__["a" /* default */])(tx_id, API_PATH).then(function (res) { + console.log('Fetched transaction status:', res); + if (res.status === 'valid') { + clearInterval(timer); + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getTransaction__["a" /* default */])(tx_id, API_PATH).then(function (res) { + console.log('Fetched transaction:', res); + resolve(res); + }); + } + }).catch(function (err) { + clearInterval(timer); + reject(err); + }); + }, 500); + }); +}); + +/***/ }), +/* 35 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); +/* harmony export (immutable) */ __webpack_exports__["a"] = postTransaction; + + + +function postTransaction(transaction, API_PATH) { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__request__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__getApiUrls__["a" /* default */])(API_PATH)['transactions'], { + method: 'POST', + jsonBody: transaction + }); +} + +/***/ }), +/* 36 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_sprintf_js__ = __webpack_require__(24); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_sprintf_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_sprintf_js__); +/* harmony export (immutable) */ __webpack_exports__["a"] = formatText; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + + + +// Regexes taken from or inspired by sprintf-js +var Regex = { + TEMPLATE_LITERAL: /\${([^\)]+?)}/g, + KEY: /^([a-z_][a-z_\d]*)/i, + KEY_ACCESS: /^\.([a-z_][a-z_\d]*)/i, + INDEX_ACCESS: /^\[(\d+)\]/ +}; + +/** + * imported from https://github.com/bigchaindb/js-utility-belt/ + * + * Formats strings similarly to C's sprintf, with the addition of '${...}' formats. + * + * Makes a first pass replacing '${...}' formats before passing the expanded string and other + * arguments to sprintf-js. For more information on what sprintf can do, see + * https://github.com/alexei/sprintf.js. + * + * Examples: + * formatText('Hi there ${dimi}!', { dimi: 'Dimi' }) + * => 'Hi there Dimi!' + * + * formatText('${database} is %(status)s', { database: 'BigchainDB', status: 'big' }) + * => 'BigchainDB is big' + * + * Like sprintf-js, string interpolation for keywords and indexes is supported too: + * formatText('Berlin is best known for its ${berlin.topKnownFor[0].name}', { + * berlin: { + * topKnownFor: [{ + * name: 'Currywurst' + * }, ... + * ] + * } + * }) + * => 'Berlin is best known for its Currywurst' + */ +function formatText(s) { + var expandedFormatStr = s; + + // Try to replace formats of the form '${...}' if named replacement fields are used + + for (var _len = arguments.length, argv = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + argv[_key - 1] = arguments[_key]; + } + + if (s && argv.length === 1 && _typeof(argv[0]) === 'object') { + var templateSpecObj = argv[0]; + + expandedFormatStr = s.replace(Regex.TEMPLATE_LITERAL, function (match, replacement) { + var interpolationLeft = replacement; + + /** + * Interpolation algorithm inspired by sprintf-js. + * + * Goes through the replacement string getting the left-most key or index to interpolate + * on each pass. `value` at each step holds the last interpolation result, `curMatch` is + * the current property match, and `interpolationLeft` is the portion of the replacement + * string still to be interpolated. + * + * It's useful to note that RegExp.exec() returns with an array holding: + * [0]: Full string matched + * [1+]: Matching groups + * + * And that in the regexes defined, the first matching group always corresponds to the + * property matched. + */ + var value = void 0; + var curMatch = Regex.KEY.exec(interpolationLeft); + if (curMatch !== null) { + value = templateSpecObj[curMatch[1]]; + + // Assigning in the conditionals here makes the code less bloated + /* eslint-disable no-cond-assign */ + while ((interpolationLeft = interpolationLeft.substring(curMatch[0].length)) && value != null) { + if (curMatch = Regex.KEY_ACCESS.exec(interpolationLeft)) { + value = value[curMatch[1]]; + } else if (curMatch = Regex.INDEX_ACCESS.exec(interpolationLeft)) { + value = value[curMatch[1]]; + } else { + break; + } + } + /* eslint-enable no-cond-assign */ + } + + // If there's anything left to interpolate by the end then we've failed to interpolate + // the entire replacement string. + if (interpolationLeft.length) { + throw new SyntaxError('[formatText] failed to parse named argument key: ' + replacement); + } + + return value; + }); + } + + return __WEBPACK_IMPORTED_MODULE_0_sprintf_js__["sprintf"].apply(undefined, [expandedFormatStr].concat(argv)); +} + +/***/ }), +/* 37 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes__ = __webpack_require__(49); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries__); +/* harmony export (immutable) */ __webpack_exports__["a"] = sanitize; +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + + + +/** + * Abstraction for selectFromObject and omitFromObject for DRYness. + * Set isInclusion to true if the filter should be for including the filtered items (ie. selecting + * only them vs omitting only them). + */ +function filterFromObject(obj, filter) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + _ref$isInclusion = _ref.isInclusion, + isInclusion = _ref$isInclusion === undefined ? true : _ref$isInclusion; + + if (filter && Array.isArray(filter)) { + return applyFilterOnObject(obj, isInclusion ? function (_, key) { + return __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes___default()(filter, key); + } : function (_, key) { + return !__WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes___default()(filter, key); + }); + } else if (filter && typeof filter === 'function') { + // Flip the filter fn's return if it's for inclusion + return applyFilterOnObject(obj, isInclusion ? filter : function () { + return !filter.apply(undefined, arguments); + }); + } else { + throw new Error('The given filter is not an array or function. Exclude aborted'); + } +} + +/** + * Returns a filtered copy of the given object's own enumerable properties (no inherited + * properties), keeping any keys that pass the given filter function. + */ +function applyFilterOnObject(obj, filterFn) { + if (filterFn == null) { + return _extends({}, obj); + } + + var filteredObj = {}; + __WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries___default()(obj).forEach(function (_ref2) { + var _ref3 = _slicedToArray(_ref2, 2), + key = _ref3[0], + val = _ref3[1]; + + if (filterFn(val, key)) { + filteredObj[key] = val; + } + }); + + return filteredObj; +} + +/** + * Similar to lodash's _.pick(), this returns a copy of the given object's + * own and inherited enumerable properties, selecting only the keys in + * the given array or whose value pass the given filter function. + * @param {object} obj Source object + * @param {array|function} filter Array of key names to select or function to invoke per iteration + * @return {object} The new object + */ +function selectFromObject(obj, filter) { + return filterFromObject(obj, filter); +} + +/** + * Glorified selectFromObject. Takes an object and returns a filtered shallow copy that strips out + * any properties that are falsy (including coercions, ie. undefined, null, '', 0, ...). + * Does not modify the passed in object. + * + * @param {object} obj Javascript object + * @return {object} Sanitized Javascript object + */ +function sanitize(obj) { + return selectFromObject(obj, function (val) { + return !!val; + }); +} + +/***/ }), +/* 38 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_js_sha3__ = __webpack_require__(23); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_js_sha3___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_js_sha3__); +/* harmony export (immutable) */ __webpack_exports__["a"] = sha256Hash; + + +function sha256Hash(data) { + return __WEBPACK_IMPORTED_MODULE_0_js_sha3___default.a.sha3_256.create().update(data).hex(); +} + +/***/ }), +/* 39 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_decamelize__ = __webpack_require__(76); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_decamelize___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_decamelize__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_query_string__ = __webpack_require__(86); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_query_string___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_query_string__); +/* harmony export (immutable) */ __webpack_exports__["a"] = stringifyAsQueryParam; +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + + + + + +/** + * imported from https://github.com/bigchaindb/js-utility-belt/ + * + * Takes a key-value dictionary (ie. object) and converts it to a query-parameter string that you + * can directly append into a URL. + * + * Extends queryString.stringify by allowing you to specify a `transform` function that will be + * invoked on each of the dictionary's keys before being stringified into the query-parameter + * string. + * + * By default `transform` is `decamelize`, so a dictionary of the form: + * + * { + * page: 1, + * pageSize: 10 + * } + * + * will be converted to a string like: + * + * ?page=1&page_size=10 + * + * @param {object} obj Query params dictionary + * @param {function} [transform=decamelize] Transform function for each of the param keys + * @return {string} Query param string + */ +function stringifyAsQueryParam(obj) { + var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : __WEBPACK_IMPORTED_MODULE_1_decamelize___default.a; + + if (!obj || (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' || !Object.keys(obj).length) { + return ''; + } + + var transformedKeysObj = __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries___default()(obj).reduce(function (paramsObj, _ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + + paramsObj[transform(key)] = value; + return paramsObj; + }, {}); + + return '?' + __WEBPACK_IMPORTED_MODULE_2_query_string___default.a.stringify(transformedKeysObj); +} + +/***/ }), +/* 40 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__serializeTransactionIntoCanonicalString__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sha256Hash__ = __webpack_require__(38); +/* harmony export (immutable) */ __webpack_exports__["a"] = hashTransaction; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + + + +function hashTransaction(transaction) { + // Safely remove any tx id from the given transaction for hashing + var tx = _extends({}, transaction); + delete tx.id; + + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__sha256Hash__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__serializeTransactionIntoCanonicalString__["a" /* default */])(tx)); +} + +/***/ }), +/* 41 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__makeEd25519Condition__ = __webpack_require__(43); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeEd25519Condition", function() { return __WEBPACK_IMPORTED_MODULE_0__makeEd25519Condition__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__makeCreateTransaction__ = __webpack_require__(42); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeCreateTransaction", function() { return __WEBPACK_IMPORTED_MODULE_1__makeCreateTransaction__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__makeOutput__ = __webpack_require__(44); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeOutput", function() { return __WEBPACK_IMPORTED_MODULE_2__makeOutput__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__makeTransaction__ = __webpack_require__(3); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeTransaction", function() { return __WEBPACK_IMPORTED_MODULE_3__makeTransaction__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__makeTransferTransaction__ = __webpack_require__(45); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeTransferTransaction", function() { return __WEBPACK_IMPORTED_MODULE_4__makeTransferTransaction__["a"]; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__signTransaction__ = __webpack_require__(46); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "signTransaction", function() { return __WEBPACK_IMPORTED_MODULE_5__signTransaction__["a"]; }); + + + + + + + + + + + + + +/***/ }), +/* 42 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__makeTransaction__ = __webpack_require__(3); +/* harmony export (immutable) */ __webpack_exports__["a"] = makeCreateTransaction; + + + +/** + * Generate a `CREATE` transaction holding the `asset`, `metadata`, and `outputs`, to be signed by + * the `issuers`. + * @param {object} asset Created asset's data + * @param {object} metadata Metadata for the Transaction + * @param {object[]} outputs Array of Output objects to add to the Transaction. + * Think of these as the recipients of the asset after the transaction. + * For `CREATE` Transactions, this should usually just be a list of + * Outputs wrapping Ed25519 Conditions generated from the issuers' public + * keys (so that the issuers are the recipients of the created asset). + * @param {...string[]} issuers Public key of one or more issuers to the asset being created by this + * Transaction. + * Note: Each of the private keys corresponding to the given public + * keys MUST be used later (and in the same order) when signing the + * Transaction (`signTransaction()`). + * @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before + * sending it off! + */ +function makeCreateTransaction(asset, metadata, outputs) { + var assetDefinition = { + 'data': asset || null + }; + + for (var _len = arguments.length, issuers = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + issuers[_key - 3] = arguments[_key]; + } + + var inputs = issuers.map(function (issuer) { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__["a" /* default */])([issuer]); + }); + + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__makeTransaction__["a" /* default */])('CREATE', assetDefinition, metadata, outputs, inputs); +} + +/***/ }), +/* 43 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_buffer__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_bs58__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_five_bells_condition__); +/* harmony export (immutable) */ __webpack_exports__["a"] = makeEd25519Condition; + + + + + +/** + * Create an Ed25519 Cryptocondition from an Ed25519 public key to put into an Output of a Transaction + * @param {string} publicKey base58 encoded Ed25519 public key for the recipient of the Transaction + * @returns {object} Ed25519 Condition (that will need to wrapped in an Output) + */ +function makeEd25519Condition(publicKey) { + var publicKeyBuffer = new __WEBPACK_IMPORTED_MODULE_0_buffer__["Buffer"](__WEBPACK_IMPORTED_MODULE_1_bs58___default.a.decode(publicKey)); + + var ed25519Fulfillment = new __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default.a.Ed25519(); + ed25519Fulfillment.setPublicKey(publicKeyBuffer); + var conditionUri = ed25519Fulfillment.getConditionUri(); + + return { + 'details': { + 'signature': null, + 'type_id': 4, + 'type': 'fulfillment', + 'bitmask': 32, + 'public_key': publicKey + }, + 'uri': conditionUri + }; +} + +/***/ }), +/* 44 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = makeOutput; +/** + * Create an Output from a Condition. + * Note: Assumes the given Condition was generated from a single public key (e.g. a Ed25519 Condition) + * @param {object} condition Condition (e.g. a Ed25519 Condition from `makeEd25519Condition()`) + * @param {number} amount Amount of the output + * @returns {object} An Output usable in a Transaction + */ +function makeOutput(condition) { + var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + + return { + amount: amount, + condition: condition, + 'public_keys': [condition.details.public_key] + }; +} + +/***/ }), +/* 45 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__ = __webpack_require__(14); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__makeTransaction__ = __webpack_require__(3); +/* harmony export (immutable) */ __webpack_exports__["a"] = makeTransferTransaction; + + + +/** + * Generate a `TRANSFER` transaction holding the `asset`, `metadata`, and `outputs`, that fulfills + * the `fulfilledOutputs` of `unspentTransaction`. + * @param {object} unspentTransaction Previous Transaction you have control over (i.e. can fulfill + * its Output Condition) + * @param {object} metadata Metadata for the Transaction + * @param {object[]} outputs Array of Output objects to add to the Transaction. + * Think of these as the recipients of the asset after the transaction. + * For `TRANSFER` Transactions, this should usually just be a list of + * Outputs wrapping Ed25519 Conditions generated from the public keys of + * the recipients. + * @param {...number} fulfilledOutputs Indices of the Outputs in `unspentTransaction` that this + * Transaction fulfills. + * Note that the public keys listed in the fulfilled Outputs + * must be used (and in the same order) to sign the Transaction + * (`signTransaction()`). + * @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before + * sending it off! + */ +function makeTransferTransaction(unspentTransaction, metadata, outputs) { + for (var _len = arguments.length, fulfilledOutputs = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + fulfilledOutputs[_key - 3] = arguments[_key]; + } + + var inputs = fulfilledOutputs.map(function (outputIndex) { + var fulfilledOutput = unspentTransaction.outputs[outputIndex]; + var transactionLink = { + 'output': outputIndex, + 'txid': unspentTransaction.id + }; + + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__["a" /* default */])(fulfilledOutput.public_keys, transactionLink); + }); + + var assetLink = { + 'id': unspentTransaction.operation === 'CREATE' ? unspentTransaction.id : unspentTransaction.asset.id + }; + + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__makeTransaction__["a" /* default */])('TRANSFER', assetLink, metadata, outputs, inputs); +} + +/***/ }), +/* 46 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_buffer__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_bs58__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_five_bells_condition__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_clone__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_clone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_clone__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__serializeTransactionIntoCanonicalString__ = __webpack_require__(15); +/* harmony export (immutable) */ __webpack_exports__["a"] = signTransaction; + + + + + + + +/** + * Sign the given `transaction` with the given `privateKey`s, returning a new copy of `transaction` + * that's been signed. + * Note: Only generates Ed25519 Fulfillments. Thresholds and other types of Fulfillments are left as + * an exercise for the user. + * @param {object} transaction Transaction to sign. `transaction` is not modified. + * @param {...string} privateKeys Private keys associated with the issuers of the `transaction`. + * Looped through to iteratively sign any Input Fulfillments found in + * the `transaction`. + * @returns {object} The signed version of `transaction`. + */ +function signTransaction(transaction) { + for (var _len = arguments.length, privateKeys = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + privateKeys[_key - 1] = arguments[_key]; + } + + var signedTx = __WEBPACK_IMPORTED_MODULE_3_clone___default()(transaction); + signedTx.inputs.forEach(function (input, index) { + var privateKey = privateKeys[index]; + var privateKeyBuffer = new __WEBPACK_IMPORTED_MODULE_0_buffer__["Buffer"](__WEBPACK_IMPORTED_MODULE_1_bs58___default.a.decode(privateKey)); + var serializedTransaction = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__serializeTransactionIntoCanonicalString__["a" /* default */])(transaction, input); + var ed25519Fulfillment = new __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default.a.Ed25519(); + ed25519Fulfillment.sign(new __WEBPACK_IMPORTED_MODULE_0_buffer__["Buffer"](serializedTransaction), privateKeyBuffer); + var fulfillmentUri = ed25519Fulfillment.serializeUri(); + + input.fulfillment = fulfillmentUri; + }); + + return signedTx; +} + +/***/ }), +/* 47 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {// base-x encoding +// Forked from https://github.com/cryptocoinjs/bs58 +// Originally written by Mike Hearn for BitcoinJ +// Copyright (c) 2011 Google Inc +// Ported to JavaScript by Stefan Thomas +// Merged Buffer refactorings from base58-native by Stephen Pair +// Copyright (c) 2013 BitPay Inc + +module.exports = function base (ALPHABET) { + var ALPHABET_MAP = {} + var BASE = ALPHABET.length + var LEADER = ALPHABET.charAt(0) + + // pre-compute lookup table + for (var z = 0; z < ALPHABET.length; z++) { + var x = ALPHABET.charAt(z) + + if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous') + ALPHABET_MAP[x] = z + } + + function encode (source) { + if (source.length === 0) return '' + + var digits = [0] + for (var i = 0; i < source.length; ++i) { + for (var j = 0, carry = source[i]; j < digits.length; ++j) { + carry += digits[j] << 8 + digits[j] = carry % BASE + carry = (carry / BASE) | 0 + } + + while (carry > 0) { + digits.push(carry % BASE) + carry = (carry / BASE) | 0 + } + } + + var string = '' + + // deal with leading zeros + for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0] + // convert digits to a string + for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]] + + return string + } + + function decodeUnsafe (string) { + if (string.length === 0) return new Buffer(0) + + var bytes = [0] + for (var i = 0; i < string.length; i++) { + var value = ALPHABET_MAP[string[i]] + if (value === undefined) return + + for (var j = 0, carry = value; j < bytes.length; ++j) { + carry += bytes[j] * BASE + bytes[j] = carry & 0xff + carry >>= 8 + } + + while (carry > 0) { + bytes.push(carry & 0xff) + carry >>= 8 + } + } + + // deal with leading zeros + for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) { + bytes.push(0) + } + + return new Buffer(bytes.reverse()) + } + + function decode (string) { + var buffer = decodeUnsafe(string) + if (buffer) return buffer + + throw new Error('Non-base' + BASE + ' character') + } + + return { + encode: encode, + decodeUnsafe: decodeUnsafe, + decode: decode + } +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer)) + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray + +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i +} + +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 + +function placeHoldersCount (b64) { + var len = b64.length + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 +} + +function byteLength (b64) { + // base64 is 4/3 + up to two characters of the original data + return b64.length * 3 / 4 - placeHoldersCount(b64) +} + +function toByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + var len = b64.length + placeHolders = placeHoldersCount(b64) + + arr = new Arr(len * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? len - 4 : len + + var L = 0 + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] + arr[L++] = (tmp >> 16) & 0xFF + arr[L++] = (tmp >> 8) & 0xFF + arr[L++] = tmp & 0xFF + } + + if (placeHolders === 2) { + tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[L++] = tmp & 0xFF + } else if (placeHolders === 1) { + tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[L++] = (tmp >> 8) & 0xFF + arr[L++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var output = '' + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + output += lookup[tmp >> 2] + output += lookup[(tmp << 4) & 0x3F] + output += '==' + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) + output += lookup[tmp >> 10] + output += lookup[(tmp >> 4) & 0x3F] + output += lookup[(tmp << 2) & 0x3F] + output += '=' + } + + parts.push(output) + + return parts.join('') +} + + +/***/ }), +/* 49 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(74); +module.exports = __webpack_require__(5).Array.includes; + +/***/ }), +/* 50 */ +/***/ (function(module, exports) { + +module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; +}; + +/***/ }), +/* 51 */ +/***/ (function(module, exports) { + +module.exports = function(){ /* empty */ }; + +/***/ }), +/* 52 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(8); +module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; +}; + +/***/ }), +/* 53 */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function(it){ + return toString.call(it).slice(8, -1); +}; + +/***/ }), +/* 54 */ +/***/ (function(module, exports, __webpack_require__) { + +// optional / simple context binding +var aFunction = __webpack_require__(50); +module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; +}; + +/***/ }), +/* 55 */ +/***/ (function(module, exports) { + +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function(it){ + if(it == undefined)throw TypeError("Can't call method on " + it); + return it; +}; + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(8) + , document = __webpack_require__(7).document + // in old IE typeof document.createElement is 'object' + , is = isObject(document) && isObject(document.createElement); +module.exports = function(it){ + return is ? document.createElement(it) : {}; +}; + +/***/ }), +/* 57 */ +/***/ (function(module, exports) { + +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); + +/***/ }), +/* 58 */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function(it, key){ + return hasOwnProperty.call(it, key); +}; + +/***/ }), +/* 59 */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(62) + , createDesc = __webpack_require__(67); +module.exports = __webpack_require__(6) ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); +} : function(object, key, value){ + object[key] = value; + return object; +}; + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = !__webpack_require__(6) && !__webpack_require__(20)(function(){ + return Object.defineProperty(__webpack_require__(56)('div'), 'a', {get: function(){ return 7; }}).a != 7; +}); + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var cof = __webpack_require__(53); +module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ + return cof(it) == 'String' ? it.split('') : Object(it); +}; + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(52) + , IE8_DOM_DEFINE = __webpack_require__(60) + , toPrimitive = __webpack_require__(72) + , dP = Object.defineProperty; + +exports.f = __webpack_require__(6) ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; +}; + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(58) + , toIObject = __webpack_require__(9) + , arrayIndexOf = __webpack_require__(18)(false) + , IE_PROTO = __webpack_require__(68)('IE_PROTO'); + +module.exports = function(object, names){ + var O = toIObject(object) + , i = 0 + , result = [] + , key; + for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while(names.length > i)if(has(O, key = names[i++])){ + ~arrayIndexOf(result, key) || result.push(key); + } + return result; +}; + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.14 / 15.2.3.14 Object.keys(O) +var $keys = __webpack_require__(63) + , enumBugKeys = __webpack_require__(57); + +module.exports = Object.keys || function keys(O){ + return $keys(O, enumBugKeys); +}; + +/***/ }), +/* 65 */ +/***/ (function(module, exports) { + +exports.f = {}.propertyIsEnumerable; + +/***/ }), +/* 66 */ +/***/ (function(module, exports, __webpack_require__) { + +var getKeys = __webpack_require__(64) + , toIObject = __webpack_require__(9) + , isEnum = __webpack_require__(65).f; +module.exports = function(isEntries){ + return function(it){ + var O = toIObject(it) + , keys = getKeys(O) + , length = keys.length + , i = 0 + , result = [] + , key; + while(length > i)if(isEnum.call(O, key = keys[i++])){ + result.push(isEntries ? [key, O[key]] : O[key]); + } return result; + }; +}; + +/***/ }), +/* 67 */ +/***/ (function(module, exports) { + +module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; +}; + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + +var shared = __webpack_require__(69)('keys') + , uid = __webpack_require__(73); +module.exports = function(key){ + return shared[key] || (shared[key] = uid(key)); +}; + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(7) + , SHARED = '__core-js_shared__' + , store = global[SHARED] || (global[SHARED] = {}); +module.exports = function(key){ + return store[key] || (store[key] = {}); +}; + +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(21) + , max = Math.max + , min = Math.min; +module.exports = function(index, length){ + index = toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); +}; + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.15 ToLength +var toInteger = __webpack_require__(21) + , min = Math.min; +module.exports = function(it){ + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 +}; + +/***/ }), +/* 72 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = __webpack_require__(8); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function(it, S){ + if(!isObject(it))return it; + var fn, val; + if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; + if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + throw TypeError("Can't convert object to primitive value"); +}; + +/***/ }), +/* 73 */ +/***/ (function(module, exports) { + +var id = 0 + , px = Math.random(); +module.exports = function(key){ + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); +}; + +/***/ }), +/* 74 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// https://github.com/tc39/Array.prototype.includes +var $export = __webpack_require__(19) + , $includes = __webpack_require__(18)(true); + +$export($export.P, 'Array', { + includes: function includes(el /*, fromIndex = 0 */){ + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +__webpack_require__(51)('includes'); + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + +// https://github.com/tc39/proposal-object-values-entries +var $export = __webpack_require__(19) + , $entries = __webpack_require__(66)(true); + +$export($export.S, 'Object', { + entries: function entries(it){ + return $entries(it); + } +}); + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = function (str, sep) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string'); + } + + sep = typeof sep === 'undefined' ? '_' : sep; + + return str + .replace(/([a-z\d])([A-Z])/g, '$1' + sep + '$2') + .replace(/([A-Z]+)([A-Z][a-z\d]+)/g, '$1' + sep + '$2') + .toLowerCase(); +}; + + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process, global) {var require;/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version 4.1.0 + */ + +(function (global, factory) { + true ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.ES6Promise = factory()); +}(this, (function () { 'use strict'; + +function objectOrFunction(x) { + return typeof x === 'function' || typeof x === 'object' && x !== null; +} + +function isFunction(x) { + return typeof x === 'function'; +} + +var _isArray = undefined; +if (!Array.isArray) { + _isArray = function (x) { + return Object.prototype.toString.call(x) === '[object Array]'; + }; +} else { + _isArray = Array.isArray; +} + +var isArray = _isArray; + +var len = 0; +var vertxNext = undefined; +var customSchedulerFn = undefined; + +var asap = function asap(callback, arg) { + queue[len] = callback; + queue[len + 1] = arg; + len += 2; + if (len === 2) { + // If len is 2, that means that we need to schedule an async flush. + // If additional callbacks are queued before the queue is flushed, they + // will be processed by this flush that we are scheduling. + if (customSchedulerFn) { + customSchedulerFn(flush); + } else { + scheduleFlush(); + } + } +}; + +function setScheduler(scheduleFn) { + customSchedulerFn = scheduleFn; +} + +function setAsap(asapFn) { + asap = asapFn; +} + +var browserWindow = typeof window !== 'undefined' ? window : undefined; +var browserGlobal = browserWindow || {}; +var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; +var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]'; + +// test for web worker but not in IE10 +var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; + +// node +function useNextTick() { + // node version 0.10.x displays a deprecation warning when nextTick is used recursively + // see https://github.com/cujojs/when/issues/410 for details + return function () { + return process.nextTick(flush); + }; +} + +// vertx +function useVertxTimer() { + if (typeof vertxNext !== 'undefined') { + return function () { + vertxNext(flush); + }; + } + + return useSetTimeout(); +} + +function useMutationObserver() { + var iterations = 0; + var observer = new BrowserMutationObserver(flush); + var node = document.createTextNode(''); + observer.observe(node, { characterData: true }); + + return function () { + node.data = iterations = ++iterations % 2; + }; +} + +// web worker +function useMessageChannel() { + var channel = new MessageChannel(); + channel.port1.onmessage = flush; + return function () { + return channel.port2.postMessage(0); + }; +} + +function useSetTimeout() { + // Store setTimeout reference so es6-promise will be unaffected by + // other code modifying setTimeout (like sinon.useFakeTimers()) + var globalSetTimeout = setTimeout; + return function () { + return globalSetTimeout(flush, 1); + }; +} + +var queue = new Array(1000); +function flush() { + for (var i = 0; i < len; i += 2) { + var callback = queue[i]; + var arg = queue[i + 1]; + + callback(arg); + + queue[i] = undefined; + queue[i + 1] = undefined; + } + + len = 0; +} + +function attemptVertx() { + try { + var r = require; + var vertx = __webpack_require__(89); + vertxNext = vertx.runOnLoop || vertx.runOnContext; + return useVertxTimer(); + } catch (e) { + return useSetTimeout(); + } +} + +var scheduleFlush = undefined; +// Decide what async method to use to triggering processing of queued callbacks: +if (isNode) { + scheduleFlush = useNextTick(); +} else if (BrowserMutationObserver) { + scheduleFlush = useMutationObserver(); +} else if (isWorker) { + scheduleFlush = useMessageChannel(); +} else if (browserWindow === undefined && "function" === 'function') { + scheduleFlush = attemptVertx(); +} else { + scheduleFlush = useSetTimeout(); +} + +function then(onFulfillment, onRejection) { + var _arguments = arguments; + + var parent = this; + + var child = new this.constructor(noop); + + if (child[PROMISE_ID] === undefined) { + makePromise(child); + } + + var _state = parent._state; + + if (_state) { + (function () { + var callback = _arguments[_state - 1]; + asap(function () { + return invokeCallback(_state, child, callback, parent._result); + }); + })(); + } else { + subscribe(parent, child, onFulfillment, onRejection); + } + + return child; +} + +/** + `Promise.resolve` returns a promise that will become resolved with the + passed `value`. It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + resolve(1); + }); + + promise.then(function(value){ + // value === 1 + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.resolve(1); + + promise.then(function(value){ + // value === 1 + }); + ``` + + @method resolve + @static + @param {Any} value value that the returned promise will be resolved with + Useful for tooling. + @return {Promise} a promise that will become fulfilled with the given + `value` +*/ +function resolve(object) { + /*jshint validthis:true */ + var Constructor = this; + + if (object && typeof object === 'object' && object.constructor === Constructor) { + return object; + } + + var promise = new Constructor(noop); + _resolve(promise, object); + return promise; +} + +var PROMISE_ID = Math.random().toString(36).substring(16); + +function noop() {} + +var PENDING = void 0; +var FULFILLED = 1; +var REJECTED = 2; + +var GET_THEN_ERROR = new ErrorObject(); + +function selfFulfillment() { + return new TypeError("You cannot resolve a promise with itself"); +} + +function cannotReturnOwn() { + return new TypeError('A promises callback cannot return that same promise.'); +} + +function getThen(promise) { + try { + return promise.then; + } catch (error) { + GET_THEN_ERROR.error = error; + return GET_THEN_ERROR; + } +} + +function tryThen(then, value, fulfillmentHandler, rejectionHandler) { + try { + then.call(value, fulfillmentHandler, rejectionHandler); + } catch (e) { + return e; + } +} + +function handleForeignThenable(promise, thenable, then) { + asap(function (promise) { + var sealed = false; + var error = tryThen(then, thenable, function (value) { + if (sealed) { + return; + } + sealed = true; + if (thenable !== value) { + _resolve(promise, value); + } else { + fulfill(promise, value); + } + }, function (reason) { + if (sealed) { + return; + } + sealed = true; + + _reject(promise, reason); + }, 'Settle: ' + (promise._label || ' unknown promise')); + + if (!sealed && error) { + sealed = true; + _reject(promise, error); + } + }, promise); +} + +function handleOwnThenable(promise, thenable) { + if (thenable._state === FULFILLED) { + fulfill(promise, thenable._result); + } else if (thenable._state === REJECTED) { + _reject(promise, thenable._result); + } else { + subscribe(thenable, undefined, function (value) { + return _resolve(promise, value); + }, function (reason) { + return _reject(promise, reason); + }); + } +} + +function handleMaybeThenable(promise, maybeThenable, then$$) { + if (maybeThenable.constructor === promise.constructor && then$$ === then && maybeThenable.constructor.resolve === resolve) { + handleOwnThenable(promise, maybeThenable); + } else { + if (then$$ === GET_THEN_ERROR) { + _reject(promise, GET_THEN_ERROR.error); + GET_THEN_ERROR.error = null; + } else if (then$$ === undefined) { + fulfill(promise, maybeThenable); + } else if (isFunction(then$$)) { + handleForeignThenable(promise, maybeThenable, then$$); + } else { + fulfill(promise, maybeThenable); + } + } +} + +function _resolve(promise, value) { + if (promise === value) { + _reject(promise, selfFulfillment()); + } else if (objectOrFunction(value)) { + handleMaybeThenable(promise, value, getThen(value)); + } else { + fulfill(promise, value); + } +} + +function publishRejection(promise) { + if (promise._onerror) { + promise._onerror(promise._result); + } + + publish(promise); +} + +function fulfill(promise, value) { + if (promise._state !== PENDING) { + return; + } + + promise._result = value; + promise._state = FULFILLED; + + if (promise._subscribers.length !== 0) { + asap(publish, promise); + } +} + +function _reject(promise, reason) { + if (promise._state !== PENDING) { + return; + } + promise._state = REJECTED; + promise._result = reason; + + asap(publishRejection, promise); +} + +function subscribe(parent, child, onFulfillment, onRejection) { + var _subscribers = parent._subscribers; + var length = _subscribers.length; + + parent._onerror = null; + + _subscribers[length] = child; + _subscribers[length + FULFILLED] = onFulfillment; + _subscribers[length + REJECTED] = onRejection; + + if (length === 0 && parent._state) { + asap(publish, parent); + } +} + +function publish(promise) { + var subscribers = promise._subscribers; + var settled = promise._state; + + if (subscribers.length === 0) { + return; + } + + var child = undefined, + callback = undefined, + detail = promise._result; + + for (var i = 0; i < subscribers.length; i += 3) { + child = subscribers[i]; + callback = subscribers[i + settled]; + + if (child) { + invokeCallback(settled, child, callback, detail); + } else { + callback(detail); + } + } + + promise._subscribers.length = 0; +} + +function ErrorObject() { + this.error = null; +} + +var TRY_CATCH_ERROR = new ErrorObject(); + +function tryCatch(callback, detail) { + try { + return callback(detail); + } catch (e) { + TRY_CATCH_ERROR.error = e; + return TRY_CATCH_ERROR; + } +} + +function invokeCallback(settled, promise, callback, detail) { + var hasCallback = isFunction(callback), + value = undefined, + error = undefined, + succeeded = undefined, + failed = undefined; + + if (hasCallback) { + value = tryCatch(callback, detail); + + if (value === TRY_CATCH_ERROR) { + failed = true; + error = value.error; + value.error = null; + } else { + succeeded = true; + } + + if (promise === value) { + _reject(promise, cannotReturnOwn()); + return; + } + } else { + value = detail; + succeeded = true; + } + + if (promise._state !== PENDING) { + // noop + } else if (hasCallback && succeeded) { + _resolve(promise, value); + } else if (failed) { + _reject(promise, error); + } else if (settled === FULFILLED) { + fulfill(promise, value); + } else if (settled === REJECTED) { + _reject(promise, value); + } +} + +function initializePromise(promise, resolver) { + try { + resolver(function resolvePromise(value) { + _resolve(promise, value); + }, function rejectPromise(reason) { + _reject(promise, reason); + }); + } catch (e) { + _reject(promise, e); + } +} + +var id = 0; +function nextId() { + return id++; +} + +function makePromise(promise) { + promise[PROMISE_ID] = id++; + promise._state = undefined; + promise._result = undefined; + promise._subscribers = []; +} + +function Enumerator(Constructor, input) { + this._instanceConstructor = Constructor; + this.promise = new Constructor(noop); + + if (!this.promise[PROMISE_ID]) { + makePromise(this.promise); + } + + if (isArray(input)) { + this._input = input; + this.length = input.length; + this._remaining = input.length; + + this._result = new Array(this.length); + + if (this.length === 0) { + fulfill(this.promise, this._result); + } else { + this.length = this.length || 0; + this._enumerate(); + if (this._remaining === 0) { + fulfill(this.promise, this._result); + } + } + } else { + _reject(this.promise, validationError()); + } +} + +function validationError() { + return new Error('Array Methods must be provided an Array'); +}; + +Enumerator.prototype._enumerate = function () { + var length = this.length; + var _input = this._input; + + for (var i = 0; this._state === PENDING && i < length; i++) { + this._eachEntry(_input[i], i); + } +}; + +Enumerator.prototype._eachEntry = function (entry, i) { + var c = this._instanceConstructor; + var resolve$$ = c.resolve; + + if (resolve$$ === resolve) { + var _then = getThen(entry); + + if (_then === then && entry._state !== PENDING) { + this._settledAt(entry._state, i, entry._result); + } else if (typeof _then !== 'function') { + this._remaining--; + this._result[i] = entry; + } else if (c === Promise) { + var promise = new c(noop); + handleMaybeThenable(promise, entry, _then); + this._willSettleAt(promise, i); + } else { + this._willSettleAt(new c(function (resolve$$) { + return resolve$$(entry); + }), i); + } + } else { + this._willSettleAt(resolve$$(entry), i); + } +}; + +Enumerator.prototype._settledAt = function (state, i, value) { + var promise = this.promise; + + if (promise._state === PENDING) { + this._remaining--; + + if (state === REJECTED) { + _reject(promise, value); + } else { + this._result[i] = value; + } + } + + if (this._remaining === 0) { + fulfill(promise, this._result); + } +}; + +Enumerator.prototype._willSettleAt = function (promise, i) { + var enumerator = this; + + subscribe(promise, undefined, function (value) { + return enumerator._settledAt(FULFILLED, i, value); + }, function (reason) { + return enumerator._settledAt(REJECTED, i, reason); + }); +}; + +/** + `Promise.all` accepts an array of promises, and returns a new promise which + is fulfilled with an array of fulfillment values for the passed promises, or + rejected with the reason of the first passed promise to be rejected. It casts all + elements of the passed iterable to promises as it runs this algorithm. + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = resolve(2); + let promise3 = resolve(3); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // The array here would be [ 1, 2, 3 ]; + }); + ``` + + If any of the `promises` given to `all` are rejected, the first promise + that is rejected will be given as an argument to the returned promises's + rejection handler. For example: + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = reject(new Error("2")); + let promise3 = reject(new Error("3")); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // Code here never runs because there are rejected promises! + }, function(error) { + // error.message === "2" + }); + ``` + + @method all + @static + @param {Array} entries array of promises + @param {String} label optional string for labeling the promise. + Useful for tooling. + @return {Promise} promise that is fulfilled when all `promises` have been + fulfilled, or rejected if any of them become rejected. + @static +*/ +function all(entries) { + return new Enumerator(this, entries).promise; +} + +/** + `Promise.race` returns a new promise which is settled in the same way as the + first passed promise to settle. + + Example: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 2'); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // result === 'promise 2' because it was resolved before promise1 + // was resolved. + }); + ``` + + `Promise.race` is deterministic in that only the state of the first + settled promise matters. For example, even if other promises given to the + `promises` array argument are resolved, but the first settled promise has + become rejected before the other promises became fulfilled, the returned + promise will become rejected: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + reject(new Error('promise 2')); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // Code here never runs + }, function(reason){ + // reason.message === 'promise 2' because promise 2 became rejected before + // promise 1 became fulfilled + }); + ``` + + An example real-world use case is implementing timeouts: + + ```javascript + Promise.race([ajax('foo.json'), timeout(5000)]) + ``` + + @method race + @static + @param {Array} promises array of promises to observe + Useful for tooling. + @return {Promise} a promise which settles in the same way as the first passed + promise to settle. +*/ +function race(entries) { + /*jshint validthis:true */ + var Constructor = this; + + if (!isArray(entries)) { + return new Constructor(function (_, reject) { + return reject(new TypeError('You must pass an array to race.')); + }); + } else { + return new Constructor(function (resolve, reject) { + var length = entries.length; + for (var i = 0; i < length; i++) { + Constructor.resolve(entries[i]).then(resolve, reject); + } + }); + } +} + +/** + `Promise.reject` returns a promise rejected with the passed `reason`. + It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + reject(new Error('WHOOPS')); + }); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.reject(new Error('WHOOPS')); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + @method reject + @static + @param {Any} reason value that the returned promise will be rejected with. + Useful for tooling. + @return {Promise} a promise rejected with the given `reason`. +*/ +function reject(reason) { + /*jshint validthis:true */ + var Constructor = this; + var promise = new Constructor(noop); + _reject(promise, reason); + return promise; +} + +function needsResolver() { + throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); +} + +function needsNew() { + throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); +} + +/** + Promise objects represent the eventual result of an asynchronous operation. The + primary way of interacting with a promise is through its `then` method, which + registers callbacks to receive either a promise's eventual value or the reason + why the promise cannot be fulfilled. + + Terminology + ----------- + + - `promise` is an object or function with a `then` method whose behavior conforms to this specification. + - `thenable` is an object or function that defines a `then` method. + - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). + - `exception` is a value that is thrown using the throw statement. + - `reason` is a value that indicates why a promise was rejected. + - `settled` the final resting state of a promise, fulfilled or rejected. + + A promise can be in one of three states: pending, fulfilled, or rejected. + + Promises that are fulfilled have a fulfillment value and are in the fulfilled + state. Promises that are rejected have a rejection reason and are in the + rejected state. A fulfillment value is never a thenable. + + Promises can also be said to *resolve* a value. If this value is also a + promise, then the original promise's settled state will match the value's + settled state. So a promise that *resolves* a promise that rejects will + itself reject, and a promise that *resolves* a promise that fulfills will + itself fulfill. + + + Basic Usage: + ------------ + + ```js + let promise = new Promise(function(resolve, reject) { + // on success + resolve(value); + + // on failure + reject(reason); + }); + + promise.then(function(value) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Advanced Usage: + --------------- + + Promises shine when abstracting away asynchronous interactions such as + `XMLHttpRequest`s. + + ```js + function getJSON(url) { + return new Promise(function(resolve, reject){ + let xhr = new XMLHttpRequest(); + + xhr.open('GET', url); + xhr.onreadystatechange = handler; + xhr.responseType = 'json'; + xhr.setRequestHeader('Accept', 'application/json'); + xhr.send(); + + function handler() { + if (this.readyState === this.DONE) { + if (this.status === 200) { + resolve(this.response); + } else { + reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); + } + } + }; + }); + } + + getJSON('/posts.json').then(function(json) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Unlike callbacks, promises are great composable primitives. + + ```js + Promise.all([ + getJSON('/posts'), + getJSON('/comments') + ]).then(function(values){ + values[0] // => postsJSON + values[1] // => commentsJSON + + return values; + }); + ``` + + @class Promise + @param {function} resolver + Useful for tooling. + @constructor +*/ +function Promise(resolver) { + this[PROMISE_ID] = nextId(); + this._result = this._state = undefined; + this._subscribers = []; + + if (noop !== resolver) { + typeof resolver !== 'function' && needsResolver(); + this instanceof Promise ? initializePromise(this, resolver) : needsNew(); + } +} + +Promise.all = all; +Promise.race = race; +Promise.resolve = resolve; +Promise.reject = reject; +Promise._setScheduler = setScheduler; +Promise._setAsap = setAsap; +Promise._asap = asap; + +Promise.prototype = { + constructor: Promise, + + /** + The primary way of interacting with a promise is through its `then` method, + which registers callbacks to receive either a promise's eventual value or the + reason why the promise cannot be fulfilled. + + ```js + findUser().then(function(user){ + // user is available + }, function(reason){ + // user is unavailable, and you are given the reason why + }); + ``` + + Chaining + -------- + + The return value of `then` is itself a promise. This second, 'downstream' + promise is resolved with the return value of the first promise's fulfillment + or rejection handler, or rejected if the handler throws an exception. + + ```js + findUser().then(function (user) { + return user.name; + }, function (reason) { + return 'default name'; + }).then(function (userName) { + // If `findUser` fulfilled, `userName` will be the user's name, otherwise it + // will be `'default name'` + }); + + findUser().then(function (user) { + throw new Error('Found user, but still unhappy'); + }, function (reason) { + throw new Error('`findUser` rejected and we're unhappy'); + }).then(function (value) { + // never reached + }, function (reason) { + // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. + // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. + }); + ``` + If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. + + ```js + findUser().then(function (user) { + throw new PedagogicalException('Upstream error'); + }).then(function (value) { + // never reached + }).then(function (value) { + // never reached + }, function (reason) { + // The `PedgagocialException` is propagated all the way down to here + }); + ``` + + Assimilation + ------------ + + Sometimes the value you want to propagate to a downstream promise can only be + retrieved asynchronously. This can be achieved by returning a promise in the + fulfillment or rejection handler. The downstream promise will then be pending + until the returned promise is settled. This is called *assimilation*. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // The user's comments are now available + }); + ``` + + If the assimliated promise rejects, then the downstream promise will also reject. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // If `findCommentsByAuthor` fulfills, we'll have the value here + }, function (reason) { + // If `findCommentsByAuthor` rejects, we'll have the reason here + }); + ``` + + Simple Example + -------------- + + Synchronous Example + + ```javascript + let result; + + try { + result = findResult(); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + findResult(function(result, err){ + if (err) { + // failure + } else { + // success + } + }); + ``` + + Promise Example; + + ```javascript + findResult().then(function(result){ + // success + }, function(reason){ + // failure + }); + ``` + + Advanced Example + -------------- + + Synchronous Example + + ```javascript + let author, books; + + try { + author = findAuthor(); + books = findBooksByAuthor(author); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + + function foundBooks(books) { + + } + + function failure(reason) { + + } + + findAuthor(function(author, err){ + if (err) { + failure(err); + // failure + } else { + try { + findBoooksByAuthor(author, function(books, err) { + if (err) { + failure(err); + } else { + try { + foundBooks(books); + } catch(reason) { + failure(reason); + } + } + }); + } catch(error) { + failure(err); + } + // success + } + }); + ``` + + Promise Example; + + ```javascript + findAuthor(). + then(findBooksByAuthor). + then(function(books){ + // found books + }).catch(function(reason){ + // something went wrong + }); + ``` + + @method then + @param {Function} onFulfilled + @param {Function} onRejected + Useful for tooling. + @return {Promise} + */ + then: then, + + /** + `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same + as the catch block of a try/catch statement. + + ```js + function findAuthor(){ + throw new Error('couldn't find that author'); + } + + // synchronous + try { + findAuthor(); + } catch(reason) { + // something went wrong + } + + // async with promises + findAuthor().catch(function(reason){ + // something went wrong + }); + ``` + + @method catch + @param {Function} onRejection + Useful for tooling. + @return {Promise} + */ + 'catch': function _catch(onRejection) { + return this.then(null, onRejection); + } +}; + +function polyfill() { + var local = undefined; + + if (typeof global !== 'undefined') { + local = global; + } else if (typeof self !== 'undefined') { + local = self; + } else { + try { + local = Function('return this')(); + } catch (e) { + throw new Error('polyfill failed because global object is unavailable in this environment'); + } + } + + var P = local.Promise; + + if (P) { + var promiseToString = null; + try { + promiseToString = Object.prototype.toString.call(P.resolve()); + } catch (e) { + // silently ignored + } + + if (promiseToString === '[object Promise]' && !P.cast) { + return; + } + } + + local.Promise = Promise; +} + +// Strange compat.. +Promise.polyfill = polyfill; +Promise.Promise = Promise; + +return Promise; + +}))); +//# sourceMappingURL=es6-promise.map + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10), __webpack_require__(11))) + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_RESULT__;(function (self) { + 'use strict'; + + function fetchPonyfill(options) { + var Promise = options && options.Promise || self.Promise; + var XMLHttpRequest = options && options.XMLHttpRequest || self.XMLHttpRequest; + var global = self; + + return (function () { + var self = Object.create(global, { + fetch: { + value: undefined, + writable: true + } + }); + + (function(self) { + 'use strict'; + + if (self.fetch) { + return + } + + var support = { + searchParams: 'URLSearchParams' in self, + iterable: 'Symbol' in self && 'iterator' in Symbol, + blob: 'FileReader' in self && 'Blob' in self && (function() { + try { + new Blob() + return true + } catch(e) { + return false + } + })(), + formData: 'FormData' in self, + arrayBuffer: 'ArrayBuffer' in self + } + + if (support.arrayBuffer) { + var viewClasses = [ + '[object Int8Array]', + '[object Uint8Array]', + '[object Uint8ClampedArray]', + '[object Int16Array]', + '[object Uint16Array]', + '[object Int32Array]', + '[object Uint32Array]', + '[object Float32Array]', + '[object Float64Array]' + ] + + var isDataView = function(obj) { + return obj && DataView.prototype.isPrototypeOf(obj) + } + + var isArrayBufferView = ArrayBuffer.isView || function(obj) { + return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 + } + } + + function normalizeName(name) { + if (typeof name !== 'string') { + name = String(name) + } + if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) { + throw new TypeError('Invalid character in header field name') + } + return name.toLowerCase() + } + + function normalizeValue(value) { + if (typeof value !== 'string') { + value = String(value) + } + return value + } + + // Build a destructive iterator for the value list + function iteratorFor(items) { + var iterator = { + next: function() { + var value = items.shift() + return {done: value === undefined, value: value} + } + } + + if (support.iterable) { + iterator[Symbol.iterator] = function() { + return iterator + } + } + + return iterator + } + + function Headers(headers) { + this.map = {} + + if (headers instanceof Headers) { + headers.forEach(function(value, name) { + this.append(name, value) + }, this) + + } else if (headers) { + Object.getOwnPropertyNames(headers).forEach(function(name) { + this.append(name, headers[name]) + }, this) + } + } + + Headers.prototype.append = function(name, value) { + name = normalizeName(name) + value = normalizeValue(value) + var oldValue = this.map[name] + this.map[name] = oldValue ? oldValue+','+value : value + } + + Headers.prototype['delete'] = function(name) { + delete this.map[normalizeName(name)] + } + + Headers.prototype.get = function(name) { + name = normalizeName(name) + return this.has(name) ? this.map[name] : null + } + + Headers.prototype.has = function(name) { + return this.map.hasOwnProperty(normalizeName(name)) + } + + Headers.prototype.set = function(name, value) { + this.map[normalizeName(name)] = normalizeValue(value) + } + + Headers.prototype.forEach = function(callback, thisArg) { + for (var name in this.map) { + if (this.map.hasOwnProperty(name)) { + callback.call(thisArg, this.map[name], name, this) + } + } + } + + Headers.prototype.keys = function() { + var items = [] + this.forEach(function(value, name) { items.push(name) }) + return iteratorFor(items) + } + + Headers.prototype.values = function() { + var items = [] + this.forEach(function(value) { items.push(value) }) + return iteratorFor(items) + } + + Headers.prototype.entries = function() { + var items = [] + this.forEach(function(value, name) { items.push([name, value]) }) + return iteratorFor(items) + } + + if (support.iterable) { + Headers.prototype[Symbol.iterator] = Headers.prototype.entries + } + + function consumed(body) { + if (body.bodyUsed) { + return Promise.reject(new TypeError('Already read')) + } + body.bodyUsed = true + } + + function fileReaderReady(reader) { + return new Promise(function(resolve, reject) { + reader.onload = function() { + resolve(reader.result) + } + reader.onerror = function() { + reject(reader.error) + } + }) + } + + function readBlobAsArrayBuffer(blob) { + var reader = new FileReader() + var promise = fileReaderReady(reader) + reader.readAsArrayBuffer(blob) + return promise + } + + function readBlobAsText(blob) { + var reader = new FileReader() + var promise = fileReaderReady(reader) + reader.readAsText(blob) + return promise + } + + function readArrayBufferAsText(buf) { + var view = new Uint8Array(buf) + var chars = new Array(view.length) + + for (var i = 0; i < view.length; i++) { + chars[i] = String.fromCharCode(view[i]) + } + return chars.join('') + } + + function bufferClone(buf) { + if (buf.slice) { + return buf.slice(0) + } else { + var view = new Uint8Array(buf.byteLength) + view.set(new Uint8Array(buf)) + return view.buffer + } + } + + function Body() { + this.bodyUsed = false + + this._initBody = function(body) { + this._bodyInit = body + if (!body) { + this._bodyText = '' + } else if (typeof body === 'string') { + this._bodyText = body + } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { + this._bodyBlob = body + } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { + this._bodyFormData = body + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this._bodyText = body.toString() + } else if (support.arrayBuffer && support.blob && isDataView(body)) { + this._bodyArrayBuffer = bufferClone(body.buffer) + // IE 10-11 can't handle a DataView body. + this._bodyInit = new Blob([this._bodyArrayBuffer]) + } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { + this._bodyArrayBuffer = bufferClone(body) + } else { + throw new Error('unsupported BodyInit type') + } + + if (!this.headers.get('content-type')) { + if (typeof body === 'string') { + this.headers.set('content-type', 'text/plain;charset=UTF-8') + } else if (this._bodyBlob && this._bodyBlob.type) { + this.headers.set('content-type', this._bodyBlob.type) + } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { + this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8') + } + } + } + + if (support.blob) { + this.blob = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return Promise.resolve(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(new Blob([this._bodyArrayBuffer])) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as blob') + } else { + return Promise.resolve(new Blob([this._bodyText])) + } + } + + this.arrayBuffer = function() { + if (this._bodyArrayBuffer) { + return consumed(this) || Promise.resolve(this._bodyArrayBuffer) + } else { + return this.blob().then(readBlobAsArrayBuffer) + } + } + } + + this.text = function() { + var rejected = consumed(this) + if (rejected) { + return rejected + } + + if (this._bodyBlob) { + return readBlobAsText(this._bodyBlob) + } else if (this._bodyArrayBuffer) { + return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) + } else if (this._bodyFormData) { + throw new Error('could not read FormData body as text') + } else { + return Promise.resolve(this._bodyText) + } + } + + if (support.formData) { + this.formData = function() { + return this.text().then(decode) + } + } + + this.json = function() { + return this.text().then(JSON.parse) + } + + return this + } + + // HTTP methods whose capitalization should be normalized + var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'] + + function normalizeMethod(method) { + var upcased = method.toUpperCase() + return (methods.indexOf(upcased) > -1) ? upcased : method + } + + function Request(input, options) { + options = options || {} + var body = options.body + + if (input instanceof Request) { + if (input.bodyUsed) { + throw new TypeError('Already read') + } + this.url = input.url + this.credentials = input.credentials + if (!options.headers) { + this.headers = new Headers(input.headers) + } + this.method = input.method + this.mode = input.mode + if (!body && input._bodyInit != null) { + body = input._bodyInit + input.bodyUsed = true + } + } else { + this.url = String(input) + } + + this.credentials = options.credentials || this.credentials || 'omit' + if (options.headers || !this.headers) { + this.headers = new Headers(options.headers) + } + this.method = normalizeMethod(options.method || this.method || 'GET') + this.mode = options.mode || this.mode || null + this.referrer = null + + if ((this.method === 'GET' || this.method === 'HEAD') && body) { + throw new TypeError('Body not allowed for GET or HEAD requests') + } + this._initBody(body) + } + + Request.prototype.clone = function() { + return new Request(this, { body: this._bodyInit }) + } + + function decode(body) { + var form = new FormData() + body.trim().split('&').forEach(function(bytes) { + if (bytes) { + var split = bytes.split('=') + var name = split.shift().replace(/\+/g, ' ') + var value = split.join('=').replace(/\+/g, ' ') + form.append(decodeURIComponent(name), decodeURIComponent(value)) + } + }) + return form + } + + function parseHeaders(rawHeaders) { + var headers = new Headers() + rawHeaders.split(/\r?\n/).forEach(function(line) { + var parts = line.split(':') + var key = parts.shift().trim() + if (key) { + var value = parts.join(':').trim() + headers.append(key, value) + } + }) + return headers + } + + Body.call(Request.prototype) + + function Response(bodyInit, options) { + if (!options) { + options = {} + } + + this.type = 'default' + this.status = 'status' in options ? options.status : 200 + this.ok = this.status >= 200 && this.status < 300 + this.statusText = 'statusText' in options ? options.statusText : 'OK' + this.headers = new Headers(options.headers) + this.url = options.url || '' + this._initBody(bodyInit) + } + + Body.call(Response.prototype) + + Response.prototype.clone = function() { + return new Response(this._bodyInit, { + status: this.status, + statusText: this.statusText, + headers: new Headers(this.headers), + url: this.url + }) + } + + Response.error = function() { + var response = new Response(null, {status: 0, statusText: ''}) + response.type = 'error' + return response + } + + var redirectStatuses = [301, 302, 303, 307, 308] + + Response.redirect = function(url, status) { + if (redirectStatuses.indexOf(status) === -1) { + throw new RangeError('Invalid status code') + } + + return new Response(null, {status: status, headers: {location: url}}) + } + + self.Headers = Headers + self.Request = Request + self.Response = Response + + self.fetch = function(input, init) { + return new Promise(function(resolve, reject) { + var request = new Request(input, init) + var xhr = new XMLHttpRequest() + + xhr.onload = function() { + var options = { + status: xhr.status, + statusText: xhr.statusText, + headers: parseHeaders(xhr.getAllResponseHeaders() || '') + } + options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL') + var body = 'response' in xhr ? xhr.response : xhr.responseText + resolve(new Response(body, options)) + } + + xhr.onerror = function() { + reject(new TypeError('Network request failed')) + } + + xhr.ontimeout = function() { + reject(new TypeError('Network request failed')) + } + + xhr.open(request.method, request.url, true) + + if (request.credentials === 'include') { + xhr.withCredentials = true + } + + if ('responseType' in xhr && support.blob) { + xhr.responseType = 'blob' + } + + request.headers.forEach(function(value, name) { + xhr.setRequestHeader(name, value) + }) + + xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit) + }) + } + self.fetch.polyfill = true + })(typeof self !== 'undefined' ? self : this); + + + return { + fetch: self.fetch, + Headers: self.Headers, + Request: self.Request, + Response: self.Response + }; + }()); + } + + if (true) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = function () { + return fetchPonyfill; + }.call(exports, __webpack_require__, exports, module), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (typeof exports === 'object') { + module.exports = fetchPonyfill; + } else { + self.fetchPonyfill = fetchPonyfill; + } +}(typeof self === 'undefined' ? this : self)); + + + +/***/ }), +/* 79 */ +/***/ (function(module, exports) { + +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + + +/***/ }), +/* 80 */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + + +/***/ }), +/* 81 */ +/***/ (function(module, exports, __webpack_require__) { + +var json = typeof JSON !== 'undefined' ? JSON : __webpack_require__(82); module.exports = function (obj, opts) { if (!opts) opts = {}; @@ -3250,15 +6796,15 @@ var objectKeys = Object.keys || function (obj) { /***/ }), -/* 23 */ +/* 82 */ /***/ (function(module, exports, __webpack_require__) { -exports.parse = __webpack_require__(24); -exports.stringify = __webpack_require__(25); +exports.parse = __webpack_require__(83); +exports.stringify = __webpack_require__(84); /***/ }), -/* 24 */ +/* 83 */ /***/ (function(module, exports) { var at, // The index of the current character @@ -3537,7 +7083,7 @@ module.exports = function (source, reviver) { /***/ }), -/* 25 */ +/* 84 */ /***/ (function(module, exports) { var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, @@ -3697,193 +7243,327 @@ module.exports = function (value, replacer, space) { /***/ }), -/* 26 */ -/***/ (function(module, exports) { +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } +"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } + return Object(val); } -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } } -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; }; -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - /***/ }), -/* 27 */ +/* 86 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var strictUriEncode = __webpack_require__(87); +var objectAssign = __webpack_require__(85); + +function encoderForArrayFormat(opts) { + switch (opts.arrayFormat) { + case 'index': + return function (key, value, index) { + return value === null ? [ + encode(key, opts), + '[', + index, + ']' + ].join('') : [ + encode(key, opts), + '[', + encode(index, opts), + ']=', + encode(value, opts) + ].join(''); + }; + + case 'bracket': + return function (key, value) { + return value === null ? encode(key, opts) : [ + encode(key, opts), + '[]=', + encode(value, opts) + ].join(''); + }; + + default: + return function (key, value) { + return value === null ? encode(key, opts) : [ + encode(key, opts), + '=', + encode(value, opts) + ].join(''); + }; + } +} + +function parserForArrayFormat(opts) { + var result; + + switch (opts.arrayFormat) { + case 'index': + return function (key, value, accumulator) { + result = /\[(\d*)\]$/.exec(key); + + key = key.replace(/\[\d*\]$/, ''); + + if (!result) { + accumulator[key] = value; + return; + } + + if (accumulator[key] === undefined) { + accumulator[key] = {}; + } + + accumulator[key][result[1]] = value; + }; + + case 'bracket': + return function (key, value, accumulator) { + result = /(\[\])$/.exec(key); + + key = key.replace(/\[\]$/, ''); + + if (!result || accumulator[key] === undefined) { + accumulator[key] = value; + return; + } + + accumulator[key] = [].concat(accumulator[key], value); + }; + + default: + return function (key, value, accumulator) { + if (accumulator[key] === undefined) { + accumulator[key] = value; + return; + } + + accumulator[key] = [].concat(accumulator[key], value); + }; + } +} + +function encode(value, opts) { + if (opts.encode) { + return opts.strict ? strictUriEncode(value) : encodeURIComponent(value); + } + + return value; +} + +function keysSorter(input) { + if (Array.isArray(input)) { + return input.sort(); + } else if (typeof input === 'object') { + return keysSorter(Object.keys(input)).sort(function (a, b) { + return Number(a) - Number(b); + }).map(function (key) { + return input[key]; + }); + } + + return input; +} + +exports.extract = function (str) { + return str.split('?')[1] || ''; +}; + +exports.parse = function (str, opts) { + opts = objectAssign({arrayFormat: 'none'}, opts); + + var formatter = parserForArrayFormat(opts); + + // Create an object with no prototype + // https://github.com/sindresorhus/query-string/issues/47 + var ret = Object.create(null); + + if (typeof str !== 'string') { + return ret; + } + + str = str.trim().replace(/^(\?|#|&)/, ''); + + if (!str) { + return ret; + } + + str.split('&').forEach(function (param) { + var parts = param.replace(/\+/g, ' ').split('='); + // Firefox (pre 40) decodes `%3D` to `=` + // https://github.com/sindresorhus/query-string/pull/37 + var key = parts.shift(); + var val = parts.length > 0 ? parts.join('=') : undefined; + + // missing `=` should be `null`: + // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters + val = val === undefined ? null : decodeURIComponent(val); + + formatter(decodeURIComponent(key), val, ret); + }); + + return Object.keys(ret).sort().reduce(function (result, key) { + var val = ret[key]; + if (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) { + // Sort object keys, not values + result[key] = keysSorter(val); + } else { + result[key] = val; + } + + return result; + }, Object.create(null)); +}; + +exports.stringify = function (obj, opts) { + var defaults = { + encode: true, + strict: true, + arrayFormat: 'none' + }; + + opts = objectAssign(defaults, opts); + + var formatter = encoderForArrayFormat(opts); + + return obj ? Object.keys(obj).sort().map(function (key) { + var val = obj[key]; + + if (val === undefined) { + return ''; + } + + if (val === null) { + return encode(key, opts); + } + + if (Array.isArray(val)) { + var result = []; + + val.slice().forEach(function (val2) { + if (val2 === undefined) { + return; + } + + result.push(formatter(key, val2, result.length)); + }); + + return result.join('&'); + } + + return encode(key, opts) + '=' + encode(val, opts); + }).filter(function (x) { + return x.length > 0; + }).join('&') : ''; +}; + + +/***/ }), +/* 87 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = function (str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase(); + }); +}; + + +/***/ }), +/* 88 */ /***/ (function(module, exports, __webpack_require__) { (function(nacl) { @@ -6262,7 +9942,7 @@ nacl.setPRNG = function(fn) { }); } else if (true) { // Node.js. - crypto = __webpack_require__(28); + crypto = __webpack_require__(90); if (crypto && crypto.randomBytes) { nacl.setPRNG(function(x, n) { var i, v = crypto.randomBytes(n); @@ -6277,19 +9957,25 @@ nacl.setPRNG = function(fn) { /***/ }), -/* 28 */ +/* 89 */ /***/ (function(module, exports) { /* (ignored) */ /***/ }), -/* 29 */ +/* 90 */ +/***/ (function(module, exports) { + +/* (ignored) */ + +/***/ }), +/* 91 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(7); +module.exports = __webpack_require__(25); /***/ }) /******/ ]); }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA1YTY5ODMxN2JkZDNhZjU0NzZmNiIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vbWFrZVRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL34vYnM1OC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L25vZGUtbGlicy1icm93c2VyL34vYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlSW5wdXRUZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vc2VyaWFsaXplVHJhbnNhY3Rpb25JbnRvQ2Fub25pY2FsU3RyaW5nLmpzIiwid2VicGFjazovLy8uL34vZml2ZS1iZWxscy1jb25kaXRpb24vZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3NyYy9FZDI1NTE5S2V5cGFpci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc2hhMjU2SGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vaGFzaFRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlQ3JlYXRlVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VFZDI1NTE5Q29uZGl0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlT3V0cHV0LmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlVHJhbnNmZXJUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL34vYmFzZS14L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vYmFzZTY0LWpzL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2lzYXJyYXkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9qcy1zaGEzL3NyYy9zaGEzLmpzIiwid2VicGFjazovLy8uL34vanNvbi1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vanNvbmlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzb25pZnkvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL34vanNvbmlmeS9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL34vcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL34vdHdlZXRuYWNsL25hY2wtZmFzdC5qcyIsIndlYnBhY2s6Ly8vY3J5cHRvIChpZ25vcmVkKSJdLCJuYW1lcyI6WyJtYWtlVHJhbnNhY3Rpb25UZW1wbGF0ZSIsIm1ha2VUcmFuc2FjdGlvbiIsIm9wZXJhdGlvbiIsImFzc2V0IiwibWV0YWRhdGEiLCJvdXRwdXRzIiwiaW5wdXRzIiwidHgiLCJpZCIsImhhc2hUcmFuc2FjdGlvbiIsIm1ha2VJbnB1dFRlbXBsYXRlIiwicHVibGljS2V5cyIsImZ1bGZpbGxzIiwiZnVsZmlsbG1lbnQiLCJzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmciLCJ0cmFuc2FjdGlvbiIsImlucHV0IiwiY2xvbmUiLCJtYXRjaCIsImZvckVhY2giLCJfaW5wdXQiLCJpbmRleE9mIiwic3RhYmxlU3RyaW5naWZ5IiwiYSIsImIiLCJrZXkiLCJFZDI1NTE5S2V5cGFpciIsImtleVBhaXIiLCJuYWNsIiwic2lnbiIsInB1YmxpY0tleSIsImJhc2U1OCIsImVuY29kZSIsInByaXZhdGVLZXkiLCJzZWNyZXRLZXkiLCJzbGljZSIsInNoYTI1Nkhhc2giLCJkYXRhIiwic2hhMyIsInNoYTNfMjU2IiwiY3JlYXRlIiwidXBkYXRlIiwiaGV4IiwibWFrZUNyZWF0ZVRyYW5zYWN0aW9uIiwiYXNzZXREZWZpbml0aW9uIiwiaXNzdWVycyIsIm1hcCIsImlzc3VlciIsIm1ha2VFZDI1NTE5Q29uZGl0aW9uIiwicHVibGljS2V5QnVmZmVyIiwiZGVjb2RlIiwiZWQyNTUxOUZ1bGZpbGxtZW50IiwiY2MiLCJFZDI1NTE5Iiwic2V0UHVibGljS2V5IiwiY29uZGl0aW9uVXJpIiwiZ2V0Q29uZGl0aW9uVXJpIiwibWFrZU91dHB1dCIsImNvbmRpdGlvbiIsImFtb3VudCIsImRldGFpbHMiLCJwdWJsaWNfa2V5IiwibWFrZVRyYW5zZmVyVHJhbnNhY3Rpb24iLCJ1bnNwZW50VHJhbnNhY3Rpb24iLCJmdWxmaWxsZWRPdXRwdXRzIiwib3V0cHV0SW5kZXgiLCJmdWxmaWxsZWRPdXRwdXQiLCJ0cmFuc2FjdGlvbkxpbmsiLCJwdWJsaWNfa2V5cyIsImFzc2V0TGluayIsInNpZ25UcmFuc2FjdGlvbiIsInByaXZhdGVLZXlzIiwic2lnbmVkVHgiLCJpbmRleCIsInByaXZhdGVLZXlCdWZmZXIiLCJzZXJpYWxpemVkVHJhbnNhY3Rpb24iLCJmdWxmaWxsbWVudFVyaSIsInNlcmlhbGl6ZVVyaSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7O0FDaEVBOztBQUdBLFNBQVNBLHVCQUFULEdBQW1DO0FBQy9CLFdBQU87QUFDSCxjQUFNLElBREg7QUFFSCxxQkFBYSxJQUZWO0FBR0gsbUJBQVcsRUFIUjtBQUlILGtCQUFVLEVBSlA7QUFLSCxvQkFBWSxJQUxUO0FBTUgsaUJBQVMsSUFOTjtBQU9ILG1CQUFXO0FBUFIsS0FBUDtBQVNIOztBQUdjLFNBQVNDLGVBQVQsQ0FBeUJDLFNBQXpCLEVBQW9DQyxLQUFwQyxFQUF1RjtBQUFBLFFBQTVDQyxRQUE0Qyx1RUFBakMsSUFBaUM7QUFBQSxRQUEzQkMsT0FBMkIsdUVBQWpCLEVBQWlCO0FBQUEsUUFBYkMsTUFBYSx1RUFBSixFQUFJOztBQUNsRyxRQUFNQyxLQUFLUCx5QkFBWDtBQUNBTyxPQUFHTCxTQUFILEdBQWVBLFNBQWY7QUFDQUssT0FBR0osS0FBSCxHQUFXQSxLQUFYO0FBQ0FJLE9BQUdILFFBQUgsR0FBY0EsUUFBZDtBQUNBRyxPQUFHRCxNQUFILEdBQVlBLE1BQVo7QUFDQUMsT0FBR0YsT0FBSCxHQUFhQSxPQUFiOztBQUVBO0FBQ0FFLE9BQUdDLEVBQUgsR0FBUSx3RkFBQUMsQ0FBZ0JGLEVBQWhCLENBQVI7QUFDQSxXQUFPQSxFQUFQO0FBQ0gsQzs7Ozs7O0FDM0JEO0FBQ0E7O0FBRUE7Ozs7Ozs7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbURBQW1EO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLFFBQVE7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQ0FBb0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7O0FDMWREOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGNBQWM7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1Qiw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixpQkFBaUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLCtCQUErQjtBQUNwRDtBQUNBLEtBQUssR0FBRyxVQUFVO0FBQ2xCOztBQUVBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0EsOERBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ25GQTtBQUNBOzs7Ozs7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLE9BQU87QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQjtBQUNyQixtQkFBbUI7QUFDbkI7QUFDQSx5QkFBeUI7QUFDekIsdUJBQXVCO0FBQ3ZCLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QiwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxFQUFFLFdBQVc7QUFDbEI7Ozs7Ozs7QUNoUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsWUFBWTtBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsWUFBWTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDLGNBQWMsd0RBQXdEO0FBQ3RFLGNBQWMsMEJBQTBCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixXQUFXO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsVUFBVTtBQUM5Qjs7Ozs7OztBQ3pKQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOzs7Ozs7O0FDbkx0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBLHdDQUF3Qyw0QkFBNEI7O0FBRXBFO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFFBQVE7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBLGFBQWEsUUFBUTs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsUUFBUTtBQUN6Qjs7QUFFQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQjtBQUNyQixxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEIsc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEIsc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCO0FBQ3JCLHFCQUFxQjs7QUFFckI7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LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wianMtYmlnY2hhaW5kYi1xdWlja3N0YXJ0XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImpzLWJpZ2NoYWluZGItcXVpY2tzdGFydFwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyOSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgNWE2OTgzMTdiZGQzYWY1NDc2ZjYiLCJpbXBvcnQgaGFzaFRyYW5zYWN0aW9uIGZyb20gJy4vaGFzaFRyYW5zYWN0aW9uJztcblxuXG5mdW5jdGlvbiBtYWtlVHJhbnNhY3Rpb25UZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAnaWQnOiBudWxsLFxuICAgICAgICAnb3BlcmF0aW9uJzogbnVsbCxcbiAgICAgICAgJ291dHB1dHMnOiBbXSxcbiAgICAgICAgJ2lucHV0cyc6IFtdLFxuICAgICAgICAnbWV0YWRhdGEnOiBudWxsLFxuICAgICAgICAnYXNzZXQnOiBudWxsLFxuICAgICAgICAndmVyc2lvbic6ICcwLjknLFxuICAgIH07XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZVRyYW5zYWN0aW9uKG9wZXJhdGlvbiwgYXNzZXQsIG1ldGFkYXRhID0gbnVsbCwgb3V0cHV0cyA9IFtdLCBpbnB1dHMgPSBbXSkge1xuICAgIGNvbnN0IHR4ID0gbWFrZVRyYW5zYWN0aW9uVGVtcGxhdGUoKTtcbiAgICB0eC5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgdHguYXNzZXQgPSBhc3NldDtcbiAgICB0eC5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgIHR4LmlucHV0cyA9IGlucHV0cztcbiAgICB0eC5vdXRwdXRzID0gb3V0cHV0cztcblxuICAgIC8vIEhhc2hpbmcgbXVzdCBiZSBkb25lIGFmdGVyLCBhcyB0aGUgaGFzaCBpcyBvZiB0aGUgVHJhbnNhY3Rpb24gKHVwIHRvIG5vdylcbiAgICB0eC5pZCA9IGhhc2hUcmFuc2FjdGlvbih0eCk7XG4gICAgcmV0dXJuIHR4O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL21ha2VUcmFuc2FjdGlvbi5qcyIsInZhciBiYXNleCA9IHJlcXVpcmUoJ2Jhc2UteCcpXG52YXIgQUxQSEFCRVQgPSAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eidcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNleChBTFBIQUJFVClcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iczU4L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9ub2RlLWxpYnMtYnJvd3Nlci9+L2J1ZmZlci9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlSW5wdXRUZW1wbGF0ZShwdWJsaWNLZXlzID0gW10sIGZ1bGZpbGxzID0gbnVsbCwgZnVsZmlsbG1lbnQgPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnVsZmlsbG1lbnQsXG4gICAgICAgIGZ1bGZpbGxzLFxuICAgICAgICAnb3duZXJzX2JlZm9yZSc6IHB1YmxpY0tleXMsXG4gICAgfTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUlucHV0VGVtcGxhdGUuanMiLCJpbXBvcnQgc3RhYmxlU3RyaW5naWZ5IGZyb20gJ2pzb24tc3RhYmxlLXN0cmluZ2lmeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyh0cmFuc2FjdGlvbiwgaW5wdXQpIHtcbiAgICAvLyBCaWdjaGFpbkRCIHNpZ25zIGZ1bGZpbGxtZW50cyBieSBzZXJpYWxpemluZyB0cmFuc2FjdGlvbnMgaW50byBhIFwiY2Fub25pY2FsXCIgZm9ybWF0IHdoZXJlXG4gICAgLy8gZWFjaCBmdWxmaWxsbWVudCBVUkkgaXMgcmVtb3ZlZCBiZWZvcmUgc29ydGluZyB0aGUgcmVtYWluaW5nIGtleXNcbiAgICBjb25zdCB0eCA9IGNsb25lKHRyYW5zYWN0aW9uKTtcbiAgICBsZXQgbWF0Y2g7XG4gICAgdHguaW5wdXRzLmZvckVhY2goKF9pbnB1dCkgPT4ge1xuXG4gICAgICAgIGlmICghKF9pbnB1dCAmJiBpbnB1dCAmJiBfaW5wdXRbJ2Z1bGZpbGxzJ10gJiYgaW5wdXRbJ2Z1bGZpbGxzJ11cbiAgICAgICAgICAgICYmICEoX2lucHV0WydmdWxmaWxscyddWyd0eGlkJ10gPT09IGlucHV0WydmdWxmaWxscyddWyd0eGlkJ11cbiAgICAgICAgICAgICYmIF9pbnB1dFsnZnVsZmlsbHMnXVsnb3V0cHV0J10gPT09IGlucHV0WydmdWxmaWxscyddWydvdXRwdXQnXSkpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHR4LmlucHV0cy5pbmRleE9mKF9pbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgX2lucHV0LmZ1bGZpbGxtZW50ID0gbnVsbDtcbiAgICB9KTtcbiAgICBpZiAoaW5wdXQgJiYgbWF0Y2ggPj0gMCAmJiB0eC5pbnB1dHMpIHtcbiAgICAgICAgdHguaW5wdXRzID0gW3R4LmlucHV0c1ttYXRjaF1dO1xuICAgIH1cbiAgICAvLyBTb3J0IHRoZSBrZXlzXG4gICAgcmV0dXJuIHN0YWJsZVN0cmluZ2lmeSh0eCwgKGEsIGIpID0+IChhLmtleSA+IGIua2V5ID8gMSA6IC0xKSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZy5qcyIsIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFwiRml2ZUJlbGxzQ29uZGl0aW9uXCIsW10sZSk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5GaXZlQmVsbHNDb25kaXRpb249ZSgpOnQuRml2ZUJlbGxzQ29uZGl0aW9uPWUoKX0odGhpcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe2lmKHJbbl0pcmV0dXJuIHJbbl0uZXhwb3J0czt2YXIgaT1yW25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtuXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxlKSxpLmw9ITAsaS5leHBvcnRzfXZhciByPXt9O3JldHVybiBlLm09dCxlLmM9cixlLmk9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGUuZD1mdW5jdGlvbih0LGUscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnJ9KX0sZS5uPWZ1bmN0aW9uKHQpe3ZhciByPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBlLmQocixcImFcIixyKSxyfSxlLm89ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9LGUucD1cIlwiLGUoZS5zPTYxMyl9KFtmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPXIoMzIpLG89cigxNCksYT1yKDE1KSxmPXIoMzMpLHM9XCJwcm90b3R5cGVcIix1PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaCxjLGQsbCxwPXQmdS5GLGI9dCZ1Lkcsdj10JnUuUyx5PXQmdS5QLG09dCZ1LkIsZz1iP246dj9uW2VdfHwobltlXT17fSk6KG5bZV18fHt9KVtzXSx3PWI/aTppW2VdfHwoaVtlXT17fSksXz13W3NdfHwod1tzXT17fSk7YiYmKHI9ZSk7Zm9yKGggaW4gciljPSFwJiZnJiZ2b2lkIDAhPT1nW2hdLGQ9KGM/ZzpyKVtoXSxsPW0mJmM/ZihkLG4pOnkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGQ/ZihGdW5jdGlvbi5jYWxsLGQpOmQsZyYmYShnLGgsZCx0JnUuVSksd1toXSE9ZCYmbyh3LGgsbCkseSYmX1toXSE9ZCYmKF9baF09ZCl9O24uY29yZT1pLHUuRj0xLHUuRz0yLHUuUz00LHUuUD04LHUuQj0xNix1Llc9MzIsdS5VPTY0LHUuUj0xMjgsdC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBpKCl7dHJ5e3ZhciB0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybiB0Ll9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09dC5mb28oKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5zdWJhcnJheSYmMD09PXQuc3ViYXJyYXkoMSwxKS5ieXRlTGVuZ3RofWNhdGNoKHQpe3JldHVybiExfX1mdW5jdGlvbiBvKCl7cmV0dXJuIHQuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gYShlLHIpe2lmKG8oKTxyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGhcIik7cmV0dXJuIHQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheShyKSxlLl9fcHJvdG9fXz10LnByb3RvdHlwZSk6KG51bGw9PT1lJiYoZT1uZXcgdChyKSksZS5sZW5ndGg9ciksZX1mdW5jdGlvbiB0KGUscixuKXtpZighKHQuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChlLHIsbik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiByKXRocm93IG5ldyBFcnJvcihcIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nXCIpO3JldHVybiBoKHRoaXMsZSl9cmV0dXJuIGYodGhpcyxlLHIsbil9ZnVuY3Rpb24gZih0LGUscixuKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9sKHQsZSxyLG4pOlwic3RyaW5nXCI9PXR5cGVvZiBlP2ModCxlLHIpOnAodCxlKX1mdW5jdGlvbiBzKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gdSh0LGUscixuKXtyZXR1cm4gcyhlKSxlPD0wP2EodCxlKTp2b2lkIDAhPT1yP1wic3RyaW5nXCI9PXR5cGVvZiBuP2EodCxlKS5maWxsKHIsbik6YSh0LGUpLmZpbGwocik6YSh0LGUpfWZ1bmN0aW9uIGgoZSxyKXtpZihzKHIpLGU9YShlLHI8MD8wOjB8YihyKSksIXQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG49MDtuPHI7KytuKWVbbl09MDtyZXR1cm4gZX1mdW5jdGlvbiBjKGUscixuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgbiYmXCJcIiE9PW58fChuPVwidXRmOFwiKSwhdC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIGk9MHx5KHIsbik7ZT1hKGUsaSk7dmFyIG89ZS53cml0ZShyLG4pO3JldHVybiBvIT09aSYmKGU9ZS5zbGljZSgwLG8pKSxlfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj1lLmxlbmd0aDwwPzA6MHxiKGUubGVuZ3RoKTt0PWEodCxyKTtmb3IodmFyIG49MDtuPHI7bis9MSl0W25dPTI1NSZlW25dO3JldHVybiB0fWZ1bmN0aW9uIGwoZSxyLG4saSl7aWYoci5ieXRlTGVuZ3RoLG48MHx8ci5ieXRlTGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzXCIpO2lmKHIuYnl0ZUxlbmd0aDxuKyhpfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHNcIik7cmV0dXJuIHI9dm9pZCAwPT09biYmdm9pZCAwPT09aT9uZXcgVWludDhBcnJheShyKTp2b2lkIDA9PT1pP25ldyBVaW50OEFycmF5KHIsbik6bmV3IFVpbnQ4QXJyYXkocixuLGkpLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1yLGUuX19wcm90b19fPXQucHJvdG90eXBlKTplPWQoZSxyKSxlfWZ1bmN0aW9uIHAoZSxyKXtpZih0LmlzQnVmZmVyKHIpKXt2YXIgbj0wfGIoci5sZW5ndGgpO3JldHVybiBlPWEoZSxuKSwwPT09ZS5sZW5ndGg/ZTooci5jb3B5KGUsMCwwLG4pLGUpfWlmKHIpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmci5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8XCJsZW5ndGhcImluIHIpcmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHIubGVuZ3RofHxaKHIubGVuZ3RoKT9hKGUsMCk6ZChlLHIpO2lmKFwiQnVmZmVyXCI9PT1yLnR5cGUmJlEoci5kYXRhKSlyZXR1cm4gZChlLHIuZGF0YSl9dGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC5cIil9ZnVuY3Rpb24gYih0KXtpZih0Pj1vKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4XCIrbygpLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gMHx0fWZ1bmN0aW9uIHYoZSl7cmV0dXJuK2UhPWUmJihlPTApLHQuYWxsb2MoK2UpfWZ1bmN0aW9uIHkoZSxyKXtpZih0LmlzQnVmZmVyKGUpKXJldHVybiBlLmxlbmd0aDtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoO1wic3RyaW5nXCIhPXR5cGVvZiBlJiYoZT1cIlwiK2UpO3ZhciBuPWUubGVuZ3RoO2lmKDA9PT1uKXJldHVybiAwO2Zvcih2YXIgaT0hMTs7KXN3aXRjaChyKXtjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBuO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2Ugdm9pZCAwOnJldHVybiBWKGUpLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gMipuO2Nhc2VcImhleFwiOnJldHVybiBuPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gWShlKS5sZW5ndGg7ZGVmYXVsdDppZihpKXJldHVybiBWKGUpLmxlbmd0aDtyPShcIlwiK3IpLnRvTG93ZXJDYXNlKCksaT0hMH19ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuXCJcIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVyblwiXCI7aWYocj4+Pj0wLGU+Pj49MCxyPD1lKXJldHVyblwiXCI7Zm9yKHR8fCh0PVwidXRmOFwiKTs7KXN3aXRjaCh0KXtjYXNlXCJoZXhcIjpyZXR1cm4gVCh0aGlzLGUscik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEIodGhpcyxlLHIpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIFIodGhpcyxlLHIpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBQKHRoaXMsZSxyKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gSSh0aGlzLGUscik7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIGoodGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCk7dD0odCtcIlwiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiB3KGUscixuLGksbyl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuPyhpPW4sbj0wKTpuPjIxNDc0ODM2NDc/bj0yMTQ3NDgzNjQ3Om48LTIxNDc0ODM2NDgmJihuPS0yMTQ3NDgzNjQ4KSxuPStuLGlzTmFOKG4pJiYobj1vPzA6ZS5sZW5ndGgtMSksbjwwJiYobj1lLmxlbmd0aCtuKSxuPj1lLmxlbmd0aCl7aWYobylyZXR1cm4tMTtuPWUubGVuZ3RoLTF9ZWxzZSBpZihuPDApe2lmKCFvKXJldHVybi0xO249MH1pZihcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9dC5mcm9tKHIsaSkpLHQuaXNCdWZmZXIocikpcmV0dXJuIDA9PT1yLmxlbmd0aD8tMTpfKGUscixuLGksbyk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHIpcmV0dXJuIHImPTI1NSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/bz9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSxyLG4pOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSxyLG4pOl8oZSxbcl0sbixpLG8pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXJcIil9ZnVuY3Rpb24gXyh0LGUscixuLGkpe2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gMT09PWE/dFtlXTp0LnJlYWRVSW50MTZCRShlKmEpfXZhciBhPTEsZj10Lmxlbmd0aCxzPWUubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJihuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpLFwidWNzMlwiPT09bnx8XCJ1Y3MtMlwiPT09bnx8XCJ1dGYxNmxlXCI9PT1ufHxcInV0Zi0xNmxlXCI9PT1uKSl7aWYodC5sZW5ndGg8Mnx8ZS5sZW5ndGg8MilyZXR1cm4tMTthPTIsZi89MixzLz0yLHIvPTJ9dmFyIHU7aWYoaSl7dmFyIGg9LTE7Zm9yKHU9cjt1PGY7dSsrKWlmKG8odCx1KT09PW8oZSxoPT09LTE/MDp1LWgpKXtpZihoPT09LTEmJihoPXUpLHUtaCsxPT09cylyZXR1cm4gaCphfWVsc2UgaCE9PS0xJiYodS09dS1oKSxoPS0xfWVsc2UgZm9yKHIrcz5mJiYocj1mLXMpLHU9cjt1Pj0wO3UtLSl7Zm9yKHZhciBjPSEwLGQ9MDtkPHM7ZCsrKWlmKG8odCx1K2QpIT09byhlLGQpKXtjPSExO2JyZWFrfWlmKGMpcmV0dXJuIHV9cmV0dXJuLTF9ZnVuY3Rpb24gTSh0LGUscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT10Lmxlbmd0aC1yO24/KG49TnVtYmVyKG4pLG4+aSYmKG49aSkpOm49aTt2YXIgbz1lLmxlbmd0aDtpZihvJTIhPT0wKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7bj5vLzImJihuPW8vMik7Zm9yKHZhciBhPTA7YTxuOysrYSl7dmFyIGY9cGFyc2VJbnQoZS5zdWJzdHIoMiphLDIpLDE2KTtpZihpc05hTihmKSlyZXR1cm4gYTt0W3IrYV09Zn1yZXR1cm4gYX1mdW5jdGlvbiBTKHQsZSxyLG4pe3JldHVybiBXKFYoZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24gRSh0LGUscixuKXtyZXR1cm4gVyhIKGUpLHQscixuKX1mdW5jdGlvbiBBKHQsZSxyLG4pe3JldHVybiBFKHQsZSxyLG4pfWZ1bmN0aW9uIGsodCxlLHIsbil7cmV0dXJuIFcoWShlKSx0LHIsbil9ZnVuY3Rpb24geCh0LGUscixuKXtyZXR1cm4gVyhYKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIEkodCxlLHIpe3JldHVybiAwPT09ZSYmcj09PXQubGVuZ3RoP0ouZnJvbUJ5dGVBcnJheSh0KTpKLmZyb21CeXRlQXJyYXkodC5zbGljZShlLHIpKX1mdW5jdGlvbiBCKHQsZSxyKXtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPWU7aTxyOyl7dmFyIG89dFtpXSxhPW51bGwsZj1vPjIzOT80Om8+MjIzPzM6bz4xOTE/MjoxO2lmKGkrZjw9cil7dmFyIHMsdSxoLGM7c3dpdGNoKGYpe2Nhc2UgMTpvPDEyOCYmKGE9byk7YnJlYWs7Y2FzZSAyOnM9dFtpKzFdLDEyOD09PSgxOTImcykmJihjPSgzMSZvKTw8Nnw2MyZzLGM+MTI3JiYoYT1jKSk7YnJlYWs7Y2FzZSAzOnM9dFtpKzFdLHU9dFtpKzJdLDEyOD09PSgxOTImcykmJjEyOD09PSgxOTImdSkmJihjPSgxNSZvKTw8MTJ8KDYzJnMpPDw2fDYzJnUsYz4yMDQ3JiYoYzw1NTI5Nnx8Yz41NzM0MykmJihhPWMpKTticmVhaztjYXNlIDQ6cz10W2krMV0sdT10W2krMl0saD10W2krM10sMTI4PT09KDE5MiZzKSYmMTI4PT09KDE5MiZ1KSYmMTI4PT09KDE5MiZoKSYmKGM9KDE1Jm8pPDwxOHwoNjMmcyk8PDEyfCg2MyZ1KTw8Nnw2MyZoLGM+NjU1MzUmJmM8MTExNDExMiYmKGE9YykpfX1udWxsPT09YT8oYT02NTUzMyxmPTEpOmE+NjU1MzUmJihhLT02NTUzNixuLnB1c2goYT4+PjEwJjEwMjN8NTUyOTYpLGE9NTYzMjB8MTAyMyZhKSxuLnB1c2goYSksaSs9Zn1yZXR1cm4gTyhuKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PXR0KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0KTtmb3IodmFyIHI9XCJcIixuPTA7bjxlOylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0LnNsaWNlKG4sbis9dHQpKTtyZXR1cm4gcn1mdW5jdGlvbiBSKHQsZSxyKXt2YXIgbj1cIlwiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZ0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBQKHQsZSxyKXt2YXIgbj1cIlwiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBufWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBuPXQubGVuZ3RoOyghZXx8ZTwwKSYmKGU9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgaT1cIlwiLG89ZTtvPHI7KytvKWkrPUcodFtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gaih0LGUscil7Zm9yKHZhciBuPXQuc2xpY2UoZSxyKSxpPVwiXCIsbz0wO288bi5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10rMjU2Km5bbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gQyh0LGUscil7aWYodCUxIT09MHx8dDwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKHQrZT5yKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1mdW5jdGlvbiBOKGUscixuLGksbyxhKXtpZighdC5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihyPm98fHI8YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihuK2k+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gTCh0LGUscixuKXtlPDAmJihlPTY1NTM1K2UrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aC1yLDIpO2k8bzsrK2kpdFtyK2ldPShlJjI1NTw8OCoobj9pOjEtaSkpPj4+OCoobj9pOjEtaSl9ZnVuY3Rpb24gVSh0LGUscixuKXtlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLXIsNCk7aTxvOysraSl0W3IraV09ZT4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiB6KHQsZSxyLG4saSxvKXtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIEQodCxlLHIsbixpKXtyZXR1cm4gaXx8eih0LGUsciw0LDMuNDAyODIzNDY2Mzg1Mjg4NmUzOCwtMy40MDI4MjM0NjYzODUyODg2ZTM4KSwkLndyaXRlKHQsZSxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIHEodCxlLHIsbixpKXtyZXR1cm4gaXx8eih0LGUsciw4LDEuNzk3NjkzMTM0ODYyMzE1N2UzMDgsLTEuNzk3NjkzMTM0ODYyMzE1N2UzMDgpLCQud3JpdGUodCxlLHIsbiw1Miw4KSxyKzh9ZnVuY3Rpb24gRih0KXtpZih0PUsodCkucmVwbGFjZShldCxcIlwiKSx0Lmxlbmd0aDwyKXJldHVyblwiXCI7Zm9yKDt0Lmxlbmd0aCU0IT09MDspdCs9XCI9XCI7cmV0dXJuIHR9ZnVuY3Rpb24gSyh0KXtyZXR1cm4gdC50cmltP3QudHJpbSgpOnQucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKX1mdW5jdGlvbiBHKHQpe3JldHVybiB0PDE2P1wiMFwiK3QudG9TdHJpbmcoMTYpOnQudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFYodCxlKXtlPWV8fDEvMDtmb3IodmFyIHIsbj10Lmxlbmd0aCxpPW51bGwsbz1bXSxhPTA7YTxuOysrYSl7aWYocj10LmNoYXJDb2RlQXQoYSkscj41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyhlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihhKzE9PT1uKXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyhlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj0oaS01NTI5Njw8MTB8ci01NjMyMCkrNjU1MzZ9ZWxzZSBpJiYoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigoZS09MSk8MClicmVhaztvLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKChlLT0yKTwwKWJyZWFrO28ucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigoZS09Myk8MClicmVhaztvLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKGUtPTQpPDApYnJlYWs7by5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBIKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKDI1NSZ0LmNoYXJDb2RlQXQocikpO3JldHVybiBlfWZ1bmN0aW9uIFgodCxlKXtmb3IodmFyIHIsbixpLG89W10sYT0wO2E8dC5sZW5ndGgmJiEoKGUtPTIpPDApOysrYSlyPXQuY2hhckNvZGVBdChhKSxuPXI+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfWZ1bmN0aW9uIFkodCl7cmV0dXJuIEoudG9CeXRlQXJyYXkoRih0KSl9ZnVuY3Rpb24gVyh0LGUscixuKXtmb3IodmFyIGk9MDtpPG4mJiEoaStyPj1lLmxlbmd0aHx8aT49dC5sZW5ndGgpOysraSllW2krcl09dFtpXTtyZXR1cm4gaX1mdW5jdGlvbiBaKHQpe3JldHVybiB0IT09dH12YXIgSj1yKDQ5MCksJD1yKDQ5MSksUT1yKDQ5Mik7ZS5CdWZmZXI9dCxlLlNsb3dCdWZmZXI9dixlLklOU1BFQ1RfTUFYX0JZVEVTPTUwLHQuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1uLlRZUEVEX0FSUkFZX1NVUFBPUlQ/bi5UWVBFRF9BUlJBWV9TVVBQT1JUOmkoKSxlLmtNYXhMZW5ndGg9bygpLHQucG9vbFNpemU9ODE5Mix0Ll9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz10LnByb3RvdHlwZSxlfSx0LmZyb209ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmKG51bGwsdCxlLHIpfSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJih0LnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsdC5fX3Byb3RvX189VWludDhBcnJheSxcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuc3BlY2llcyYmdFtTeW1ib2wuc3BlY2llc109PT10JiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITB9KSksdC5hbGxvYz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHUobnVsbCx0LGUscil9LHQuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7cmV0dXJuIGgobnVsbCx0KX0sdC5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGgobnVsbCx0KX0sdC5pc0J1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4hKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9LHQuY29tcGFyZT1mdW5jdGlvbihlLHIpe2lmKCF0LmlzQnVmZmVyKGUpfHwhdC5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVyc1wiKTtpZihlPT09cilyZXR1cm4gMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1yLmxlbmd0aCxvPTAsYT1NYXRoLm1pbihuLGkpO288YTsrK28paWYoZVtvXSE9PXJbb10pe249ZVtvXSxpPXJbb107YnJlYWt9cmV0dXJuIG48aT8tMTppPG4/MTowfSx0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24odCl7c3dpdGNoKFN0cmluZyh0KS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSx0LmNvbmNhdD1mdW5jdGlvbihlLHIpe2lmKCFRKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdC5hbGxvYygwKTt2YXIgbjtpZih2b2lkIDA9PT1yKWZvcihyPTAsbj0wO248ZS5sZW5ndGg7KytuKXIrPWVbbl0ubGVuZ3RoO3ZhciBpPXQuYWxsb2NVbnNhZmUociksbz0wO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBhPWVbbl07aWYoIXQuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KGksbyksbys9YS5sZW5ndGh9cmV0dXJuIGl9LHQuYnl0ZUxlbmd0aD15LHQucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCx0LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTIhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTIpZyh0aGlzLGUsZSsxKTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT09MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzXCIpO2Zvcih2YXIgZT0wO2U8dDtlKz00KWcodGhpcyxlLGUrMyksZyh0aGlzLGUrMSxlKzIpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTghPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTgpZyh0aGlzLGUsZSs3KSxnKHRoaXMsZSsxLGUrNiksZyh0aGlzLGUrMixlKzUpLGcodGhpcyxlKzMsZSs0KTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09dD9cIlwiOjA9PT1hcmd1bWVudHMubGVuZ3RoP0IodGhpcywwLHQpOm0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIXQuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09dC5jb21wYXJlKHRoaXMsZSl9LHQucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgdD1cIlwiLHI9ZS5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKHQ9dGhpcy50b1N0cmluZyhcImhleFwiLDAscikubWF0Y2goLy57Mn0vZykuam9pbihcIiBcIiksdGhpcy5sZW5ndGg+ciYmKHQrPVwiIC4uLiBcIikpLFwiPEJ1ZmZlciBcIit0K1wiPlwifSx0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUscixuLGksbyl7aWYoIXQuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7aWYodm9pZCAwPT09ciYmKHI9MCksdm9pZCAwPT09biYmKG49ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1pJiYoaT0wKSx2b2lkIDA9PT1vJiYobz10aGlzLmxlbmd0aCkscjwwfHxuPmUubGVuZ3RofHxpPDB8fG8+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYoaT49byYmcj49bilyZXR1cm4gMDtpZihpPj1vKXJldHVybi0xO2lmKHI+PW4pcmV0dXJuIDE7aWYocj4+Pj0wLG4+Pj49MCxpPj4+PTAsbz4+Pj0wLHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgYT1vLWksZj1uLXIscz1NYXRoLm1pbihhLGYpLHU9dGhpcy5zbGljZShpLG8pLGg9ZS5zbGljZShyLG4pLGM9MDtjPHM7KytjKWlmKHVbY10hPT1oW2NdKXthPXVbY10sZj1oW2NdO2JyZWFrfXJldHVybiBhPGY/LTE6ZjxhPzE6MH0sdC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmluZGV4T2YodCxlLHIpIT09LTF9LHQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB3KHRoaXMsdCxlLHIsITApfSx0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHcodGhpcyx0LGUsciwhMSl9LHQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PWUpbj1cInV0ZjhcIixyPXRoaXMubGVuZ3RoLGU9MDtlbHNlIGlmKHZvaWQgMD09PXImJlwic3RyaW5nXCI9PXR5cGVvZiBlKW49ZSxyPXRoaXMubGVuZ3RoLGU9MDtlbHNle2lmKCFpc0Zpbml0ZShlKSl0aHJvdyBuZXcgRXJyb3IoXCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZFwiKTtlfD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPVwidXRmOFwiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtZTtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksdC5sZW5ndGg+MCYmKHI8MHx8ZTwwKXx8ZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIpO258fChuPVwidXRmOFwiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZVwiaGV4XCI6cmV0dXJuIE0odGhpcyx0LGUscik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIFModGhpcyx0LGUscik7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gRSh0aGlzLHQsZSxyKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gQSh0aGlzLHQsZSxyKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gayh0aGlzLHQsZSxyKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4geCh0aGlzLHQsZSxyKTtkZWZhdWx0OmlmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK24pO249KFwiXCIrbikudG9Mb3dlckNhc2UoKSxvPSEwfX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciB0dD00MDk2O3QucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5sZW5ndGg7ZT1+fmUscj12b2lkIDA9PT1yP246fn5yLGU8MD8oZSs9bixlPDAmJihlPTApKTplPm4mJihlPW4pLHI8MD8ocis9bixyPDAmJihyPTApKTpyPm4mJihyPW4pLHI8ZSYmKHI9ZSk7dmFyIGk7aWYodC5UWVBFRF9BUlJBWV9TVVBQT1JUKWk9dGhpcy5zdWJhcnJheShlLHIpLGkuX19wcm90b19fPXQucHJvdG90eXBlO2Vsc2V7dmFyIG89ci1lO2k9bmV3IHQobyx2b2lkIDApO2Zvcih2YXIgYT0wO2E8bzsrK2EpaVthXT10aGlzW2ErZV19cmV0dXJuIGl9LHQucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxlLHIpe3R8PTAsZXw9MCxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLG89MDsrK288ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCtvXSppO3JldHVybiBufSx0LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHQsZSxyKXt0fD0wLGV8PTAscnx8Qyh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3QrLS1lXSxpPTE7ZT4wJiYoaSo9MjU2KTspbis9dGhpc1t0Ky0tZV0qaTtyZXR1cm4gbn0sdC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSx0LnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fSx0LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDh8dGhpc1t0KzFdfSx0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LHQucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1t0XSsodGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdKX0sdC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHQsZSxyKXt0fD0wLGV8PTAscnx8Qyh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxvPTA7KytvPGUmJihpKj0yNTYpOyluKz10aGlzW3Qrb10qaTtyZXR1cm4gaSo9MTI4LG4+PWkmJihuLT1NYXRoLnBvdygyLDgqZSkpLG59LHQucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0LGUscil7dHw9MCxlfD0wLHJ8fEModCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49ZSxpPTEsbz10aGlzW3QrLS1uXTtuPjAmJihpKj0yNTYpOylvKz10aGlzW3QrLS1uXSppO3JldHVybiBpKj0xMjgsbz49aSYmKG8tPU1hdGgucG93KDIsOCplKSksb30sdC5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3RdPygyNTUtdGhpc1t0XSsxKSotMTp0aGlzW3RdfSx0LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbih0LGUpe2V8fEModCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3RdfHRoaXNbdCsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sdC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odCxlKXtlfHxDKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LHQucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2fHRoaXNbdCszXTw8MjR9LHQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdPDwyNHx0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM119LHQucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSwkLnJlYWQodGhpcyx0LCEwLDIzLDQpfSx0LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksJC5yZWFkKHRoaXMsdCwhMSwyMyw0KX0sdC5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw4LHRoaXMubGVuZ3RoKSwkLnJlYWQodGhpcyx0LCEwLDUyLDgpfSx0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDgsdGhpcy5sZW5ndGgpLCQucmVhZCh0aGlzLHQsITEsNTIsOCl9LHQucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZXw9MCxyfD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqciktMTtOKHRoaXMsdCxlLHIsaSwwKX12YXIgbz0xLGE9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2E8ciYmKG8qPTI1Nik7KXRoaXNbZSthXT10L28mMjU1O3JldHVybiBlK3J9LHQucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZXw9MCxyfD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqciktMTtOKHRoaXMsdCxlLHIsaSwwKX12YXIgbz1yLTEsYT0xO2Zvcih0aGlzW2Urb109MjU1JnQ7LS1vPj0wJiYoYSo9MjU2KTspdGhpc1tlK29dPXQvYSYyNTU7cmV0dXJuIGUrcn0sdC5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDEsMjU1LDApLHQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1tyXT0yNTUmZSxyKzF9LHQucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwyLDY1NTM1LDApLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT0yNTUmZSx0aGlzW3IrMV09ZT4+PjgpOkwodGhpcyxlLHIsITApLHIrMn0sdC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDIsNjU1MzUsMCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPWU+Pj44LHRoaXNbcisxXT0yNTUmZSk6TCh0aGlzLGUsciwhMSkscisyfSx0LnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsNCw0Mjk0OTY3Mjk1LDApLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyKzNdPWU+Pj4yNCx0aGlzW3IrMl09ZT4+PjE2LHRoaXNbcisxXT1lPj4+OCx0aGlzW3JdPTI1NSZlKTpVKHRoaXMsZSxyLCEwKSxyKzR9LHQucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciw0LDQyOTQ5NjcyOTUsMCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPWU+Pj4yNCx0aGlzW3IrMV09ZT4+PjE2LHRoaXNbcisyXT1lPj4+OCx0aGlzW3IrM109MjU1JmUpOlUodGhpcyxlLHIsITEpLHIrNH0sdC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGV8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO04odGhpcyx0LGUscixpLTEsLWkpfXZhciBvPTAsYT0xLGY9MDtmb3IodGhpc1tlXT0yNTUmdDsrK288ciYmKGEqPTI1Nik7KXQ8MCYmMD09PWYmJjAhPT10aGlzW2Urby0xXSYmKGY9MSksdGhpc1tlK29dPSh0L2E+PjApLWYmMjU1O3JldHVybiBlK3J9LHQucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlfD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgbz1yLTEsYT0xLGY9MDtmb3IodGhpc1tlK29dPTI1NSZ0Oy0tbz49MCYmKGEqPTI1Nik7KXQ8MCYmMD09PWYmJjAhPT10aGlzW2UrbysxXSYmKGY9MSksdGhpc1tlK29dPSh0L2E+PjApLWYmMjU1O3JldHVybiBlK3J9LHQucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDEsMTI3LC0xMjgpLHQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3JdPTI1NSZlLHIrMX0sdC5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsMiwzMjc2NywtMzI3NjgpLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT0yNTUmZSx0aGlzW3IrMV09ZT4+PjgpOkwodGhpcyxlLHIsITApLHIrMn0sdC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsMiwzMjc2NywtMzI3NjgpLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT1lPj4+OCx0aGlzW3IrMV09MjU1JmUpOkwodGhpcyxlLHIsITEpLHIrMn0sdC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09MjU1JmUsdGhpc1tyKzFdPWU+Pj44LHRoaXNbcisyXT1lPj4+MTYsdGhpc1tyKzNdPWU+Pj4yNCk6VSh0aGlzLGUsciwhMCkscis0fSx0LnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT1lPj4+MjQsdGhpc1tyKzFdPWU+Pj4xNix0aGlzW3IrMl09ZT4+PjgsdGhpc1tyKzNdPTI1NSZlKTpVKHRoaXMsZSxyLCExKSxyKzR9LHQucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEQodGhpcyx0LGUsITAscil9LHQucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEQodGhpcyx0LGUsITEscil9LHQucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBxKHRoaXMsdCxlLCEwLHIpfSx0LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcSh0aGlzLHQsZSwhMSxyKX0sdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHIsbixpKXtpZihufHwobj0wKSxpfHwwPT09aXx8KGk9dGhpcy5sZW5ndGgpLHI+PWUubGVuZ3RoJiYocj1lLmxlbmd0aCkscnx8KHI9MCksaT4wJiZpPG4mJihpPW4pLGk9PT1uKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYoaTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7aT50aGlzLmxlbmd0aCYmKGk9dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXI8aS1uJiYoaT1lLmxlbmd0aC1yK24pO3ZhciBvLGE9aS1uO2lmKHRoaXM9PT1lJiZuPHImJnI8aSlmb3Iobz1hLTE7bz49MDstLW8pZVtvK3JdPXRoaXNbbytuXTtlbHNlIGlmKGE8MWUzfHwhdC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihvPTA7bzxhOysrbyllW28rcl09dGhpc1tvK25dO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KG4sbithKSxyKTtyZXR1cm4gYX0sdC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHIsbixpKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHI/KGk9cixyPTAsbj10aGlzLmxlbmd0aCk6XCJzdHJpbmdcIj09dHlwZW9mIG4mJihpPW4sbj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgbz1lLmNoYXJDb2RlQXQoMCk7bzwyNTYmJihlPW8pfWlmKHZvaWQgMCE9PWkmJlwic3RyaW5nXCIhPXR5cGVvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYhdC5pc0VuY29kaW5nKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitpKX1lbHNlXCJudW1iZXJcIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHI8MHx8dGhpcy5sZW5ndGg8cnx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKTtpZihuPD1yKXJldHVybiB0aGlzO3I+Pj49MCxuPXZvaWQgMD09PW4/dGhpcy5sZW5ndGg6bj4+PjAsZXx8KGU9MCk7dmFyIGE7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpZm9yKGE9cjthPG47KythKXRoaXNbYV09ZTtlbHNle3ZhciBmPXQuaXNCdWZmZXIoZSk/ZTpWKG5ldyB0KGUsaSkudG9TdHJpbmcoKSkscz1mLmxlbmd0aDtmb3IoYT0wO2E8bi1yOysrYSl0aGlzW2Ercl09ZlthJXNdfXJldHVybiB0aGlzfTt2YXIgZXQ9L1teK1xcLzAtOUEtWmEtei1fXS9nfSkuY2FsbChlLHIoMSkuQnVmZmVyLHIoMzkpKX0sZnVuY3Rpb24odCxlKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OnQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUpe3ZhciByPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPXIpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDg3KShcIndrc1wiKSxpPXIoNDgpLG89cig0KS5TeW1ib2wsYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBvLGY9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfHwoblt0XT1hJiZvW3RdfHwoYT9vOmkpKFwiU3ltYm9sLlwiK3QpKX07Zi5zdG9yZT1ufSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzKSxpPXIoMTc0KSxvPXIoMjkpLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZj1yKDgpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LGUscil7aWYobih0KSxlPW8oZSwhMCksbihyKSxpKXRyeXtyZXR1cm4gYSh0LGUscil9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiByfHxcInNldFwiaW4gcil0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gciYmKHRbZV09ci52YWx1ZSksdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM4KSxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP2kobih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KG4odCkpfX0sZnVuY3Rpb24odCxlKXt2YXIgcj17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5jYWxsKHQsZSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDkpLGk9cigzNyk7dC5leHBvcnRzPXIoOCk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuLmYodCxlLGkoMSxyKSl9OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yLHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPXIoMTQpLG89cigxMiksYT1yKDQ4KShcInNyY1wiKSxmPVwidG9TdHJpbmdcIixzPUZ1bmN0aW9uW2ZdLHU9KFwiXCIrcykuc3BsaXQoZik7cigzMikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYWxsKHQpfSwodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe3ZhciBzPVwiZnVuY3Rpb25cIj09dHlwZW9mIHI7cyYmKG8ocixcIm5hbWVcIil8fGkocixcIm5hbWVcIixlKSksdFtlXSE9PXImJihzJiYobyhyLGEpfHxpKHIsYSx0W2VdP1wiXCIrdFtlXTp1LmpvaW4oU3RyaW5nKGUpKSkpLHQ9PT1uP3RbZV09cjpmP3RbZV0/dFtlXT1yOmkodCxlLHIpOihkZWxldGUgdFtlXSxpKHQsZSxyKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLGYsZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzJiZ0aGlzW2FdfHxzLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDUpLG89cigyNCksYT0vXCIvZyxmPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVN0cmluZyhvKHQpKSxmPVwiPFwiK2U7cmV0dXJuXCJcIiE9PXImJihmKz1cIiBcIityKyc9XCInK1N0cmluZyhuKS5yZXBsYWNlKGEsXCImcXVvdDtcIikrJ1wiJyksZitcIj5cIitpK1wiPC9cIitlK1wiPlwifTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyW3RdPWUoZiksbihuLlArbi5GKmkoZnVuY3Rpb24oKXt2YXIgZT1cIlwiW3RdKCdcIicpO3JldHVybiBlIT09ZS50b0xvd2VyQ2FzZSgpfHxlLnNwbGl0KCdcIicpLmxlbmd0aD4zfSksXCJTdHJpbmdcIixyKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDY1KSxpPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbihpKHQpKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIG8uaXNCTih0KT90Oih0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCx2b2lkKG51bGwhPT10JiYoXCJsZVwiIT09ZSYmXCJiZVwiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8XCJiZVwiKSkpKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MCxpPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGk7bysrKXt2YXIgYT10LmNoYXJDb2RlQXQobyktNDg7bjw8PTQsbnw9YT49NDkmJmE8PTU0P2EtNDkrMTA6YT49MTcmJmE8PTIyP2EtMTcrMTA6MTUmYX1yZXR1cm4gbn1mdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaT0wLG89TWF0aC5taW4odC5sZW5ndGgsciksYT1lO2E8bzthKyspe3ZhciBmPXQuY2hhckNvZGVBdChhKS00ODtpKj1uLGkrPWY+PTQ5P2YtNDkrMTA6Zj49MTc/Zi0xNysxMDpmfXJldHVybiBpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0LmJpdExlbmd0aCgpKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXIvMjZ8MCxpPXIlMjY7ZVtyXT0odC53b3Jkc1tuXSYxPDxpKT4+Pml9cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLG89MHxlLndvcmRzWzBdLGE9aSpvLGY9NjcxMDg4NjMmYSxzPWEvNjcxMDg4NjR8MDtyLndvcmRzWzBdPWY7Zm9yKHZhciB1PTE7dTxuO3UrKyl7Zm9yKHZhciBoPXM+Pj4yNixjPTY3MTA4ODYzJnMsZD1NYXRoLm1pbih1LGUubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCx1LXQubGVuZ3RoKzEpO2w8PWQ7bCsrKXt2YXIgcD11LWx8MDtpPTB8dC53b3Jkc1twXSxvPTB8ZS53b3Jkc1tsXSxhPWkqbytjLGgrPWEvNjcxMDg4NjR8MCxjPTY3MTA4ODYzJmF9ci53b3Jkc1t1XT0wfGMscz0wfGh9cmV0dXJuIDAhPT1zP3Iud29yZHNbdV09MHxzOnIubGVuZ3RoLS0sci5zdHJpcCgpfWZ1bmN0aW9uIGgodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxvPTA7bzxyLmxlbmd0aC0xO28rKyl7dmFyIGE9aTtpPTA7Zm9yKHZhciBmPTY3MTA4ODYzJm4scz1NYXRoLm1pbihvLGUubGVuZ3RoLTEpLHU9TWF0aC5tYXgoMCxvLXQubGVuZ3RoKzEpO3U8PXM7dSsrKXt2YXIgaD1vLXUsYz0wfHQud29yZHNbaF0sZD0wfGUud29yZHNbdV0sbD1jKmQscD02NzEwODg2MyZsO2E9YSsobC82NzEwODg2NHwwKXwwLHA9cCtmfDAsZj02NzEwODg2MyZwLGE9YSsocD4+PjI2KXwwLGkrPWE+Pj4yNixhJj02NzEwODg2M31yLndvcmRzW29dPWYsbj1hLGE9aX1yZXR1cm4gMCE9PW4/ci53b3Jkc1tvXT1uOnIubGVuZ3RoLS0sci5zdHJpcCgpfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPW5ldyBkO3JldHVybiBuLm11bHAodCxlLHIpfWZ1bmN0aW9uIGQodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiBsKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBvKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBvKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBwKCl7bC5jYWxsKHRoaXMsXCJrMjU2XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiKX1mdW5jdGlvbiBiKCl7bC5jYWxsKHRoaXMsXCJwMjI0XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMVwiKX1mdW5jdGlvbiB2KCl7bC5jYWxsKHRoaXMsXCJwMTkyXCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZlwiKX1mdW5jdGlvbiB5KCl7bC5jYWxsKHRoaXMsXCIyNTUxOVwiLFwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiKX1mdW5jdGlvbiBtKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgZT1vLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksXCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDFcIiksdGhpcy5tPXQsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGcodCl7bS5jYWxsKHRoaXMsdCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9PTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IG8oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9XCJvYmplY3RcIj09dHlwZW9mIHQ/dC5leHBvcnRzPW86ZS5CTj1vLG8uQk49byxvLndvcmRTaXplPTI2O3ZhciB3O3RyeXt3PXIoMSkuQnVmZmVyfWNhdGNoKHQpe31vLmlzQk49ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvfHxudWxsIT09dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3Iud29yZFNpemU9PT1vLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHQud29yZHMpfSxvLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKT4wP3Q6ZX0sby5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk8MD90OmV9LG8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdE51bWJlcih0LGUscik7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUscik7XCJoZXhcIj09PWUmJihlPTE2KSxuKGU9PT0oMHxlKSYmZT49MiYmZTw9MzYpLHQ9dC50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZyxcIlwiKTt2YXIgaT0wO1wiLVwiPT09dFswXSYmaSsrLDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGkpOnRoaXMuX3BhcnNlQmFzZSh0LGUsaSksXCItXCI9PT10WzBdJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHQsZSxyKXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0Lmxlbmd0aCksdC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgbyxhLGY9MDtpZihcImJlXCI9PT1yKWZvcihpPXQubGVuZ3RoLTEsbz0wO2k+PTA7aS09MylhPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO2Vsc2UgaWYoXCJsZVwiPT09cilmb3IoaT0wLG89MDtpPHQubGVuZ3RoO2krPTMpYT10W2ldfHRbaSsxXTw8OHx0W2krMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24odCxlKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPTA7dmFyIG4saSxvPTA7Zm9yKHI9dC5sZW5ndGgtNixuPTA7cj49ZTtyLT02KWk9YSh0LHIscis2KSx0aGlzLndvcmRzW25dfD1pPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LW8mNDE5NDMwMyxvKz0yNCxvPj0yNiYmKG8tPTI2LG4rKyk7cis2IT09ZSYmKGk9YSh0LGUscis2KSx0aGlzLndvcmRzW25dfD1pPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LW8mNDE5NDMwMyksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGk9MTtpPD02NzEwODg2MztpKj1lKW4rKztuLS0saT1pL2V8MDtmb3IodmFyIG89dC5sZW5ndGgtcixhPW8lbixzPU1hdGgubWluKG8sby1hKStyLHU9MCxoPXI7aDxzO2grPW4pdT1mKHQsaCxoK24sZSksdGhpcy5pbXVsbihpKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KTtpZigwIT09YSl7dmFyIGM9MTtmb3IodT1mKHQsaCx0Lmxlbmd0aCxlKSxoPTA7aDxhO2grKyljKj1lO3RoaXMuaW11bG4oYyksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSl9fSxvLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBvKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0sby5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxvLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD9cIjxCTi1SOiBcIjpcIjxCTjogXCIpK3RoaXMudG9TdHJpbmcoMTYpK1wiPlwifTt2YXIgXz1bXCJcIixcIjBcIixcIjAwXCIsXCIwMDBcIixcIjAwMDBcIixcIjAwMDAwXCIsXCIwMDAwMDBcIixcIjAwMDAwMDBcIixcIjAwMDAwMDAwXCIsXCIwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIl0sTT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxTPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO28ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dD10fHwxMCxlPTB8ZXx8MTt2YXIgcjtpZigxNj09PXR8fFwiaGV4XCI9PT10KXtyPVwiXCI7Zm9yKHZhciBpPTAsbz0wLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9dGhpcy53b3Jkc1thXSxzPSgxNjc3NzIxNSYoZjw8aXxvKSkudG9TdHJpbmcoMTYpO289Zj4+PjI0LWkmMTY3NzcyMTUscj0wIT09b3x8YSE9PXRoaXMubGVuZ3RoLTE/X1s2LXMubGVuZ3RoXStzK3I6cytyLGkrPTIsaT49MjYmJihpLT0yNixhLS0pfWZvcigwIT09byYmKHI9by50b1N0cmluZygxNikrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIHU9TVt0XSxoPVNbdF07cj1cIlwiO3ZhciBjPXRoaXMuY2xvbmUoKTtmb3IoYy5uZWdhdGl2ZT0wOyFjLmlzWmVybygpOyl7dmFyIGQ9Yy5tb2RuKGgpLnRvU3RyaW5nKHQpO2M9Yy5pZGl2bihoKSxyPWMuaXNaZXJvKCk/ZCtyOl9bdS1kLmxlbmd0aF0rZCtyfWZvcih0aGlzLmlzWmVybygpJiYocj1cIjBcIityKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1uKCExLFwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNlwiKX0sby5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/dCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3QrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLFwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzXCIpLDAhPT10aGlzLm5lZ2F0aXZlPy10OnR9LG8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sby5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcInVuZGVmaW5lZFwiIT10eXBlb2YgdyksdGhpcy50b0FycmF5TGlrZSh3LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5ieXRlTGVuZ3RoKCksbz1yfHxNYXRoLm1heCgxLGkpO24oaTw9byxcImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGhcIiksbihvPjAsXCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDBcIiksdGhpcy5zdHJpcCgpO3ZhciBhLGYscz1cImxlXCI9PT1lLHU9bmV3IHQobyksaD10aGlzLmNsb25lKCk7aWYocyl7Zm9yKGY9MDshaC5pc1plcm8oKTtmKyspYT1oLmFuZGxuKDI1NSksaC5pdXNocm4oOCksdVtmXT1hO2Zvcig7ZjxvO2YrKyl1W2ZdPTB9ZWxzZXtmb3IoZj0wO2Y8by1pO2YrKyl1W2ZdPTA7Zm9yKGY9MDshaC5pc1plcm8oKTtmKyspYT1oLmFuZGxuKDI1NSksXG5oLml1c2hybig4KSx1W28tZi0xXT1hfXJldHVybiB1fSxNYXRoLmNsejMyP28ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9Om8ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxvLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT09KDEmZSkmJnIrKyxyfSxvLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sby5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LG8ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LG8ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sby5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sby5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHQpfSxvLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxvLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHQpOnQuY2xvbmUoKS5pdW9yKHRoaXMpfSxvLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sby5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sby5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sby5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxvLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxvLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxvLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LG8ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSxlP3RoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dmFyIHIsbjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLG89MDtvPG4ubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pKygwfG4ud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJm88ci5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxvLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcj10aGlzLmNtcCh0KTtpZigwPT09cilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dmFyIG4saTtyPjA/KG49dGhpcyxpPXQpOihuPXQsaT10aGlzKTtmb3IodmFyIG89MCxhPTA7YTxpLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKS0oMHxpLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2Zvcig7MCE9PW8mJmE8bi5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtpZigwPT09byYmYTxuLmxlbmd0aCYmbiE9PXRoaXMpZm9yKDthPG4ubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPW4ud29yZHNbYV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGEpLG4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sYT10LndvcmRzLGY9ZS53b3JkcyxzPXIud29yZHMsdT0wLGg9MHxhWzBdLGM9ODE5MSZoLGQ9aD4+PjEzLGw9MHxhWzFdLHA9ODE5MSZsLGI9bD4+PjEzLHY9MHxhWzJdLHk9ODE5MSZ2LG09dj4+PjEzLGc9MHxhWzNdLHc9ODE5MSZnLF89Zz4+PjEzLE09MHxhWzRdLFM9ODE5MSZNLEU9TT4+PjEzLEE9MHxhWzVdLGs9ODE5MSZBLHg9QT4+PjEzLEk9MHxhWzZdLEI9ODE5MSZJLE89ST4+PjEzLFI9MHxhWzddLFA9ODE5MSZSLFQ9Uj4+PjEzLGo9MHxhWzhdLEM9ODE5MSZqLE49aj4+PjEzLEw9MHxhWzldLFU9ODE5MSZMLHo9TD4+PjEzLEQ9MHxmWzBdLHE9ODE5MSZELEY9RD4+PjEzLEs9MHxmWzFdLEc9ODE5MSZLLFY9Sz4+PjEzLEg9MHxmWzJdLFg9ODE5MSZILFk9SD4+PjEzLFc9MHxmWzNdLFo9ODE5MSZXLEo9Vz4+PjEzLCQ9MHxmWzRdLFE9ODE5MSYkLHR0PSQ+Pj4xMyxldD0wfGZbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8Zls2XSxvdD04MTkxJml0LGF0PWl0Pj4+MTMsZnQ9MHxmWzddLHN0PTgxOTEmZnQsdXQ9ZnQ+Pj4xMyxodD0wfGZbOF0sY3Q9ODE5MSZodCxkdD1odD4+PjEzLGx0PTB8Zls5XSxwdD04MTkxJmx0LGJ0PWx0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTksbj1NYXRoLmltdWwoYyxxKSxpPU1hdGguaW11bChjLEYpLGk9aStNYXRoLmltdWwoZCxxKXwwLG89TWF0aC5pbXVsKGQsRik7dmFyIHZ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChwLHEpLGk9TWF0aC5pbXVsKHAsRiksaT1pK01hdGguaW11bChiLHEpfDAsbz1NYXRoLmltdWwoYixGKSxuPW4rTWF0aC5pbXVsKGMsRyl8MCxpPWkrTWF0aC5pbXVsKGMsVil8MCxpPWkrTWF0aC5pbXVsKGQsRyl8MCxvPW8rTWF0aC5pbXVsKGQsVil8MDt2YXIgeXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHkscSksaT1NYXRoLmltdWwoeSxGKSxpPWkrTWF0aC5pbXVsKG0scSl8MCxvPU1hdGguaW11bChtLEYpLG49bitNYXRoLmltdWwocCxHKXwwLGk9aStNYXRoLmltdWwocCxWKXwwLGk9aStNYXRoLmltdWwoYixHKXwwLG89bytNYXRoLmltdWwoYixWKXwwLG49bitNYXRoLmltdWwoYyxYKXwwLGk9aStNYXRoLmltdWwoYyxZKXwwLGk9aStNYXRoLmltdWwoZCxYKXwwLG89bytNYXRoLmltdWwoZCxZKXwwO3ZhciBtdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsobXQ+Pj4yNil8MCxtdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwodyxxKSxpPU1hdGguaW11bCh3LEYpLGk9aStNYXRoLmltdWwoXyxxKXwwLG89TWF0aC5pbXVsKF8sRiksbj1uK01hdGguaW11bCh5LEcpfDAsaT1pK01hdGguaW11bCh5LFYpfDAsaT1pK01hdGguaW11bChtLEcpfDAsbz1vK01hdGguaW11bChtLFYpfDAsbj1uK01hdGguaW11bChwLFgpfDAsaT1pK01hdGguaW11bChwLFkpfDAsaT1pK01hdGguaW11bChiLFgpfDAsbz1vK01hdGguaW11bChiLFkpfDAsbj1uK01hdGguaW11bChjLFopfDAsaT1pK01hdGguaW11bChjLEopfDAsaT1pK01hdGguaW11bChkLFopfDAsbz1vK01hdGguaW11bChkLEopfDA7dmFyIGd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhndD4+PjI2KXwwLGd0Jj02NzEwODg2MyxuPU1hdGguaW11bChTLHEpLGk9TWF0aC5pbXVsKFMsRiksaT1pK01hdGguaW11bChFLHEpfDAsbz1NYXRoLmltdWwoRSxGKSxuPW4rTWF0aC5pbXVsKHcsRyl8MCxpPWkrTWF0aC5pbXVsKHcsVil8MCxpPWkrTWF0aC5pbXVsKF8sRyl8MCxvPW8rTWF0aC5pbXVsKF8sVil8MCxuPW4rTWF0aC5pbXVsKHksWCl8MCxpPWkrTWF0aC5pbXVsKHksWSl8MCxpPWkrTWF0aC5pbXVsKG0sWCl8MCxvPW8rTWF0aC5pbXVsKG0sWSl8MCxuPW4rTWF0aC5pbXVsKHAsWil8MCxpPWkrTWF0aC5pbXVsKHAsSil8MCxpPWkrTWF0aC5pbXVsKGIsWil8MCxvPW8rTWF0aC5pbXVsKGIsSil8MCxuPW4rTWF0aC5pbXVsKGMsUSl8MCxpPWkrTWF0aC5pbXVsKGMsdHQpfDAsaT1pK01hdGguaW11bChkLFEpfDAsbz1vK01hdGguaW11bChkLHR0KXwwO3ZhciB3dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxxKSxpPU1hdGguaW11bChrLEYpLGk9aStNYXRoLmltdWwoeCxxKXwwLG89TWF0aC5pbXVsKHgsRiksbj1uK01hdGguaW11bChTLEcpfDAsaT1pK01hdGguaW11bChTLFYpfDAsaT1pK01hdGguaW11bChFLEcpfDAsbz1vK01hdGguaW11bChFLFYpfDAsbj1uK01hdGguaW11bCh3LFgpfDAsaT1pK01hdGguaW11bCh3LFkpfDAsaT1pK01hdGguaW11bChfLFgpfDAsbz1vK01hdGguaW11bChfLFkpfDAsbj1uK01hdGguaW11bCh5LFopfDAsaT1pK01hdGguaW11bCh5LEopfDAsaT1pK01hdGguaW11bChtLFopfDAsbz1vK01hdGguaW11bChtLEopfDAsbj1uK01hdGguaW11bChwLFEpfDAsaT1pK01hdGguaW11bChwLHR0KXwwLGk9aStNYXRoLmltdWwoYixRKXwwLG89bytNYXRoLmltdWwoYix0dCl8MCxuPW4rTWF0aC5pbXVsKGMscnQpfDAsaT1pK01hdGguaW11bChjLG50KXwwLGk9aStNYXRoLmltdWwoZCxydCl8MCxvPW8rTWF0aC5pbXVsKGQsbnQpfDA7dmFyIF90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChCLHEpLGk9TWF0aC5pbXVsKEIsRiksaT1pK01hdGguaW11bChPLHEpfDAsbz1NYXRoLmltdWwoTyxGKSxuPW4rTWF0aC5pbXVsKGssRyl8MCxpPWkrTWF0aC5pbXVsKGssVil8MCxpPWkrTWF0aC5pbXVsKHgsRyl8MCxvPW8rTWF0aC5pbXVsKHgsVil8MCxuPW4rTWF0aC5pbXVsKFMsWCl8MCxpPWkrTWF0aC5pbXVsKFMsWSl8MCxpPWkrTWF0aC5pbXVsKEUsWCl8MCxvPW8rTWF0aC5pbXVsKEUsWSl8MCxuPW4rTWF0aC5pbXVsKHcsWil8MCxpPWkrTWF0aC5pbXVsKHcsSil8MCxpPWkrTWF0aC5pbXVsKF8sWil8MCxvPW8rTWF0aC5pbXVsKF8sSil8MCxuPW4rTWF0aC5pbXVsKHksUSl8MCxpPWkrTWF0aC5pbXVsKHksdHQpfDAsaT1pK01hdGguaW11bChtLFEpfDAsbz1vK01hdGguaW11bChtLHR0KXwwLG49bitNYXRoLmltdWwocCxydCl8MCxpPWkrTWF0aC5pbXVsKHAsbnQpfDAsaT1pK01hdGguaW11bChiLHJ0KXwwLG89bytNYXRoLmltdWwoYixudCl8MCxuPW4rTWF0aC5pbXVsKGMsb3QpfDAsaT1pK01hdGguaW11bChjLGF0KXwwLGk9aStNYXRoLmltdWwoZCxvdCl8MCxvPW8rTWF0aC5pbXVsKGQsYXQpfDA7dmFyIE10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2MyxuPU1hdGguaW11bChQLHEpLGk9TWF0aC5pbXVsKFAsRiksaT1pK01hdGguaW11bChULHEpfDAsbz1NYXRoLmltdWwoVCxGKSxuPW4rTWF0aC5pbXVsKEIsRyl8MCxpPWkrTWF0aC5pbXVsKEIsVil8MCxpPWkrTWF0aC5pbXVsKE8sRyl8MCxvPW8rTWF0aC5pbXVsKE8sVil8MCxuPW4rTWF0aC5pbXVsKGssWCl8MCxpPWkrTWF0aC5pbXVsKGssWSl8MCxpPWkrTWF0aC5pbXVsKHgsWCl8MCxvPW8rTWF0aC5pbXVsKHgsWSl8MCxuPW4rTWF0aC5pbXVsKFMsWil8MCxpPWkrTWF0aC5pbXVsKFMsSil8MCxpPWkrTWF0aC5pbXVsKEUsWil8MCxvPW8rTWF0aC5pbXVsKEUsSil8MCxuPW4rTWF0aC5pbXVsKHcsUSl8MCxpPWkrTWF0aC5pbXVsKHcsdHQpfDAsaT1pK01hdGguaW11bChfLFEpfDAsbz1vK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwoeSxydCl8MCxpPWkrTWF0aC5pbXVsKHksbnQpfDAsaT1pK01hdGguaW11bChtLHJ0KXwwLG89bytNYXRoLmltdWwobSxudCl8MCxuPW4rTWF0aC5pbXVsKHAsb3QpfDAsaT1pK01hdGguaW11bChwLGF0KXwwLGk9aStNYXRoLmltdWwoYixvdCl8MCxvPW8rTWF0aC5pbXVsKGIsYXQpfDAsbj1uK01hdGguaW11bChjLHN0KXwwLGk9aStNYXRoLmltdWwoYyx1dCl8MCxpPWkrTWF0aC5pbXVsKGQsc3QpfDAsbz1vK01hdGguaW11bChkLHV0KXwwO3ZhciBTdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxxKSxpPU1hdGguaW11bChDLEYpLGk9aStNYXRoLmltdWwoTixxKXwwLG89TWF0aC5pbXVsKE4sRiksbj1uK01hdGguaW11bChQLEcpfDAsaT1pK01hdGguaW11bChQLFYpfDAsaT1pK01hdGguaW11bChULEcpfDAsbz1vK01hdGguaW11bChULFYpfDAsbj1uK01hdGguaW11bChCLFgpfDAsaT1pK01hdGguaW11bChCLFkpfDAsaT1pK01hdGguaW11bChPLFgpfDAsbz1vK01hdGguaW11bChPLFkpfDAsbj1uK01hdGguaW11bChrLFopfDAsaT1pK01hdGguaW11bChrLEopfDAsaT1pK01hdGguaW11bCh4LFopfDAsbz1vK01hdGguaW11bCh4LEopfDAsbj1uK01hdGguaW11bChTLFEpfDAsaT1pK01hdGguaW11bChTLHR0KXwwLGk9aStNYXRoLmltdWwoRSxRKXwwLG89bytNYXRoLmltdWwoRSx0dCl8MCxuPW4rTWF0aC5pbXVsKHcscnQpfDAsaT1pK01hdGguaW11bCh3LG50KXwwLGk9aStNYXRoLmltdWwoXyxydCl8MCxvPW8rTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bCh5LG90KXwwLGk9aStNYXRoLmltdWwoeSxhdCl8MCxpPWkrTWF0aC5pbXVsKG0sb3QpfDAsbz1vK01hdGguaW11bChtLGF0KXwwLG49bitNYXRoLmltdWwocCxzdCl8MCxpPWkrTWF0aC5pbXVsKHAsdXQpfDAsaT1pK01hdGguaW11bChiLHN0KXwwLG89bytNYXRoLmltdWwoYix1dCl8MCxuPW4rTWF0aC5pbXVsKGMsY3QpfDAsaT1pK01hdGguaW11bChjLGR0KXwwLGk9aStNYXRoLmltdWwoZCxjdCl8MCxvPW8rTWF0aC5pbXVsKGQsZHQpfDA7dmFyIEV0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHEpLGk9TWF0aC5pbXVsKFUsRiksaT1pK01hdGguaW11bCh6LHEpfDAsbz1NYXRoLmltdWwoeixGKSxuPW4rTWF0aC5pbXVsKEMsRyl8MCxpPWkrTWF0aC5pbXVsKEMsVil8MCxpPWkrTWF0aC5pbXVsKE4sRyl8MCxvPW8rTWF0aC5pbXVsKE4sVil8MCxuPW4rTWF0aC5pbXVsKFAsWCl8MCxpPWkrTWF0aC5pbXVsKFAsWSl8MCxpPWkrTWF0aC5pbXVsKFQsWCl8MCxvPW8rTWF0aC5pbXVsKFQsWSl8MCxuPW4rTWF0aC5pbXVsKEIsWil8MCxpPWkrTWF0aC5pbXVsKEIsSil8MCxpPWkrTWF0aC5pbXVsKE8sWil8MCxvPW8rTWF0aC5pbXVsKE8sSil8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPWkrTWF0aC5pbXVsKGssdHQpfDAsaT1pK01hdGguaW11bCh4LFEpfDAsbz1vK01hdGguaW11bCh4LHR0KXwwLG49bitNYXRoLmltdWwoUyxydCl8MCxpPWkrTWF0aC5pbXVsKFMsbnQpfDAsaT1pK01hdGguaW11bChFLHJ0KXwwLG89bytNYXRoLmltdWwoRSxudCl8MCxuPW4rTWF0aC5pbXVsKHcsb3QpfDAsaT1pK01hdGguaW11bCh3LGF0KXwwLGk9aStNYXRoLmltdWwoXyxvdCl8MCxvPW8rTWF0aC5pbXVsKF8sYXQpfDAsbj1uK01hdGguaW11bCh5LHN0KXwwLGk9aStNYXRoLmltdWwoeSx1dCl8MCxpPWkrTWF0aC5pbXVsKG0sc3QpfDAsbz1vK01hdGguaW11bChtLHV0KXwwLG49bitNYXRoLmltdWwocCxjdCl8MCxpPWkrTWF0aC5pbXVsKHAsZHQpfDAsaT1pK01hdGguaW11bChiLGN0KXwwLG89bytNYXRoLmltdWwoYixkdCl8MCxuPW4rTWF0aC5pbXVsKGMscHQpfDAsaT1pK01hdGguaW11bChjLGJ0KXwwLGk9aStNYXRoLmltdWwoZCxwdCl8MCxvPW8rTWF0aC5pbXVsKGQsYnQpfDA7dmFyIEF0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLEcpLGk9TWF0aC5pbXVsKFUsViksaT1pK01hdGguaW11bCh6LEcpfDAsbz1NYXRoLmltdWwoeixWKSxuPW4rTWF0aC5pbXVsKEMsWCl8MCxpPWkrTWF0aC5pbXVsKEMsWSl8MCxpPWkrTWF0aC5pbXVsKE4sWCl8MCxvPW8rTWF0aC5pbXVsKE4sWSl8MCxuPW4rTWF0aC5pbXVsKFAsWil8MCxpPWkrTWF0aC5pbXVsKFAsSil8MCxpPWkrTWF0aC5pbXVsKFQsWil8MCxvPW8rTWF0aC5pbXVsKFQsSil8MCxuPW4rTWF0aC5pbXVsKEIsUSl8MCxpPWkrTWF0aC5pbXVsKEIsdHQpfDAsaT1pK01hdGguaW11bChPLFEpfDAsbz1vK01hdGguaW11bChPLHR0KXwwLG49bitNYXRoLmltdWwoayxydCl8MCxpPWkrTWF0aC5pbXVsKGssbnQpfDAsaT1pK01hdGguaW11bCh4LHJ0KXwwLG89bytNYXRoLmltdWwoeCxudCl8MCxuPW4rTWF0aC5pbXVsKFMsb3QpfDAsaT1pK01hdGguaW11bChTLGF0KXwwLGk9aStNYXRoLmltdWwoRSxvdCl8MCxvPW8rTWF0aC5pbXVsKEUsYXQpfDAsbj1uK01hdGguaW11bCh3LHN0KXwwLGk9aStNYXRoLmltdWwodyx1dCl8MCxpPWkrTWF0aC5pbXVsKF8sc3QpfDAsbz1vK01hdGguaW11bChfLHV0KXwwLG49bitNYXRoLmltdWwoeSxjdCl8MCxpPWkrTWF0aC5pbXVsKHksZHQpfDAsaT1pK01hdGguaW11bChtLGN0KXwwLG89bytNYXRoLmltdWwobSxkdCl8MCxuPW4rTWF0aC5pbXVsKHAscHQpfDAsaT1pK01hdGguaW11bChwLGJ0KXwwLGk9aStNYXRoLmltdWwoYixwdCl8MCxvPW8rTWF0aC5pbXVsKGIsYnQpfDA7dmFyIGt0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFgpLGk9TWF0aC5pbXVsKFUsWSksaT1pK01hdGguaW11bCh6LFgpfDAsbz1NYXRoLmltdWwoeixZKSxuPW4rTWF0aC5pbXVsKEMsWil8MCxpPWkrTWF0aC5pbXVsKEMsSil8MCxpPWkrTWF0aC5pbXVsKE4sWil8MCxvPW8rTWF0aC5pbXVsKE4sSil8MCxuPW4rTWF0aC5pbXVsKFAsUSl8MCxpPWkrTWF0aC5pbXVsKFAsdHQpfDAsaT1pK01hdGguaW11bChULFEpfDAsbz1vK01hdGguaW11bChULHR0KXwwLG49bitNYXRoLmltdWwoQixydCl8MCxpPWkrTWF0aC5pbXVsKEIsbnQpfDAsaT1pK01hdGguaW11bChPLHJ0KXwwLG89bytNYXRoLmltdWwoTyxudCl8MCxuPW4rTWF0aC5pbXVsKGssb3QpfDAsaT1pK01hdGguaW11bChrLGF0KXwwLGk9aStNYXRoLmltdWwoeCxvdCl8MCxvPW8rTWF0aC5pbXVsKHgsYXQpfDAsbj1uK01hdGguaW11bChTLHN0KXwwLGk9aStNYXRoLmltdWwoUyx1dCl8MCxpPWkrTWF0aC5pbXVsKEUsc3QpfDAsbz1vK01hdGguaW11bChFLHV0KXwwLG49bitNYXRoLmltdWwodyxjdCl8MCxpPWkrTWF0aC5pbXVsKHcsZHQpfDAsaT1pK01hdGguaW11bChfLGN0KXwwLG89bytNYXRoLmltdWwoXyxkdCl8MCxuPW4rTWF0aC5pbXVsKHkscHQpfDAsaT1pK01hdGguaW11bCh5LGJ0KXwwLGk9aStNYXRoLmltdWwobSxwdCl8MCxvPW8rTWF0aC5pbXVsKG0sYnQpfDA7dmFyIHh0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh4dD4+PjI2KXwwLHh0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFopLGk9TWF0aC5pbXVsKFUsSiksaT1pK01hdGguaW11bCh6LFopfDAsbz1NYXRoLmltdWwoeixKKSxuPW4rTWF0aC5pbXVsKEMsUSl8MCxpPWkrTWF0aC5pbXVsKEMsdHQpfDAsaT1pK01hdGguaW11bChOLFEpfDAsbz1vK01hdGguaW11bChOLHR0KXwwLG49bitNYXRoLmltdWwoUCxydCl8MCxpPWkrTWF0aC5pbXVsKFAsbnQpfDAsaT1pK01hdGguaW11bChULHJ0KXwwLG89bytNYXRoLmltdWwoVCxudCl8MCxuPW4rTWF0aC5pbXVsKEIsb3QpfDAsaT1pK01hdGguaW11bChCLGF0KXwwLGk9aStNYXRoLmltdWwoTyxvdCl8MCxvPW8rTWF0aC5pbXVsKE8sYXQpfDAsbj1uK01hdGguaW11bChrLHN0KXwwLGk9aStNYXRoLmltdWwoayx1dCl8MCxpPWkrTWF0aC5pbXVsKHgsc3QpfDAsbz1vK01hdGguaW11bCh4LHV0KXwwLG49bitNYXRoLmltdWwoUyxjdCl8MCxpPWkrTWF0aC5pbXVsKFMsZHQpfDAsaT1pK01hdGguaW11bChFLGN0KXwwLG89bytNYXRoLmltdWwoRSxkdCl8MCxuPW4rTWF0aC5pbXVsKHcscHQpfDAsaT1pK01hdGguaW11bCh3LGJ0KXwwLGk9aStNYXRoLmltdWwoXyxwdCl8MCxvPW8rTWF0aC5pbXVsKF8sYnQpfDA7dmFyIEl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhJdD4+PjI2KXwwLEl0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFEpLGk9TWF0aC5pbXVsKFUsdHQpLGk9aStNYXRoLmltdWwoeixRKXwwLG89TWF0aC5pbXVsKHosdHQpLG49bitNYXRoLmltdWwoQyxydCl8MCxpPWkrTWF0aC5pbXVsKEMsbnQpfDAsaT1pK01hdGguaW11bChOLHJ0KXwwLG89bytNYXRoLmltdWwoTixudCl8MCxuPW4rTWF0aC5pbXVsKFAsb3QpfDAsaT1pK01hdGguaW11bChQLGF0KXwwLGk9aStNYXRoLmltdWwoVCxvdCl8MCxvPW8rTWF0aC5pbXVsKFQsYXQpfDAsbj1uK01hdGguaW11bChCLHN0KXwwLGk9aStNYXRoLmltdWwoQix1dCl8MCxpPWkrTWF0aC5pbXVsKE8sc3QpfDAsbz1vK01hdGguaW11bChPLHV0KXwwLG49bitNYXRoLmltdWwoayxjdCl8MCxpPWkrTWF0aC5pbXVsKGssZHQpfDAsaT1pK01hdGguaW11bCh4LGN0KXwwLG89bytNYXRoLmltdWwoeCxkdCl8MCxuPW4rTWF0aC5pbXVsKFMscHQpfDAsaT1pK01hdGguaW11bChTLGJ0KXwwLGk9aStNYXRoLmltdWwoRSxwdCl8MCxvPW8rTWF0aC5pbXVsKEUsYnQpfDA7dmFyIEJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhCdD4+PjI2KXwwLEJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHJ0KSxpPU1hdGguaW11bChVLG50KSxpPWkrTWF0aC5pbXVsKHoscnQpfDAsbz1NYXRoLmltdWwoeixudCksbj1uK01hdGguaW11bChDLG90KXwwLGk9aStNYXRoLmltdWwoQyxhdCl8MCxpPWkrTWF0aC5pbXVsKE4sb3QpfDAsbz1vK01hdGguaW11bChOLGF0KXwwLG49bitNYXRoLmltdWwoUCxzdCl8MCxpPWkrTWF0aC5pbXVsKFAsdXQpfDAsaT1pK01hdGguaW11bChULHN0KXwwLG89bytNYXRoLmltdWwoVCx1dCl8MCxuPW4rTWF0aC5pbXVsKEIsY3QpfDAsaT1pK01hdGguaW11bChCLGR0KXwwLGk9aStNYXRoLmltdWwoTyxjdCl8MCxvPW8rTWF0aC5pbXVsKE8sZHQpfDAsbj1uK01hdGguaW11bChrLHB0KXwwLGk9aStNYXRoLmltdWwoayxidCl8MCxpPWkrTWF0aC5pbXVsKHgscHQpfDAsbz1vK01hdGguaW11bCh4LGJ0KXwwO3ZhciBPdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxvdCksaT1NYXRoLmltdWwoVSxhdCksaT1pK01hdGguaW11bCh6LG90KXwwLG89TWF0aC5pbXVsKHosYXQpLG49bitNYXRoLmltdWwoQyxzdCl8MCxpPWkrTWF0aC5pbXVsKEMsdXQpfDAsaT1pK01hdGguaW11bChOLHN0KXwwLG89bytNYXRoLmltdWwoTix1dCl8MCxuPW4rTWF0aC5pbXVsKFAsY3QpfDAsaT1pK01hdGguaW11bChQLGR0KXwwLGk9aStNYXRoLmltdWwoVCxjdCl8MCxvPW8rTWF0aC5pbXVsKFQsZHQpfDAsbj1uK01hdGguaW11bChCLHB0KXwwLGk9aStNYXRoLmltdWwoQixidCl8MCxpPWkrTWF0aC5pbXVsKE8scHQpfDAsbz1vK01hdGguaW11bChPLGJ0KXwwO3ZhciBSdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUnQ+Pj4yNil8MCxSdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxzdCksaT1NYXRoLmltdWwoVSx1dCksaT1pK01hdGguaW11bCh6LHN0KXwwLG89TWF0aC5pbXVsKHosdXQpLG49bitNYXRoLmltdWwoQyxjdCl8MCxpPWkrTWF0aC5pbXVsKEMsZHQpfDAsaT1pK01hdGguaW11bChOLGN0KXwwLG89bytNYXRoLmltdWwoTixkdCl8MCxuPW4rTWF0aC5pbXVsKFAscHQpfDAsaT1pK01hdGguaW11bChQLGJ0KXwwLGk9aStNYXRoLmltdWwoVCxwdCl8MCxvPW8rTWF0aC5pbXVsKFQsYnQpfDA7dmFyIFB0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLGN0KSxpPU1hdGguaW11bChVLGR0KSxpPWkrTWF0aC5pbXVsKHosY3QpfDAsbz1NYXRoLmltdWwoeixkdCksbj1uK01hdGguaW11bChDLHB0KXwwLGk9aStNYXRoLmltdWwoQyxidCl8MCxpPWkrTWF0aC5pbXVsKE4scHQpfDAsbz1vK01hdGguaW11bChOLGJ0KXwwO3ZhciBUdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoVHQ+Pj4yNil8MCxUdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxwdCksaT1NYXRoLmltdWwoVSxidCksaT1pK01hdGguaW11bCh6LHB0KXwwLG89TWF0aC5pbXVsKHosYnQpO3ZhciBqdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7cmV0dXJuIHU9KG8rKGk+Pj4xMyl8MCkrKGp0Pj4+MjYpfDAsanQmPTY3MTA4ODYzLHNbMF09dnQsc1sxXT15dCxzWzJdPW10LHNbM109Z3Qsc1s0XT13dCxzWzVdPV90LHNbNl09TXQsc1s3XT1TdCxzWzhdPUV0LHNbOV09QXQsc1sxMF09a3Qsc1sxMV09eHQsc1sxMl09SXQsc1sxM109QnQsc1sxNF09T3Qsc1sxNV09UnQsc1sxNl09UHQsc1sxN109VHQsc1sxOF09anQsMCE9PXUmJihzWzE5XT11LHIubGVuZ3RoKyspLHJ9O01hdGguaW11bHx8KEU9dSksby5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiByPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/RSh0aGlzLHQsZSk6bjw2Mz91KHRoaXMsdCxlKTpuPDEwMjQ/aCh0aGlzLHQsZSk6Yyh0aGlzLHQsZSl9LGQucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPW8ucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGQucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLG8pe2Zvcih2YXIgYT0wO2E8bzthKyspblthXT1lW3RbYV1dLGlbYV09clt0W2FdXX0sZC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt0aGlzLnBlcm11dGUobyx0LGUscixuLGkpO2Zvcih2YXIgYT0xO2E8aTthPDw9MSlmb3IodmFyIGY9YTw8MSxzPU1hdGguY29zKDIqTWF0aC5QSS9mKSx1PU1hdGguc2luKDIqTWF0aC5QSS9mKSxoPTA7aDxpO2grPWYpZm9yKHZhciBjPXMsZD11LGw9MDtsPGE7bCsrKXt2YXIgcD1yW2grbF0sYj1uW2grbF0sdj1yW2grbCthXSx5PW5baCtsK2FdLG09Yyp2LWQqeTt5PWMqeStkKnYsdj1tLHJbaCtsXT1wK3YsbltoK2xdPWIreSxyW2grbCthXT1wLXYsbltoK2wrYV09Yi15LGwhPT1mJiYobT1zKmMtdSpkLGQ9cypkK3UqYyxjPW0pfX0sZC5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGQucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGQucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGQucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBvPTAsYT0wO2E8ZTthKyspbys9MHx0W2FdLHJbMiphXT04MTkxJm8sbz4+Pj0xMyxyWzIqYSsxXT04MTkxJm8sbz4+Pj0xMztmb3IoYT0yKmU7YTxpOysrYSlyW2FdPTA7bigwPT09byksbigwPT09KG8mLTgxOTIpKX0sZC5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09MDtyZXR1cm4gZX0sZC5wcm90b3R5cGUubXVscD1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKHQubGVuZ3RoLGUubGVuZ3RoKSxpPXRoaXMubWFrZVJCVChuKSxvPXRoaXMuc3R1YihuKSxhPW5ldyBBcnJheShuKSxmPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxoPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSxkPXIud29yZHM7ZC5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IodC53b3Jkcyx0Lmxlbmd0aCxhLG4pLHRoaXMuY29udmVydDEzYihlLndvcmRzLGUubGVuZ3RoLHUsbiksdGhpcy50cmFuc2Zvcm0oYSxvLGYscyxuLGkpLHRoaXMudHJhbnNmb3JtKHUsbyxoLGMsbixpKTtmb3IodmFyIGw9MDtsPG47bCsrKXt2YXIgcD1mW2xdKmhbbF0tc1tsXSpjW2xdO3NbbF09ZltsXSpjW2xdK3NbbF0qaFtsXSxmW2xdPXB9cmV0dXJuIHRoaXMuY29uanVnYXRlKGYscyxuKSx0aGlzLnRyYW5zZm9ybShmLHMsZCxvLG4saSksdGhpcy5jb25qdWdhdGUoZCxvLG4pLHRoaXMubm9ybWFsaXplMTNiKGQsbiksci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGgsci5zdHJpcCgpfSxvLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSx0aGlzLm11bFRvKHQsZSl9LG8ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSxjKHRoaXMsdCxlKX0sby5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHQsdGhpcyl9LG8ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCk7Zm9yKHZhciBlPTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSp0LG89KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPW8+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJm99cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tyXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0sby5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxvLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxvLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCl7dmFyIGU9cyh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBvKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZSxyPXQlMjYsaT0odC1yKS8yNixvPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIGE9MDtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLndvcmRzW2VdJm8scz0oMHx0aGlzLndvcmRzW2VdKS1mPDxyO3RoaXMud29yZHNbZV09c3xhLGE9Zj4+PjI2LXJ9YSYmKHRoaXMud29yZHNbZV09YSx0aGlzLmxlbmd0aCsrKX1pZigwIT09aSl7Zm9yKGU9dGhpcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLndvcmRzW2UraV09dGhpcy53b3Jkc1tlXTtmb3IoZT0wO2U8aTtlKyspdGhpcy53b3Jkc1tlXT0wO3RoaXMubGVuZ3RoKz1pfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih0KX0sby5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHQsZSxyKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgaTtpPWU/KGUtZSUyNikvMjY6MDt2YXIgbz10JTI2LGE9TWF0aC5taW4oKHQtbykvMjYsdGhpcy5sZW5ndGgpLGY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5vPDxvLHM9cjtpZihpLT1hLGk9TWF0aC5tYXgoMCxpKSxzKXtmb3IodmFyIHU9MDt1PGE7dSsrKXMud29yZHNbdV09dGhpcy53b3Jkc1t1XTtzLmxlbmd0aD1hfWlmKDA9PT1hKTtlbHNlIGlmKHRoaXMubGVuZ3RoPmEpZm9yKHRoaXMubGVuZ3RoLT1hLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl0aGlzLndvcmRzW3VdPXRoaXMud29yZHNbdSthXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBoPTA7Zm9yKHU9dGhpcy5sZW5ndGgtMTt1Pj0wJiYoMCE9PWh8fHU+PWkpO3UtLSl7dmFyIGM9MHx0aGlzLndvcmRzW3VdO3RoaXMud29yZHNbdV09aDw8MjYtb3xjPj4+byxoPWMmZn1yZXR1cm4gcyYmMCE9PWgmJihzLndvcmRzW3MubGVuZ3RoKytdPWgpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxvLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LG8ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LG8ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxvLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiExO3ZhciBvPXRoaXMud29yZHNbcl07cmV0dXJuISEobyZpKX0sby5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLFwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzXCIpLHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzO2lmKDAhPT1lJiZyKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxvLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gbihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LG8ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxvLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LG8ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sby5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sby5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LG8ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksbz10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChvKTt2YXIgYSxmPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7YT0oMHx0aGlzLndvcmRzW2krcl0pK2Y7dmFyIHM9KDB8dC53b3Jkc1tpXSkqZTthLT02NzEwODg2MyZzLGY9KGE+PjI2KS0ocy82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYX1mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspYT0oMHx0aGlzLndvcmRzW2krcl0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYTtpZigwPT09ZilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKGY9PT0tMSksZj0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylhPS0oMHx0aGlzLndvcmRzW2ldKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZhO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoLXQubGVuZ3RoLG49dGhpcy5jbG9uZSgpLGk9dCxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSxmPXRoaXMuX2NvdW50Qml0cyhhKTtyPTI2LWYsMCE9PXImJihpPWkudXNobG4ociksbi5pdXNobG4ociksYT0wfGkud29yZHNbaS5sZW5ndGgtMV0pO3ZhciBzLHU9bi5sZW5ndGgtaS5sZW5ndGg7aWYoXCJtb2RcIiE9PWUpe3M9bmV3IG8obnVsbCkscy5sZW5ndGg9dSsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGg9MDtoPHMubGVuZ3RoO2grKylzLndvcmRzW2hdPTB9dmFyIGM9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsdSk7MD09PWMubmVnYXRpdmUmJihuPWMscyYmKHMud29yZHNbdV09MSkpO2Zvcih2YXIgZD11LTE7ZD49MDtkLS0pe3ZhciBsPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgrZF0pKygwfG4ud29yZHNbaS5sZW5ndGgrZC0xXSk7Zm9yKGw9TWF0aC5taW4obC9hfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksbCxkKTswIT09bi5uZWdhdGl2ZTspbC0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsZCksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2RdPWwpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLFwiZGl2XCIhPT1lJiYwIT09ciYmbi5pdXNocm4ocikse2RpdjpzfHxudWxsLG1vZDpufX0sby5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHQsZSxyKXtpZihuKCF0LmlzWmVybygpKSx0aGlzLmlzWmVybygpKXJldHVybntkaXY6bmV3IG8oMCksbW9kOm5ldyBvKDApfTt2YXIgaSxhLGY7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8oZj10aGlzLm5lZygpLmRpdm1vZCh0LGUpLFwibW9kXCIhPT1lJiYoaT1mLmRpdi5uZWcoKSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlhZGQodCkpLHtkaXY6aSxtb2Q6YX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8oZj10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLFwibW9kXCIhPT1lJiYoaT1mLmRpdi5uZWcoKSkse2RpdjppLG1vZDpmLm1vZH0pOjAhPT0odGhpcy5uZWdhdGl2ZSZ0Lm5lZ2F0aXZlKT8oZj10aGlzLm5lZygpLmRpdm1vZCh0Lm5lZygpLGUpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pc3ViKHQpKSx7ZGl2OmYuZGl2LG1vZDphfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgbygwKSxtb2Q6dGhpc306MT09PXQubGVuZ3RoP1wiZGl2XCI9PT1lP3tkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpudWxsfTpcIm1vZFwiPT09ZT97ZGl2Om51bGwsbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHQsZSl9LG8ucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcImRpdlwiLCExKS5kaXZ9LG8ucHJvdG90eXBlLm1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCExKS5tb2R9LG8ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMCkubW9kfSxvLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxvPXIuY21wKG4pO3JldHVybiBvPDB8fDE9PT1pJiYwPT09bz9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LG8ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sby5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxvLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgbygxKSxhPW5ldyBvKDApLGY9bmV3IG8oMCkscz1uZXcgbygxKSx1PTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKyt1O2Zvcih2YXIgaD1yLmNsb25lKCksYz1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGQ9MCxsPTE7MD09PShlLndvcmRzWzBdJmwpJiZkPDI2OysrZCxsPDw9MSk7aWYoZD4wKWZvcihlLml1c2hybihkKTtkLS0gPjA7KShpLmlzT2RkKCl8fGEuaXNPZGQoKSkmJihpLmlhZGQoaCksYS5pc3ViKGMpKSxpLml1c2hybigxKSxhLml1c2hybigxKTtmb3IodmFyIHA9MCxiPTE7MD09PShyLndvcmRzWzBdJmIpJiZwPDI2OysrcCxiPDw9MSk7aWYocD4wKWZvcihyLml1c2hybihwKTtwLS0gPjA7KShmLmlzT2RkKCl8fHMuaXNPZGQoKSkmJihmLmlhZGQoaCkscy5pc3ViKGMpKSxmLml1c2hybigxKSxzLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihmKSxhLmlzdWIocykpOihyLmlzdWIoZSksZi5pc3ViKGkpLHMuaXN1YihhKSl9cmV0dXJue2E6ZixiOnMsZ2NkOnIuaXVzaGxuKHUpfX0sby5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgbygxKSxhPW5ldyBvKDApLGY9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgcz0wLHU9MTswPT09KGUud29yZHNbMF0mdSkmJnM8MjY7KytzLHU8PD0xKTtpZihzPjApZm9yKGUuaXVzaHJuKHMpO3MtLSA+MDspaS5pc09kZCgpJiZpLmlhZGQoZiksaS5pdXNocm4oMSk7Zm9yKHZhciBoPTAsYz0xOzA9PT0oci53b3Jkc1swXSZjKSYmaDwyNjsrK2gsYzw8PTEpO2lmKGg+MClmb3Ioci5pdXNocm4oaCk7aC0tID4wOylhLmlzT2RkKCkmJmEuaWFkZChmKSxhLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihhKSk6KHIuaXN1YihlKSxhLmlzdWIoaSkpfXZhciBkO3JldHVybiBkPTA9PT1lLmNtcG4oMSk/aTphLGQuY21wbigwKTwwJiZkLmlhZGQodCksZH0sby5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBvPWU7ZT1yLHI9b31lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LG8ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LG8ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sby5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgbz1pLGE9cjswIT09byYmYTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPTB8dGhpcy53b3Jkc1thXTtmKz1vLG89Zj4+PjI2LGYmPTY3MTA4ODYzLHRoaXMud29yZHNbYV09Zn1yZXR1cm4gMCE9PW8mJih0aGlzLndvcmRzW2FdPW8sdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LG8ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24odCl7dmFyIGU9dDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmZSlyZXR1cm4gMTt0aGlzLnN0cmlwKCk7dmFyIHI7aWYodGhpcy5sZW5ndGg+MSlyPTE7ZWxzZXtlJiYodD0tdCksbih0PD02NzEwODg2MyxcIk51bWJlciBpcyB0b28gYmlnXCIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTtyPWk9PT10PzA6aTx0Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXI6cn0sby5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LG8ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfHQud29yZHNbcl07aWYobiE9PWkpe248aT9lPS0xOm4+aSYmKGU9MSk7YnJlYWt9fXJldHVybiBlfSxvLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXAodCl9LG8ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT49MH0sby5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT49MH0sby5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk9PT0tMX0sby5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sby5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sby5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxvLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG0odCl9LG8ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksbigwPT09dGhpcy5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sby5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LG8ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc3ViKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5tdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5pbXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LG8ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LG8ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LG8ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LG8ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LG8ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCYmIXQucmVkLFwicmVkUG93KG5vcm1hbE51bSlcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdCl9O3ZhciBBPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07bC5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBvKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0sbC5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG8gdGhpcy5zcGxpdChyLHRoaXMudG1wKSxyPXRoaXMuaW11bEsocikscj1yLmlhZGQodGhpcy50bXApLGU9ci5iaXRMZW5ndGgoKTt3aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnIuc3RyaXAoKSxyfSxsLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe3QuaXVzaHJuKHRoaXMubiwwLGUpfSxsLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbXVsKHRoaXMuayl9LGkocCxsKSxwLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj00MTk0MzAzLG49TWF0aC5taW4odC5sZW5ndGgsOSksaT0wO2k8bjtpKyspZS53b3Jkc1tpXT10LndvcmRzW2ldO2lmKGUubGVuZ3RoPW4sdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBvPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109byZyLGk9MTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPTB8dC53b3Jkc1tpXTt0LndvcmRzW2ktMTBdPShhJnIpPDw0fG8+Pj4yMixvPWF9bz4+Pj0yMix0LndvcmRzW2ktMTBdPW8sMD09PW8mJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0scC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKGIsbCksaSh2LGwpLGkoeSxsKSx5LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LG8uX3ByaW1lPWZ1bmN0aW9uIHQoZSl7aWYoQVtlXSlyZXR1cm4gQVtlXTt2YXIgdDtpZihcImsyNTZcIj09PWUpdD1uZXcgcDtlbHNlIGlmKFwicDIyNFwiPT09ZSl0PW5ldyBiO2Vsc2UgaWYoXCJwMTkyXCI9PT1lKXQ9bmV3IHY7ZWxzZXtpZihcInAyNTUxOVwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHByaW1lIFwiK2UpO3Q9bmV3IHl9cmV0dXJuIEFbZV09dCx0fSxtLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT09KHQubmVnYXRpdmV8ZS5uZWdhdGl2ZSksXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7XG5yZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodCksdGhpcy5pbW9kKHQudXNobG4oZSkpfSxtLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sbS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSxtLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0LmNsb25lKCkpfSxtLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubXVsKHQsdCl9LG0ucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odCl7aWYodC5pc1plcm8oKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPXRoaXMubS5hbmRsbigzKTtpZihuKGUlMj09PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBvKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLGE9MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KWErKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgZj1uZXcgbygxKS50b1JlZCh0aGlzKSxzPWYucmVkTmVnKCksdT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksaD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGg9bmV3IG8oMipoKmgpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhoLHUpLmNtcChzKTspaC5yZWRJQWRkKHMpO2Zvcih2YXIgYz10aGlzLnBvdyhoLGkpLGQ9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxsPXRoaXMucG93KHQsaSkscD1hOzAhPT1sLmNtcChmKTspe2Zvcih2YXIgYj1sLHY9MDswIT09Yi5jbXAoZik7disrKWI9Yi5yZWRTcXIoKTtuKHY8cCk7dmFyIHk9dGhpcy5wb3coYyxuZXcgbygxKS5pdXNobG4ocC12LTEpKTtkPWQucmVkTXVsKHkpLGM9eS5yZWRTcXIoKSxsPWwucmVkTXVsKGMpLHA9dn1yZXR1cm4gZH0sbS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSxtLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgbygxKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9NCxuPW5ldyBBcnJheSgxPDxyKTtuWzBdPW5ldyBvKDEpLnRvUmVkKHRoaXMpLG5bMV09dDtmb3IodmFyIGk9MjtpPG4ubGVuZ3RoO2krKyluW2ldPXRoaXMubXVsKG5baS0xXSx0KTt2YXIgYT1uWzBdLGY9MCxzPTAsdT1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09dSYmKHU9MjYpLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7Zm9yKHZhciBoPWUud29yZHNbaV0sYz11LTE7Yz49MDtjLS0pe3ZhciBkPWg+PmMmMTthIT09blswXSYmKGE9dGhpcy5zcXIoYSkpLDAhPT1kfHwwIT09Zj8oZjw8PTEsZnw9ZCxzKyssKHM9PT1yfHwwPT09aSYmMD09PWMpJiYoYT10aGlzLm11bChhLG5bZl0pLHM9MCxmPTApKTpzPTB9dT0yNn1yZXR1cm4gYX0sbS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQudW1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0sbS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LG8ubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGcodCl9LGkoZyxtKSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnVzaGxuKHRoaXMuc2hpZnQpKX0sZy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LGcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiBuZXcgbygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9dC5tdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO3JldHVybiBlLl9mb3JjZVJlZCh0aGlzKX19KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0fHx0LHRoaXMpfSkuY2FsbChlLHIoOTIpKHQpKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWU7bi52ZXJzaW9uPXIoNDY1KS52ZXJzaW9uLG4udXRpbHM9cig1MjEpLG4ucmFuZD1yKDUyMiksbi5obWFjRFJCRz1yKDUxOSksbi5jdXJ2ZT1yKDk5KSxuLmN1cnZlcz1yKDUxMiksbi5lYz1yKDUxMyksbi5lZGRzYT1yKDUxNil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDY2KSxpPXIoMzcpLG89cigxNyksYT1yKDI5KSxmPXIoMTIpLHM9cigxNzQpLHU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtlLmY9cig4KT91OmZ1bmN0aW9uKHQsZSl7aWYodD1vKHQpLGU9YShlLCEwKSxzKXRyeXtyZXR1cm4gdSh0LGUpfWNhdGNoKHQpe31pZihmKHQsZSkpcmV0dXJuIGkoIW4uZi5jYWxsKHQsZSksdFtlXSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMiksaT1yKDExKSxvPXIoMTMzKShcIklFX1BST1RPXCIpLGE9T2JqZWN0LnByb3RvdHlwZTt0LmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbih0KXtyZXR1cm4gdD1pKHQpLG4odCxvKT90W29dOlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29uc3RydWN0b3ImJnQgaW5zdGFuY2VvZiB0LmNvbnN0cnVjdG9yP3QuY29uc3RydWN0b3IucHJvdG90eXBlOnQgaW5zdGFuY2VvZiBPYmplY3Q/YTpudWxsfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWU7bi52ZXJzaW9uPXIoNDY3KS52ZXJzaW9uLG4udXRpbHM9cig1NTgpLG4ucmFuZD1yKDU1OSksbi5obWFjRFJCRz1yKDU1Niksbi5jdXJ2ZT1yKDEwNCksbi5jdXJ2ZXM9cig1NDkpLG4uZWM9cig1NTApLG4uZWRkc2E9cig1NTMpfSxmdW5jdGlvbih0LGUpe3ZhciByPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gci5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT10KXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIit0KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiEhdCYmbihmdW5jdGlvbigpe2U/dC5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOnQuY2FsbChudWxsKX0pfX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhyb3cgbmV3IEVycm9yKFwic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBuKCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGkodCl7aWYoaD09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQodCwwKTtpZigoaD09PXJ8fCFoKSYmc2V0VGltZW91dClyZXR1cm4gaD1zZXRUaW1lb3V0LHNldFRpbWVvdXQodCwwKTt0cnl7cmV0dXJuIGgodCwwKX1jYXRjaChlKXt0cnl7cmV0dXJuIGguY2FsbChudWxsLHQsMCl9Y2F0Y2goZSl7cmV0dXJuIGguY2FsbCh0aGlzLHQsMCl9fX1mdW5jdGlvbiBvKHQpe2lmKGM9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoYz09PW58fCFjKSYmY2xlYXJUaW1lb3V0KXJldHVybiBjPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e3JldHVybiBjKHQpfWNhdGNoKGUpe3RyeXtyZXR1cm4gYy5jYWxsKG51bGwsdCl9Y2F0Y2goZSl7cmV0dXJuIGMuY2FsbCh0aGlzLHQpfX19ZnVuY3Rpb24gYSgpe2ImJmwmJihiPSExLGwubGVuZ3RoP3A9bC5jb25jYXQocCk6dj0tMSxwLmxlbmd0aCYmZigpKX1mdW5jdGlvbiBmKCl7aWYoIWIpe3ZhciB0PWkoYSk7Yj0hMDtmb3IodmFyIGU9cC5sZW5ndGg7ZTspe2ZvcihsPXAscD1bXTsrK3Y8ZTspbCYmbFt2XS5ydW4oKTt2PS0xLGU9cC5sZW5ndGh9bD1udWxsLGI9ITEsbyh0KX19ZnVuY3Rpb24gcyh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lfWZ1bmN0aW9uIHUoKXt9dmFyIGgsYyxkPXQuZXhwb3J0cz17fTshZnVuY3Rpb24oKXt0cnl7aD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6cn1jYXRjaCh0KXtoPXJ9dHJ5e2M9XCJmdW5jdGlvblwiPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpufWNhdGNoKHQpe2M9bn19KCk7dmFyIGwscD1bXSxiPSExLHY9LTE7ZC5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllW3ItMV09YXJndW1lbnRzW3JdO3AucHVzaChuZXcgcyh0LGUpKSwxIT09cC5sZW5ndGh8fGJ8fGkoZil9LHMucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGQudGl0bGU9XCJicm93c2VyXCIsZC5icm93c2VyPSEwLGQuZW52PXt9LGQuYXJndj1bXSxkLnZlcnNpb249XCJcIixkLnZlcnNpb25zPXt9LGQub249dSxkLmFkZExpc3RlbmVyPXUsZC5vbmNlPXUsZC5vZmY9dSxkLnJlbW92ZUxpc3RlbmVyPXUsZC5yZW1vdmVBbGxMaXN0ZW5lcnM9dSxkLmVtaXQ9dSxkLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGQuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9LGQuY2hkaXI9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfSxkLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzMyksaT1yKDY1KSxvPXIoMTEpLGE9cigxMCksZj1yKDI4Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MT09dCxzPTI9PXQsdT0zPT10LGg9ND09dCxjPTY9PXQsZD01PT10fHxjLGw9ZXx8ZjtyZXR1cm4gZnVuY3Rpb24oZSxmLHApe2Zvcih2YXIgYix2LHk9byhlKSxtPWkoeSksZz1uKGYscCwzKSx3PWEobS5sZW5ndGgpLF89MCxNPXI/bChlLHcpOnM/bChlLDApOnZvaWQgMDt3Pl87XysrKWlmKChkfHxfIGluIG0pJiYoYj1tW19dLHY9ZyhiLF8seSksdCkpaWYocilNW19dPXY7ZWxzZSBpZih2KXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBiO2Nhc2UgNjpyZXR1cm4gXztjYXNlIDI6TS5wdXNoKGIpfWVsc2UgaWYoaClyZXR1cm4hMTtyZXR1cm4gYz8tMTp1fHxoP2g6TX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMzIpLG89cig1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0oaS5PYmplY3R8fHt9KVt0XXx8T2JqZWN0W3RdLGE9e307YVt0XT1lKHIpLG4obi5TK24uRipvKGZ1bmN0aW9uKCl7cigxKX0pLFwiT2JqZWN0XCIsYSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighbih0KSlyZXR1cm4gdDt2YXIgcixpO2lmKGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudmFsdWVPZikmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTtpZighZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIG8uaXNCTih0KT90Oih0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCx2b2lkKG51bGwhPT10JiYoXCJsZVwiIT09ZSYmXCJiZVwiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8XCJiZVwiKSkpKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MCxpPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGk7bysrKXt2YXIgYT10LmNoYXJDb2RlQXQobyktNDg7bjw8PTQsbnw9YT49NDkmJmE8PTU0P2EtNDkrMTA6YT49MTcmJmE8PTIyP2EtMTcrMTA6MTUmYX1yZXR1cm4gbn1mdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaT0wLG89TWF0aC5taW4odC5sZW5ndGgsciksYT1lO2E8bzthKyspe3ZhciBmPXQuY2hhckNvZGVBdChhKS00ODtpKj1uLGkrPWY+PTQ5P2YtNDkrMTA6Zj49MTc/Zi0xNysxMDpmfXJldHVybiBpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0LmJpdExlbmd0aCgpKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXIvMjZ8MCxpPXIlMjY7ZVtyXT0odC53b3Jkc1tuXSYxPDxpKT4+Pml9cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLG89MHxlLndvcmRzWzBdLGE9aSpvLGY9NjcxMDg4NjMmYSxzPWEvNjcxMDg4NjR8MDtyLndvcmRzWzBdPWY7Zm9yKHZhciB1PTE7dTxuO3UrKyl7Zm9yKHZhciBoPXM+Pj4yNixjPTY3MTA4ODYzJnMsZD1NYXRoLm1pbih1LGUubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCx1LXQubGVuZ3RoKzEpO2w8PWQ7bCsrKXt2YXIgcD11LWx8MDtpPTB8dC53b3Jkc1twXSxvPTB8ZS53b3Jkc1tsXSxhPWkqbytjLGgrPWEvNjcxMDg4NjR8MCxjPTY3MTA4ODYzJmF9ci53b3Jkc1t1XT0wfGMscz0wfGh9cmV0dXJuIDAhPT1zP3Iud29yZHNbdV09MHxzOnIubGVuZ3RoLS0sci5zdHJpcCgpfWZ1bmN0aW9uIGgodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxvPTA7bzxyLmxlbmd0aC0xO28rKyl7dmFyIGE9aTtpPTA7Zm9yKHZhciBmPTY3MTA4ODYzJm4scz1NYXRoLm1pbihvLGUubGVuZ3RoLTEpLHU9TWF0aC5tYXgoMCxvLXQubGVuZ3RoKzEpO3U8PXM7dSsrKXt2YXIgaD1vLXUsYz0wfHQud29yZHNbaF0sZD0wfGUud29yZHNbdV0sbD1jKmQscD02NzEwODg2MyZsO2E9YSsobC82NzEwODg2NHwwKXwwLHA9cCtmfDAsZj02NzEwODg2MyZwLGE9YSsocD4+PjI2KXwwLGkrPWE+Pj4yNixhJj02NzEwODg2M31yLndvcmRzW29dPWYsbj1hLGE9aX1yZXR1cm4gMCE9PW4/ci53b3Jkc1tvXT1uOnIubGVuZ3RoLS0sci5zdHJpcCgpfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPW5ldyBkO3JldHVybiBuLm11bHAodCxlLHIpfWZ1bmN0aW9uIGQodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiBsKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBvKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBvKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBwKCl7bC5jYWxsKHRoaXMsXCJrMjU2XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiKX1mdW5jdGlvbiBiKCl7bC5jYWxsKHRoaXMsXCJwMjI0XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMVwiKX1mdW5jdGlvbiB2KCl7bC5jYWxsKHRoaXMsXCJwMTkyXCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZlwiKX1mdW5jdGlvbiB5KCl7bC5jYWxsKHRoaXMsXCIyNTUxOVwiLFwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiKX1mdW5jdGlvbiBtKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgZT1vLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksXCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDFcIiksdGhpcy5tPXQsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGcodCl7bS5jYWxsKHRoaXMsdCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9PTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IG8oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9XCJvYmplY3RcIj09dHlwZW9mIHQ/dC5leHBvcnRzPW86ZS5CTj1vLG8uQk49byxvLndvcmRTaXplPTI2O3ZhciB3O3RyeXt3PXIoMSkuQnVmZmVyfWNhdGNoKHQpe31vLmlzQk49ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvfHxudWxsIT09dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3Iud29yZFNpemU9PT1vLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHQud29yZHMpfSxvLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKT4wP3Q6ZX0sby5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk8MD90OmV9LG8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdE51bWJlcih0LGUscik7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUscik7XCJoZXhcIj09PWUmJihlPTE2KSxuKGU9PT0oMHxlKSYmZT49MiYmZTw9MzYpLHQ9dC50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZyxcIlwiKTt2YXIgaT0wO1wiLVwiPT09dFswXSYmaSsrLDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGkpOnRoaXMuX3BhcnNlQmFzZSh0LGUsaSksXCItXCI9PT10WzBdJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHQsZSxyKXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0Lmxlbmd0aCksdC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgbyxhLGY9MDtpZihcImJlXCI9PT1yKWZvcihpPXQubGVuZ3RoLTEsbz0wO2k+PTA7aS09MylhPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO2Vsc2UgaWYoXCJsZVwiPT09cilmb3IoaT0wLG89MDtpPHQubGVuZ3RoO2krPTMpYT10W2ldfHRbaSsxXTw8OHx0W2krMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24odCxlKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPTA7dmFyIG4saSxvPTA7Zm9yKHI9dC5sZW5ndGgtNixuPTA7cj49ZTtyLT02KWk9YSh0LHIscis2KSx0aGlzLndvcmRzW25dfD1pPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LW8mNDE5NDMwMyxvKz0yNCxvPj0yNiYmKG8tPTI2LG4rKyk7cis2IT09ZSYmKGk9YSh0LGUscis2KSx0aGlzLndvcmRzW25dfD1pPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LW8mNDE5NDMwMyksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGk9MTtpPD02NzEwODg2MztpKj1lKW4rKztuLS0saT1pL2V8MDtmb3IodmFyIG89dC5sZW5ndGgtcixhPW8lbixzPU1hdGgubWluKG8sby1hKStyLHU9MCxoPXI7aDxzO2grPW4pdT1mKHQsaCxoK24sZSksdGhpcy5pbXVsbihpKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KTtpZigwIT09YSl7dmFyIGM9MTtmb3IodT1mKHQsaCx0Lmxlbmd0aCxlKSxoPTA7aDxhO2grKyljKj1lO3RoaXMuaW11bG4oYyksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSl9fSxvLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBvKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0sby5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxvLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD9cIjxCTi1SOiBcIjpcIjxCTjogXCIpK3RoaXMudG9TdHJpbmcoMTYpK1wiPlwifTt2YXIgXz1bXCJcIixcIjBcIixcIjAwXCIsXCIwMDBcIixcIjAwMDBcIixcIjAwMDAwXCIsXCIwMDAwMDBcIixcIjAwMDAwMDBcIixcIjAwMDAwMDAwXCIsXCIwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIl0sTT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxTPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO28ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dD10fHwxMCxlPTB8ZXx8MTt2YXIgcjtpZigxNj09PXR8fFwiaGV4XCI9PT10KXtyPVwiXCI7Zm9yKHZhciBpPTAsbz0wLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9dGhpcy53b3Jkc1thXSxzPSgxNjc3NzIxNSYoZjw8aXxvKSkudG9TdHJpbmcoMTYpO289Zj4+PjI0LWkmMTY3NzcyMTUscj0wIT09b3x8YSE9PXRoaXMubGVuZ3RoLTE/X1s2LXMubGVuZ3RoXStzK3I6cytyLGkrPTIsaT49MjYmJihpLT0yNixhLS0pfWZvcigwIT09byYmKHI9by50b1N0cmluZygxNikrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIHU9TVt0XSxoPVNbdF07cj1cIlwiO3ZhciBjPXRoaXMuY2xvbmUoKTtmb3IoYy5uZWdhdGl2ZT0wOyFjLmlzWmVybygpOyl7dmFyIGQ9Yy5tb2RuKGgpLnRvU3RyaW5nKHQpO2M9Yy5pZGl2bihoKSxyPWMuaXNaZXJvKCk/ZCtyOl9bdS1kLmxlbmd0aF0rZCtyfWZvcih0aGlzLmlzWmVybygpJiYocj1cIjBcIityKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1uKCExLFwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNlwiKX0sby5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/dCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3QrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLFwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzXCIpLDAhPT10aGlzLm5lZ2F0aXZlPy10OnR9LG8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sby5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcInVuZGVmaW5lZFwiIT10eXBlb2YgdyksdGhpcy50b0FycmF5TGlrZSh3LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5ieXRlTGVuZ3RoKCksbz1yfHxNYXRoLm1heCgxLGkpO24oaTw9byxcImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGhcIiksbihvPjAsXCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDBcIiksdGhpcy5zdHJpcCgpO3ZhciBhLGYscz1cImxlXCI9PT1lLHU9bmV3IHQobyksaD10aGlzLmNsb25lKCk7aWYocyl7Zm9yKGY9MDshaC5pc1plcm8oKTtmKyspYT1oLmFuZGxuKDI1NSksaC5pdXNocm4oOCksdVtmXT1hO2Zvcig7ZjxvO2YrKyl1W2ZdPTB9ZWxzZXtmb3IoZj0wO2Y8by1pO2YrKyl1W2ZdPTA7Zm9yKGY9MDshaC5pc1plcm8oKTtmKyspYT1oLmFuZGxuKDI1NSksaC5pdXNocm4oOCksdVtvLWYtMV09YX1yZXR1cm4gdX0sTWF0aC5jbHozMj9vLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTpvLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0sby5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09PSgxJmUpJiZyKysscn0sby5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxlPXRoaXMuX2NvdW50Qml0cyh0KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2V9LG8ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbZV0pO2lmKHQrPXIsMjYhPT1yKWJyZWFrfXJldHVybiB0fSxvLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxvLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXN0bih0LTEpP3RoaXMubm90bih0KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LG8ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LG8ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMud29yZHNbZV09dGhpcy53b3Jkc1tlXXx0LndvcmRzW2VdO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0sby5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0sby5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0sby5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LG8ucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LG8ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LG8ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih0KX0sby5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0sby5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHQpOnQuY2xvbmUoKS5pdXhvcih0aGlzKX0sby5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxvLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIHI9dC8yNnwwLGk9dCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksZT90aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3ZhciByLG47dGhpcy5sZW5ndGg+dC5sZW5ndGg/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGk9MCxvPTA7bzxuLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKSsoMHxuLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtmb3IoOzAhPT1pJiZvPHIubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odC5uZWdhdGl2ZT0wLGU9dGhpcy5zdWIodCksdC5uZWdhdGl2ZV49MSxlKTowPT09dC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxlPXQuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxlKTp0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh0KTp0LmNsb25lKCkuaWFkZCh0aGlzKX0sby5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0KXtpZigwIT09dC5uZWdhdGl2ZSl7dC5uZWdhdGl2ZT0wO3ZhciBlPXRoaXMuaWFkZCh0KTtyZXR1cm4gdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHI9dGhpcy5jbXAodCk7aWYoMD09PXIpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3ZhciBuLGk7cj4wPyhuPXRoaXMsaT10KToobj10LGk9dGhpcyk7Zm9yKHZhciBvPTAsYT0wO2E8aS5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSktKDB8aS53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtmb3IoOzAhPT1vJiZhPG4ubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7aWYoMD09PW8mJmE8bi5sZW5ndGgmJm4hPT10aGlzKWZvcig7YTxuLmxlbmd0aDthKyspdGhpcy53b3Jkc1thXT1uLndvcmRzW2FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxhKSxuIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgRT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGE9dC53b3JkcyxmPWUud29yZHMscz1yLndvcmRzLHU9MCxoPTB8YVswXSxjPTgxOTEmaCxkPWg+Pj4xMyxsPTB8YVsxXSxwPTgxOTEmbCxiPWw+Pj4xMyx2PTB8YVsyXSx5PTgxOTEmdixtPXY+Pj4xMyxnPTB8YVszXSx3PTgxOTEmZyxfPWc+Pj4xMyxNPTB8YVs0XSxTPTgxOTEmTSxFPU0+Pj4xMyxBPTB8YVs1XSxrPTgxOTEmQSx4PUE+Pj4xMyxJPTB8YVs2XSxCPTgxOTEmSSxPPUk+Pj4xMyxSPTB8YVs3XSxQPTgxOTEmUixUPVI+Pj4xMyxqPTB8YVs4XSxDPTgxOTEmaixOPWo+Pj4xMyxMPTB8YVs5XSxVPTgxOTEmTCx6PUw+Pj4xMyxEPTB8ZlswXSxxPTgxOTEmRCxGPUQ+Pj4xMyxLPTB8ZlsxXSxHPTgxOTEmSyxWPUs+Pj4xMyxIPTB8ZlsyXSxYPTgxOTEmSCxZPUg+Pj4xMyxXPTB8ZlszXSxaPTgxOTEmVyxKPVc+Pj4xMywkPTB8Zls0XSxRPTgxOTEmJCx0dD0kPj4+MTMsZXQ9MHxmWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfGZbNl0sb3Q9ODE5MSZpdCxhdD1pdD4+PjEzLGZ0PTB8Zls3XSxzdD04MTkxJmZ0LHV0PWZ0Pj4+MTMsaHQ9MHxmWzhdLGN0PTgxOTEmaHQsZHQ9aHQ+Pj4xMyxsdD0wfGZbOV0scHQ9ODE5MSZsdCxidD1sdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5LG49TWF0aC5pbXVsKGMscSksaT1NYXRoLmltdWwoYyxGKSxpPWkrTWF0aC5pbXVsKGQscSl8MCxvPU1hdGguaW11bChkLEYpO3ZhciB2dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwocCxxKSxpPU1hdGguaW11bChwLEYpLGk9aStNYXRoLmltdWwoYixxKXwwLG89TWF0aC5pbXVsKGIsRiksbj1uK01hdGguaW11bChjLEcpfDAsaT1pK01hdGguaW11bChjLFYpfDAsaT1pK01hdGguaW11bChkLEcpfDAsbz1vK01hdGguaW11bChkLFYpfDA7dmFyIHl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bCh5LHEpLGk9TWF0aC5pbXVsKHksRiksaT1pK01hdGguaW11bChtLHEpfDAsbz1NYXRoLmltdWwobSxGKSxuPW4rTWF0aC5pbXVsKHAsRyl8MCxpPWkrTWF0aC5pbXVsKHAsVil8MCxpPWkrTWF0aC5pbXVsKGIsRyl8MCxvPW8rTWF0aC5pbXVsKGIsVil8MCxuPW4rTWF0aC5pbXVsKGMsWCl8MCxpPWkrTWF0aC5pbXVsKGMsWSl8MCxpPWkrTWF0aC5pbXVsKGQsWCl8MCxvPW8rTWF0aC5pbXVsKGQsWSl8MDt2YXIgbXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHcscSksaT1NYXRoLmltdWwodyxGKSxpPWkrTWF0aC5pbXVsKF8scSl8MCxvPU1hdGguaW11bChfLEYpLG49bitNYXRoLmltdWwoeSxHKXwwLGk9aStNYXRoLmltdWwoeSxWKXwwLGk9aStNYXRoLmltdWwobSxHKXwwLG89bytNYXRoLmltdWwobSxWKXwwLG49bitNYXRoLmltdWwocCxYKXwwLGk9aStNYXRoLmltdWwocCxZKXwwLGk9aStNYXRoLmltdWwoYixYKXwwLG89bytNYXRoLmltdWwoYixZKXwwLG49bitNYXRoLmltdWwoYyxaKXwwLGk9aStNYXRoLmltdWwoYyxKKXwwLGk9aStNYXRoLmltdWwoZCxaKXwwLG89bytNYXRoLmltdWwoZCxKKXwwO3ZhciBndD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoZ3Q+Pj4yNil8MCxndCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUyxxKSxpPU1hdGguaW11bChTLEYpLGk9aStNYXRoLmltdWwoRSxxKXwwLG89TWF0aC5pbXVsKEUsRiksbj1uK01hdGguaW11bCh3LEcpfDAsaT1pK01hdGguaW11bCh3LFYpfDAsaT1pK01hdGguaW11bChfLEcpfDAsbz1vK01hdGguaW11bChfLFYpfDAsbj1uK01hdGguaW11bCh5LFgpfDAsaT1pK01hdGguaW11bCh5LFkpfDAsaT1pK01hdGguaW11bChtLFgpfDAsbz1vK01hdGguaW11bChtLFkpfDAsbj1uK01hdGguaW11bChwLFopfDAsaT1pK01hdGguaW11bChwLEopfDAsaT1pK01hdGguaW11bChiLFopfDAsbz1vK01hdGguaW11bChiLEopfDAsbj1uK01hdGguaW11bChjLFEpfDAsaT1pK01hdGguaW11bChjLHR0KXwwLGk9aStNYXRoLmltdWwoZCxRKXwwLG89bytNYXRoLmltdWwoZCx0dCl8MDt2YXIgd3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGsscSksaT1NYXRoLmltdWwoayxGKSxpPWkrTWF0aC5pbXVsKHgscSl8MCxvPU1hdGguaW11bCh4LEYpLG49bitNYXRoLmltdWwoUyxHKXwwLGk9aStNYXRoLmltdWwoUyxWKXwwLGk9aStNYXRoLmltdWwoRSxHKXwwLG89bytNYXRoLmltdWwoRSxWKXwwLG49bitNYXRoLmltdWwodyxYKXwwLGk9aStNYXRoLmltdWwodyxZKXwwLGk9aStNYXRoLmltdWwoXyxYKXwwLG89bytNYXRoLmltdWwoXyxZKXwwLG49bitNYXRoLmltdWwoeSxaKXwwLGk9aStNYXRoLmltdWwoeSxKKXwwLGk9aStNYXRoLmltdWwobSxaKXwwLG89bytNYXRoLmltdWwobSxKKXwwLG49bitNYXRoLmltdWwocCxRKXwwLGk9aStNYXRoLmltdWwocCx0dCl8MCxpPWkrTWF0aC5pbXVsKGIsUSl8MCxvPW8rTWF0aC5pbXVsKGIsdHQpfDAsbj1uK01hdGguaW11bChjLHJ0KXwwLGk9aStNYXRoLmltdWwoYyxudCl8MCxpPWkrTWF0aC5pbXVsKGQscnQpfDAsbz1vK01hdGguaW11bChkLG50KXwwO3ZhciBfdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixxKSxpPU1hdGguaW11bChCLEYpLGk9aStNYXRoLmltdWwoTyxxKXwwLG89TWF0aC5pbXVsKE8sRiksbj1uK01hdGguaW11bChrLEcpfDAsaT1pK01hdGguaW11bChrLFYpfDAsaT1pK01hdGguaW11bCh4LEcpfDAsbz1vK01hdGguaW11bCh4LFYpfDAsbj1uK01hdGguaW11bChTLFgpfDAsaT1pK01hdGguaW11bChTLFkpfDAsaT1pK01hdGguaW11bChFLFgpfDAsbz1vK01hdGguaW11bChFLFkpfDAsbj1uK01hdGguaW11bCh3LFopfDAsaT1pK01hdGguaW11bCh3LEopfDAsaT1pK01hdGguaW11bChfLFopfDAsbz1vK01hdGguaW11bChfLEopfDAsbj1uK01hdGguaW11bCh5LFEpfDAsaT1pK01hdGguaW11bCh5LHR0KXwwLGk9aStNYXRoLmltdWwobSxRKXwwLG89bytNYXRoLmltdWwobSx0dCl8MCxuPW4rTWF0aC5pbXVsKHAscnQpfDAsaT1pK01hdGguaW11bChwLG50KXwwLGk9aStNYXRoLmltdWwoYixydCl8MCxvPW8rTWF0aC5pbXVsKGIsbnQpfDAsbj1uK01hdGguaW11bChjLG90KXwwLGk9aStNYXRoLmltdWwoYyxhdCl8MCxpPWkrTWF0aC5pbXVsKGQsb3QpfDAsbz1vK01hdGguaW11bChkLGF0KXwwO3ZhciBNdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUCxxKSxpPU1hdGguaW11bChQLEYpLGk9aStNYXRoLmltdWwoVCxxKXwwLG89TWF0aC5pbXVsKFQsRiksbj1uK01hdGguaW11bChCLEcpfDAsaT1pK01hdGguaW11bChCLFYpfDAsaT1pK01hdGguaW11bChPLEcpfDAsbz1vK01hdGguaW11bChPLFYpfDAsbj1uK01hdGguaW11bChrLFgpfDAsaT1pK01hdGguaW11bChrLFkpfDAsaT1pK01hdGguaW11bCh4LFgpfDAsbz1vK01hdGguaW11bCh4LFkpfDAsbj1uK01hdGguaW11bChTLFopfDAsaT1pK01hdGguaW11bChTLEopfDAsaT1pK01hdGguaW11bChFLFopfDAsbz1vK01hdGguaW11bChFLEopfDAsbj1uK01hdGguaW11bCh3LFEpfDAsaT1pK01hdGguaW11bCh3LHR0KXwwLGk9aStNYXRoLmltdWwoXyxRKXwwLG89bytNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKHkscnQpfDAsaT1pK01hdGguaW11bCh5LG50KXwwLGk9aStNYXRoLmltdWwobSxydCl8MCxvPW8rTWF0aC5pbXVsKG0sbnQpfDAsbj1uK01hdGguaW11bChwLG90KXwwLGk9aStNYXRoLmltdWwocCxhdCl8MCxpPWkrTWF0aC5pbXVsKGIsb3QpfDAsbz1vK01hdGguaW11bChiLGF0KXwwLG49bitNYXRoLmltdWwoYyxzdCl8MCxpPWkrTWF0aC5pbXVsKGMsdXQpfDAsaT1pK01hdGguaW11bChkLHN0KXwwLG89bytNYXRoLmltdWwoZCx1dCl8MDt2YXIgU3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMscSksaT1NYXRoLmltdWwoQyxGKSxpPWkrTWF0aC5pbXVsKE4scSl8MCxvPU1hdGguaW11bChOLEYpLG49bitNYXRoLmltdWwoUCxHKXwwLGk9aStNYXRoLmltdWwoUCxWKXwwLGk9aStNYXRoLmltdWwoVCxHKXwwLG89bytNYXRoLmltdWwoVCxWKXwwLG49bitNYXRoLmltdWwoQixYKXwwLGk9aStNYXRoLmltdWwoQixZKXwwLGk9aStNYXRoLmltdWwoTyxYKXwwLG89bytNYXRoLmltdWwoTyxZKXwwLG49bitNYXRoLmltdWwoayxaKXwwLGk9aStNYXRoLmltdWwoayxKKXwwLGk9aStNYXRoLmltdWwoeCxaKXwwLG89bytNYXRoLmltdWwoeCxKKXwwLG49bitNYXRoLmltdWwoUyxRKXwwLGk9aStNYXRoLmltdWwoUyx0dCl8MCxpPWkrTWF0aC5pbXVsKEUsUSl8MCxvPW8rTWF0aC5pbXVsKEUsdHQpfDAsbj1uK01hdGguaW11bCh3LHJ0KXwwLGk9aStNYXRoLmltdWwodyxudCl8MCxpPWkrTWF0aC5pbXVsKF8scnQpfDAsbz1vK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwoeSxvdCl8MCxpPWkrTWF0aC5pbXVsKHksYXQpfDAsaT1pK01hdGguaW11bChtLG90KXwwLG89bytNYXRoLmltdWwobSxhdCl8MCxuPW4rTWF0aC5pbXVsKHAsc3QpfDAsaT1pK01hdGguaW11bChwLHV0KXwwLGk9aStNYXRoLmltdWwoYixzdCl8MCxvPW8rTWF0aC5pbXVsKGIsdXQpfDAsbj1uK01hdGguaW11bChjLGN0KXwwLGk9aStNYXRoLmltdWwoYyxkdCl8MCxpPWkrTWF0aC5pbXVsKGQsY3QpfDAsbz1vK01hdGguaW11bChkLGR0KXwwO3ZhciBFdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxxKSxpPU1hdGguaW11bChVLEYpLGk9aStNYXRoLmltdWwoeixxKXwwLG89TWF0aC5pbXVsKHosRiksbj1uK01hdGguaW11bChDLEcpfDAsaT1pK01hdGguaW11bChDLFYpfDAsaT1pK01hdGguaW11bChOLEcpfDAsbz1vK01hdGguaW11bChOLFYpfDAsbj1uK01hdGguaW11bChQLFgpfDAsaT1pK01hdGguaW11bChQLFkpfDAsaT1pK01hdGguaW11bChULFgpfDAsbz1vK01hdGguaW11bChULFkpfDAsbj1uK01hdGguaW11bChCLFopfDAsaT1pK01hdGguaW11bChCLEopfDAsaT1pK01hdGguaW11bChPLFopfDAsbz1vK01hdGguaW11bChPLEopfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT1pK01hdGguaW11bChrLHR0KXwwLGk9aStNYXRoLmltdWwoeCxRKXwwLG89bytNYXRoLmltdWwoeCx0dCl8MCxuPW4rTWF0aC5pbXVsKFMscnQpfDAsaT1pK01hdGguaW11bChTLG50KXwwLGk9aStNYXRoLmltdWwoRSxydCl8MCxvPW8rTWF0aC5pbXVsKEUsbnQpfDAsbj1uK01hdGguaW11bCh3LG90KXwwLGk9aStNYXRoLmltdWwodyxhdCl8MCxpPWkrTWF0aC5pbXVsKF8sb3QpfDAsbz1vK01hdGguaW11bChfLGF0KXwwLG49bitNYXRoLmltdWwoeSxzdCl8MCxpPWkrTWF0aC5pbXVsKHksdXQpfDAsaT1pK01hdGguaW11bChtLHN0KXwwLG89bytNYXRoLmltdWwobSx1dCl8MCxuPW4rTWF0aC5pbXVsKHAsY3QpfDAsaT1pK01hdGguaW11bChwLGR0KXwwLGk9aStNYXRoLmltdWwoYixjdCl8MCxvPW8rTWF0aC5pbXVsKGIsZHQpfDAsbj1uK01hdGguaW11bChjLHB0KXwwLGk9aStNYXRoLmltdWwoYyxidCl8MCxpPWkrTWF0aC5pbXVsKGQscHQpfDAsbz1vK01hdGguaW11bChkLGJ0KXwwO3ZhciBBdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxHKSxpPU1hdGguaW11bChVLFYpLGk9aStNYXRoLmltdWwoeixHKXwwLG89TWF0aC5pbXVsKHosViksbj1uK01hdGguaW11bChDLFgpfDAsaT1pK01hdGguaW11bChDLFkpfDAsaT1pK01hdGguaW11bChOLFgpfDAsbz1vK01hdGguaW11bChOLFkpfDAsbj1uK01hdGguaW11bChQLFopfDAsaT1pK01hdGguaW11bChQLEopfDAsaT1pK01hdGguaW11bChULFopfDAsbz1vK01hdGguaW11bChULEopfDAsbj1uK01hdGguaW11bChCLFEpfDAsaT1pK01hdGguaW11bChCLHR0KXwwLGk9aStNYXRoLmltdWwoTyxRKXwwLG89bytNYXRoLmltdWwoTyx0dCl8MCxuPW4rTWF0aC5pbXVsKGsscnQpfDAsaT1pK01hdGguaW11bChrLG50KXwwLGk9aStNYXRoLmltdWwoeCxydCl8MCxvPW8rTWF0aC5pbXVsKHgsbnQpfDAsbj1uK01hdGguaW11bChTLG90KXwwLGk9aStNYXRoLmltdWwoUyxhdCl8MCxpPWkrTWF0aC5pbXVsKEUsb3QpfDAsbz1vK01hdGguaW11bChFLGF0KXwwLG49bitNYXRoLmltdWwodyxzdCl8MCxpPWkrTWF0aC5pbXVsKHcsdXQpfDAsaT1pK01hdGguaW11bChfLHN0KXwwLG89bytNYXRoLmltdWwoXyx1dCl8MCxuPW4rTWF0aC5pbXVsKHksY3QpfDAsaT1pK01hdGguaW11bCh5LGR0KXwwLGk9aStNYXRoLmltdWwobSxjdCl8MCxvPW8rTWF0aC5pbXVsKG0sZHQpfDAsbj1uK01hdGguaW11bChwLHB0KXwwLGk9aStNYXRoLmltdWwocCxidCl8MCxpPWkrTWF0aC5pbXVsKGIscHQpfDAsbz1vK01hdGguaW11bChiLGJ0KXwwO3ZhciBrdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxYKSxpPU1hdGguaW11bChVLFkpLGk9aStNYXRoLmltdWwoeixYKXwwLG89TWF0aC5pbXVsKHosWSksbj1uK01hdGguaW11bChDLFopfDAsaT1pK01hdGguaW11bChDLEopfDAsaT1pK01hdGguaW11bChOLFopfDAsbz1vK01hdGguaW11bChOLEopfDAsbj1uK01hdGguaW11bChQLFEpfDAsaT1pK01hdGguaW11bChQLHR0KXwwLGk9aStNYXRoLmltdWwoVCxRKXwwLG89bytNYXRoLmltdWwoVCx0dCl8MCxuPW4rTWF0aC5pbXVsKEIscnQpfDAsaT1pK01hdGguaW11bChCLG50KXwwLGk9aStNYXRoLmltdWwoTyxydCl8MCxvPW8rTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChrLG90KXwwLGk9aStNYXRoLmltdWwoayxhdCl8MCxpPWkrTWF0aC5pbXVsKHgsb3QpfDAsbz1vK01hdGguaW11bCh4LGF0KXwwLG49bitNYXRoLmltdWwoUyxzdCl8MCxpPWkrTWF0aC5pbXVsKFMsdXQpfDAsaT1pK01hdGguaW11bChFLHN0KXwwLG89bytNYXRoLmltdWwoRSx1dCl8MCxuPW4rTWF0aC5pbXVsKHcsY3QpfDAsaT1pK01hdGguaW11bCh3LGR0KXwwLGk9aStNYXRoLmltdWwoXyxjdCl8MCxvPW8rTWF0aC5pbXVsKF8sZHQpfDAsbj1uK01hdGguaW11bCh5LHB0KXwwLGk9aStNYXRoLmltdWwoeSxidCl8MCxpPWkrTWF0aC5pbXVsKG0scHQpfDAsbz1vK01hdGguaW11bChtLGJ0KXwwO3ZhciB4dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxaKSxpPU1hdGguaW11bChVLEopLGk9aStNYXRoLmltdWwoeixaKXwwLG89TWF0aC5pbXVsKHosSiksbj1uK01hdGguaW11bChDLFEpfDAsaT1pK01hdGguaW11bChDLHR0KXwwLGk9aStNYXRoLmltdWwoTixRKXwwLG89bytNYXRoLmltdWwoTix0dCl8MCxuPW4rTWF0aC5pbXVsKFAscnQpfDAsaT1pK01hdGguaW11bChQLG50KXwwLGk9aStNYXRoLmltdWwoVCxydCl8MCxvPW8rTWF0aC5pbXVsKFQsbnQpfDAsbj1uK01hdGguaW11bChCLG90KXwwLGk9aStNYXRoLmltdWwoQixhdCl8MCxpPWkrTWF0aC5pbXVsKE8sb3QpfDAsbz1vK01hdGguaW11bChPLGF0KXwwLG49bitNYXRoLmltdWwoayxzdCl8MCxpPWkrTWF0aC5pbXVsKGssdXQpfDAsaT1pK01hdGguaW11bCh4LHN0KXwwLG89bytNYXRoLmltdWwoeCx1dCl8MCxuPW4rTWF0aC5pbXVsKFMsY3QpfDAsaT1pK01hdGguaW11bChTLGR0KXwwLGk9aStNYXRoLmltdWwoRSxjdCl8MCxvPW8rTWF0aC5pbXVsKEUsZHQpfDAsbj1uK01hdGguaW11bCh3LHB0KXwwLGk9aStNYXRoLmltdWwodyxidCl8MCxpPWkrTWF0aC5pbXVsKF8scHQpfDAsbz1vK01hdGguaW11bChfLGJ0KXwwO3ZhciBJdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxRKSxpPU1hdGguaW11bChVLHR0KSxpPWkrTWF0aC5pbXVsKHosUSl8MCxvPU1hdGguaW11bCh6LHR0KSxuPW4rTWF0aC5pbXVsKEMscnQpfDAsaT1pK01hdGguaW11bChDLG50KXwwLGk9aStNYXRoLmltdWwoTixydCl8MCxvPW8rTWF0aC5pbXVsKE4sbnQpfDAsbj1uK01hdGguaW11bChQLG90KXwwLGk9aStNYXRoLmltdWwoUCxhdCl8MCxpPWkrTWF0aC5pbXVsKFQsb3QpfDAsbz1vK01hdGguaW11bChULGF0KXwwLG49bitNYXRoLmltdWwoQixzdCl8MCxpPWkrTWF0aC5pbXVsKEIsdXQpfDAsaT1pK01hdGguaW11bChPLHN0KXwwLG89bytNYXRoLmltdWwoTyx1dCl8MCxuPW4rTWF0aC5pbXVsKGssY3QpfDAsaT1pK01hdGguaW11bChrLGR0KXwwLGk9aStNYXRoLmltdWwoeCxjdCl8MCxvPW8rTWF0aC5pbXVsKHgsZHQpfDAsbj1uK01hdGguaW11bChTLHB0KXwwLGk9aStNYXRoLmltdWwoUyxidCl8MCxpPWkrTWF0aC5pbXVsKEUscHQpfDAsbz1vK01hdGguaW11bChFLGJ0KXwwO3ZhciBCdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQnQ+Pj4yNil8MCxCdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxydCksaT1NYXRoLmltdWwoVSxudCksaT1pK01hdGguaW11bCh6LHJ0KXwwLG89TWF0aC5pbXVsKHosbnQpLG49bitNYXRoLmltdWwoQyxvdCl8MCxpPWkrTWF0aC5pbXVsKEMsYXQpfDAsaT1pK01hdGguaW11bChOLG90KXwwLG89bytNYXRoLmltdWwoTixhdCl8MCxuPW4rTWF0aC5pbXVsKFAsc3QpfDAsaT1pK01hdGguaW11bChQLHV0KXwwLGk9aStNYXRoLmltdWwoVCxzdCl8MCxvPW8rTWF0aC5pbXVsKFQsdXQpfDAsbj1uK01hdGguaW11bChCLGN0KXwwLGk9aStNYXRoLmltdWwoQixkdCl8MCxpPWkrTWF0aC5pbXVsKE8sY3QpfDAsbz1vK01hdGguaW11bChPLGR0KXwwLG49bitNYXRoLmltdWwoayxwdCl8MCxpPWkrTWF0aC5pbXVsKGssYnQpfDAsaT1pK01hdGguaW11bCh4LHB0KXwwLG89bytNYXRoLmltdWwoeCxidCl8MDt2YXIgT3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsb3QpLGk9TWF0aC5pbXVsKFUsYXQpLGk9aStNYXRoLmltdWwoeixvdCl8MCxvPU1hdGguaW11bCh6LGF0KSxuPW4rTWF0aC5pbXVsKEMsc3QpfDAsaT1pK01hdGguaW11bChDLHV0KXwwLGk9aStNYXRoLmltdWwoTixzdCl8MCxvPW8rTWF0aC5pbXVsKE4sdXQpfDAsbj1uK01hdGguaW11bChQLGN0KXwwLGk9aStNYXRoLmltdWwoUCxkdCl8MCxpPWkrTWF0aC5pbXVsKFQsY3QpfDAsbz1vK01hdGguaW11bChULGR0KXwwLG49bitNYXRoLmltdWwoQixwdCl8MCxpPWkrTWF0aC5pbXVsKEIsYnQpfDAsaT1pK01hdGguaW11bChPLHB0KXwwLG89bytNYXRoLmltdWwoTyxidCl8MDt2YXIgUnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFJ0Pj4+MjYpfDAsUnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsc3QpLGk9TWF0aC5pbXVsKFUsdXQpLGk9aStNYXRoLmltdWwoeixzdCl8MCxvPU1hdGguaW11bCh6LHV0KSxuPW4rTWF0aC5pbXVsKEMsY3QpfDAsaT1pK01hdGguaW11bChDLGR0KXwwLGk9aStNYXRoLmltdWwoTixjdCl8MCxvPW8rTWF0aC5pbXVsKE4sZHQpfDAsbj1uK01hdGguaW11bChQLHB0KXwwLGk9aStNYXRoLmltdWwoUCxidCl8MCxpPWkrTWF0aC5pbXVsKFQscHQpfDAsbz1vK01hdGguaW11bChULGJ0KXwwO3ZhciBQdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUHQ+Pj4yNil8MCxQdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxjdCksaT1NYXRoLmltdWwoVSxkdCksaT1pK01hdGguaW11bCh6LGN0KXwwLG89TWF0aC5pbXVsKHosZHQpLG49bitNYXRoLmltdWwoQyxwdCl8MCxpPWkrTWF0aC5pbXVsKEMsYnQpfDAsaT1pK01hdGguaW11bChOLHB0KXwwLG89bytNYXRoLmltdWwoTixidCl8MDt2YXIgVHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscHQpLGk9TWF0aC5pbXVsKFUsYnQpLGk9aStNYXRoLmltdWwoeixwdCl8MCxvPU1hdGguaW11bCh6LGJ0KTt2YXIganQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3JldHVybiB1PShvKyhpPj4+MTMpfDApKyhqdD4+PjI2KXwwLGp0Jj02NzEwODg2MyxzWzBdPXZ0LHNbMV09eXQsc1syXT1tdCxzWzNdPWd0LHNbNF09d3Qsc1s1XT1fdCxzWzZdPU10LHNbN109U3Qsc1s4XT1FdCxzWzldPUF0LHNbMTBdPWt0LHNbMTFdPXh0LHNbMTJdPUl0LHNbMTNdPUJ0LHNbMTRdPU90LHNbMTVdPVJ0LHNbMTZdPVB0LHNbMTddPVR0LHNbMThdPWp0LDAhPT11JiYoc1sxOV09dSxyLmxlbmd0aCsrKSxyfTtNYXRoLmltdWx8fChFPXUpLG8ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmxlbmd0aCt0Lmxlbmd0aDtyZXR1cm4gcj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP0UodGhpcyx0LGUpOm48NjM/dSh0aGlzLHQsZSk6bjwxMDI0P2godGhpcyx0LGUpOmModGhpcyx0LGUpfSxkLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj1vLnByb3RvdHlwZS5fY291bnRCaXRzKHQpLTEsbj0wO248dDtuKyspZVtuXT10aGlzLnJldkJpbihuLHIsdCk7cmV0dXJuIGV9LGQucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbih0LGUscil7aWYoMD09PXR8fHQ9PT1yLTEpcmV0dXJuIHQ7Zm9yKHZhciBuPTAsaT0wO2k8ZTtpKyspbnw9KDEmdCk8PGUtaS0xLHQ+Pj0xO3JldHVybiBufSxkLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXtmb3IodmFyIGE9MDthPG87YSsrKW5bYV09ZVt0W2FdXSxpW2FdPXJbdFthXV19LGQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUscixuLGksbyl7dGhpcy5wZXJtdXRlKG8sdCxlLHIsbixpKTtmb3IodmFyIGE9MTthPGk7YTw8PTEpZm9yKHZhciBmPWE8PDEscz1NYXRoLmNvcygyKk1hdGguUEkvZiksdT1NYXRoLnNpbigyKk1hdGguUEkvZiksaD0wO2g8aTtoKz1mKWZvcih2YXIgYz1zLGQ9dSxsPTA7bDxhO2wrKyl7dmFyIHA9cltoK2xdLGI9bltoK2xdLHY9cltoK2wrYV0seT1uW2grbCthXSxtPWMqdi1kKnk7eT1jKnkrZCp2LHY9bSxyW2grbF09cCt2LG5baCtsXT1iK3kscltoK2wrYV09cC12LG5baCtsK2FdPWIteSxsIT09ZiYmKG09cypjLXUqZCxkPXMqZCt1KmMsYz1tKX19LGQucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MXxNYXRoLm1heChlLHQpLG49MSZyLGk9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStufSxkLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgaT10W25dO3Rbbl09dFtyLW4tMV0sdFtyLW4tMV09aSxpPWVbbl0sZVtuXT0tZVtyLW4tMV0sZVtyLW4tMV09LWl9fSxkLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTA7bjxlLzI7bisrKXt2YXIgaT04MTkyKk1hdGgucm91bmQodFsyKm4rMV0vZSkrTWF0aC5yb3VuZCh0WzIqbl0vZSkrcjt0W25dPTY3MTA4ODYzJmkscj1pPDY3MTA4ODY0PzA6aS82NzEwODg2NHwwfXJldHVybiB0fSxkLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgbz0wLGE9MDthPGU7YSsrKW8rPTB8dFthXSxyWzIqYV09ODE5MSZvLG8+Pj49MTMsclsyKmErMV09ODE5MSZvLG8+Pj49MTM7Zm9yKGE9MiplO2E8aTsrK2EpclthXT0wO24oMD09PW8pLG4oMD09PShvJi04MTkyKSl9LGQucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGQucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksbz10aGlzLnN0dWIobiksYT1uZXcgQXJyYXkobiksZj1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksaD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksZD1yLndvcmRzO2QubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsYSxuKSxcbnRoaXMuY29udmVydDEzYihlLndvcmRzLGUubGVuZ3RoLHUsbiksdGhpcy50cmFuc2Zvcm0oYSxvLGYscyxuLGkpLHRoaXMudHJhbnNmb3JtKHUsbyxoLGMsbixpKTtmb3IodmFyIGw9MDtsPG47bCsrKXt2YXIgcD1mW2xdKmhbbF0tc1tsXSpjW2xdO3NbbF09ZltsXSpjW2xdK3NbbF0qaFtsXSxmW2xdPXB9cmV0dXJuIHRoaXMuY29uanVnYXRlKGYscyxuKSx0aGlzLnRyYW5zZm9ybShmLHMsZCxvLG4saSksdGhpcy5jb25qdWdhdGUoZCxvLG4pLHRoaXMubm9ybWFsaXplMTNiKGQsbiksci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGgsci5zdHJpcCgpfSxvLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSx0aGlzLm11bFRvKHQsZSl9LG8ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSxjKHRoaXMsdCxlKX0sby5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHQsdGhpcyl9LG8ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCk7Zm9yKHZhciBlPTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSp0LG89KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPW8+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJm99cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tyXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0sby5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxvLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxvLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCl7dmFyIGU9cyh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBvKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZSxyPXQlMjYsaT0odC1yKS8yNixvPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIGE9MDtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLndvcmRzW2VdJm8scz0oMHx0aGlzLndvcmRzW2VdKS1mPDxyO3RoaXMud29yZHNbZV09c3xhLGE9Zj4+PjI2LXJ9YSYmKHRoaXMud29yZHNbZV09YSx0aGlzLmxlbmd0aCsrKX1pZigwIT09aSl7Zm9yKGU9dGhpcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLndvcmRzW2UraV09dGhpcy53b3Jkc1tlXTtmb3IoZT0wO2U8aTtlKyspdGhpcy53b3Jkc1tlXT0wO3RoaXMubGVuZ3RoKz1pfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih0KX0sby5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHQsZSxyKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgaTtpPWU/KGUtZSUyNikvMjY6MDt2YXIgbz10JTI2LGE9TWF0aC5taW4oKHQtbykvMjYsdGhpcy5sZW5ndGgpLGY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5vPDxvLHM9cjtpZihpLT1hLGk9TWF0aC5tYXgoMCxpKSxzKXtmb3IodmFyIHU9MDt1PGE7dSsrKXMud29yZHNbdV09dGhpcy53b3Jkc1t1XTtzLmxlbmd0aD1hfWlmKDA9PT1hKTtlbHNlIGlmKHRoaXMubGVuZ3RoPmEpZm9yKHRoaXMubGVuZ3RoLT1hLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl0aGlzLndvcmRzW3VdPXRoaXMud29yZHNbdSthXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBoPTA7Zm9yKHU9dGhpcy5sZW5ndGgtMTt1Pj0wJiYoMCE9PWh8fHU+PWkpO3UtLSl7dmFyIGM9MHx0aGlzLndvcmRzW3VdO3RoaXMud29yZHNbdV09aDw8MjYtb3xjPj4+byxoPWMmZn1yZXR1cm4gcyYmMCE9PWgmJihzLndvcmRzW3MubGVuZ3RoKytdPWgpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxvLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LG8ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LG8ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxvLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiExO3ZhciBvPXRoaXMud29yZHNbcl07cmV0dXJuISEobyZpKX0sby5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLFwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzXCIpLHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzO2lmKDAhPT1lJiZyKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxvLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gbihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LG8ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxvLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LG8ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sby5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sby5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LG8ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksbz10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChvKTt2YXIgYSxmPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7YT0oMHx0aGlzLndvcmRzW2krcl0pK2Y7dmFyIHM9KDB8dC53b3Jkc1tpXSkqZTthLT02NzEwODg2MyZzLGY9KGE+PjI2KS0ocy82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYX1mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspYT0oMHx0aGlzLndvcmRzW2krcl0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYTtpZigwPT09ZilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKGY9PT0tMSksZj0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylhPS0oMHx0aGlzLndvcmRzW2ldKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZhO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoLXQubGVuZ3RoLG49dGhpcy5jbG9uZSgpLGk9dCxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSxmPXRoaXMuX2NvdW50Qml0cyhhKTtyPTI2LWYsMCE9PXImJihpPWkudXNobG4ociksbi5pdXNobG4ociksYT0wfGkud29yZHNbaS5sZW5ndGgtMV0pO3ZhciBzLHU9bi5sZW5ndGgtaS5sZW5ndGg7aWYoXCJtb2RcIiE9PWUpe3M9bmV3IG8obnVsbCkscy5sZW5ndGg9dSsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGg9MDtoPHMubGVuZ3RoO2grKylzLndvcmRzW2hdPTB9dmFyIGM9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsdSk7MD09PWMubmVnYXRpdmUmJihuPWMscyYmKHMud29yZHNbdV09MSkpO2Zvcih2YXIgZD11LTE7ZD49MDtkLS0pe3ZhciBsPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgrZF0pKygwfG4ud29yZHNbaS5sZW5ndGgrZC0xXSk7Zm9yKGw9TWF0aC5taW4obC9hfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksbCxkKTswIT09bi5uZWdhdGl2ZTspbC0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsZCksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2RdPWwpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLFwiZGl2XCIhPT1lJiYwIT09ciYmbi5pdXNocm4ocikse2RpdjpzfHxudWxsLG1vZDpufX0sby5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHQsZSxyKXtpZihuKCF0LmlzWmVybygpKSx0aGlzLmlzWmVybygpKXJldHVybntkaXY6bmV3IG8oMCksbW9kOm5ldyBvKDApfTt2YXIgaSxhLGY7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8oZj10aGlzLm5lZygpLmRpdm1vZCh0LGUpLFwibW9kXCIhPT1lJiYoaT1mLmRpdi5uZWcoKSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlhZGQodCkpLHtkaXY6aSxtb2Q6YX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8oZj10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLFwibW9kXCIhPT1lJiYoaT1mLmRpdi5uZWcoKSkse2RpdjppLG1vZDpmLm1vZH0pOjAhPT0odGhpcy5uZWdhdGl2ZSZ0Lm5lZ2F0aXZlKT8oZj10aGlzLm5lZygpLmRpdm1vZCh0Lm5lZygpLGUpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pc3ViKHQpKSx7ZGl2OmYuZGl2LG1vZDphfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgbygwKSxtb2Q6dGhpc306MT09PXQubGVuZ3RoP1wiZGl2XCI9PT1lP3tkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpudWxsfTpcIm1vZFwiPT09ZT97ZGl2Om51bGwsbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHQsZSl9LG8ucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcImRpdlwiLCExKS5kaXZ9LG8ucHJvdG90eXBlLm1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCExKS5tb2R9LG8ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMCkubW9kfSxvLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxvPXIuY21wKG4pO3JldHVybiBvPDB8fDE9PT1pJiYwPT09bz9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LG8ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sby5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxvLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgbygxKSxhPW5ldyBvKDApLGY9bmV3IG8oMCkscz1uZXcgbygxKSx1PTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKyt1O2Zvcih2YXIgaD1yLmNsb25lKCksYz1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGQ9MCxsPTE7MD09PShlLndvcmRzWzBdJmwpJiZkPDI2OysrZCxsPDw9MSk7aWYoZD4wKWZvcihlLml1c2hybihkKTtkLS0gPjA7KShpLmlzT2RkKCl8fGEuaXNPZGQoKSkmJihpLmlhZGQoaCksYS5pc3ViKGMpKSxpLml1c2hybigxKSxhLml1c2hybigxKTtmb3IodmFyIHA9MCxiPTE7MD09PShyLndvcmRzWzBdJmIpJiZwPDI2OysrcCxiPDw9MSk7aWYocD4wKWZvcihyLml1c2hybihwKTtwLS0gPjA7KShmLmlzT2RkKCl8fHMuaXNPZGQoKSkmJihmLmlhZGQoaCkscy5pc3ViKGMpKSxmLml1c2hybigxKSxzLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihmKSxhLmlzdWIocykpOihyLmlzdWIoZSksZi5pc3ViKGkpLHMuaXN1YihhKSl9cmV0dXJue2E6ZixiOnMsZ2NkOnIuaXVzaGxuKHUpfX0sby5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgbygxKSxhPW5ldyBvKDApLGY9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgcz0wLHU9MTswPT09KGUud29yZHNbMF0mdSkmJnM8MjY7KytzLHU8PD0xKTtpZihzPjApZm9yKGUuaXVzaHJuKHMpO3MtLSA+MDspaS5pc09kZCgpJiZpLmlhZGQoZiksaS5pdXNocm4oMSk7Zm9yKHZhciBoPTAsYz0xOzA9PT0oci53b3Jkc1swXSZjKSYmaDwyNjsrK2gsYzw8PTEpO2lmKGg+MClmb3Ioci5pdXNocm4oaCk7aC0tID4wOylhLmlzT2RkKCkmJmEuaWFkZChmKSxhLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihhKSk6KHIuaXN1YihlKSxhLmlzdWIoaSkpfXZhciBkO3JldHVybiBkPTA9PT1lLmNtcG4oMSk/aTphLGQuY21wbigwKTwwJiZkLmlhZGQodCksZH0sby5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBvPWU7ZT1yLHI9b31lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LG8ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LG8ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sby5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgbz1pLGE9cjswIT09byYmYTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPTB8dGhpcy53b3Jkc1thXTtmKz1vLG89Zj4+PjI2LGYmPTY3MTA4ODYzLHRoaXMud29yZHNbYV09Zn1yZXR1cm4gMCE9PW8mJih0aGlzLndvcmRzW2FdPW8sdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LG8ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24odCl7dmFyIGU9dDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmZSlyZXR1cm4gMTt0aGlzLnN0cmlwKCk7dmFyIHI7aWYodGhpcy5sZW5ndGg+MSlyPTE7ZWxzZXtlJiYodD0tdCksbih0PD02NzEwODg2MyxcIk51bWJlciBpcyB0b28gYmlnXCIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTtyPWk9PT10PzA6aTx0Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXI6cn0sby5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LG8ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfHQud29yZHNbcl07aWYobiE9PWkpe248aT9lPS0xOm4+aSYmKGU9MSk7YnJlYWt9fXJldHVybiBlfSxvLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXAodCl9LG8ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT49MH0sby5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT49MH0sby5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk9PT0tMX0sby5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sby5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sby5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxvLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG0odCl9LG8ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksbigwPT09dGhpcy5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sby5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LG8ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc3ViKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5tdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5pbXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LG8ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LG8ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LG8ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LG8ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LG8ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCYmIXQucmVkLFwicmVkUG93KG5vcm1hbE51bSlcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdCl9O3ZhciBBPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07bC5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBvKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0sbC5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG8gdGhpcy5zcGxpdChyLHRoaXMudG1wKSxyPXRoaXMuaW11bEsocikscj1yLmlhZGQodGhpcy50bXApLGU9ci5iaXRMZW5ndGgoKTt3aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnIuc3RyaXAoKSxyfSxsLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe3QuaXVzaHJuKHRoaXMubiwwLGUpfSxsLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbXVsKHRoaXMuayl9LGkocCxsKSxwLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj00MTk0MzAzLG49TWF0aC5taW4odC5sZW5ndGgsOSksaT0wO2k8bjtpKyspZS53b3Jkc1tpXT10LndvcmRzW2ldO2lmKGUubGVuZ3RoPW4sdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBvPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109byZyLGk9MTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPTB8dC53b3Jkc1tpXTt0LndvcmRzW2ktMTBdPShhJnIpPDw0fG8+Pj4yMixvPWF9bz4+Pj0yMix0LndvcmRzW2ktMTBdPW8sMD09PW8mJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0scC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKGIsbCksaSh2LGwpLGkoeSxsKSx5LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LG8uX3ByaW1lPWZ1bmN0aW9uIHQoZSl7aWYoQVtlXSlyZXR1cm4gQVtlXTt2YXIgdDtpZihcImsyNTZcIj09PWUpdD1uZXcgcDtlbHNlIGlmKFwicDIyNFwiPT09ZSl0PW5ldyBiO2Vsc2UgaWYoXCJwMTkyXCI9PT1lKXQ9bmV3IHY7ZWxzZXtpZihcInAyNTUxOVwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHByaW1lIFwiK2UpO3Q9bmV3IHl9cmV0dXJuIEFbZV09dCx0fSxtLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT09KHQubmVnYXRpdmV8ZS5uZWdhdGl2ZSksXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sbS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LG0ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sbS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sbS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxtLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgbygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxhPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylhKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIGY9bmV3IG8oMSkudG9SZWQodGhpcykscz1mLnJlZE5lZygpLHU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGg9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihoPW5ldyBvKDIqaCpoKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coaCx1KS5jbXAocyk7KWgucmVkSUFkZChzKTtmb3IodmFyIGM9dGhpcy5wb3coaCxpKSxkPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSksbD10aGlzLnBvdyh0LGkpLHA9YTswIT09bC5jbXAoZik7KXtmb3IodmFyIGI9bCx2PTA7MCE9PWIuY21wKGYpO3YrKyliPWIucmVkU3FyKCk7bih2PHApO3ZhciB5PXRoaXMucG93KGMsbmV3IG8oMSkuaXVzaGxuKHAtdi0xKSk7ZD1kLnJlZE11bCh5KSxjPXkucmVkU3FyKCksbD1sLnJlZE11bChjKSxwPXZ9cmV0dXJuIGR9LG0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0sbS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMSk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPTQsbj1uZXcgQXJyYXkoMTw8cik7blswXT1uZXcgbygxKS50b1JlZCh0aGlzKSxuWzFdPXQ7Zm9yKHZhciBpPTI7aTxuLmxlbmd0aDtpKyspbltpXT10aGlzLm11bChuW2ktMV0sdCk7dmFyIGE9blswXSxmPTAscz0wLHU9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXUmJih1PTI2KSxpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2Zvcih2YXIgaD1lLndvcmRzW2ldLGM9dS0xO2M+PTA7Yy0tKXt2YXIgZD1oPj5jJjE7YSE9PW5bMF0mJihhPXRoaXMuc3FyKGEpKSwwIT09ZHx8MCE9PWY/KGY8PD0xLGZ8PWQscysrLChzPT09cnx8MD09PWkmJjA9PT1jKSYmKGE9dGhpcy5tdWwoYSxuW2ZdKSxzPTAsZj0wKSk6cz0wfXU9MjZ9cmV0dXJuIGF9LG0ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LG0ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxvLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnKHQpfSxpKGcsbSksZy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxnLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksbz1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP289aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihvPWkuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtyZXR1cm4gZS5fZm9yY2VSZWQodGhpcyl9fShcInVuZGVmaW5lZFwiPT10eXBlb2YgdHx8dCx0aGlzKX0pLmNhbGwoZSxyKDkyKSh0KSl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7aS5jYWxsKHRoaXMpfXQuZXhwb3J0cz1uO3ZhciBpPXIoMTEwKS5FdmVudEVtaXR0ZXIsbz1yKDYwMyk7byhuLGkpLG4uUmVhZGFibGU9cig2MDApLG4uV3JpdGFibGU9cig2MDIpLG4uRHVwbGV4PXIoNTk1KSxuLlRyYW5zZm9ybT1yKDYwMSksbi5QYXNzVGhyb3VnaD1yKDU5OSksbi5TdHJlYW09bixuLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlKXt0LndyaXRhYmxlJiYhMT09PXQud3JpdGUoZSkmJnUucGF1c2UmJnUucGF1c2UoKX1mdW5jdGlvbiBuKCl7dS5yZWFkYWJsZSYmdS5yZXN1bWUmJnUucmVzdW1lKCl9ZnVuY3Rpb24gbygpe2h8fChoPSEwLHQuZW5kKCkpfWZ1bmN0aW9uIGEoKXtofHwoaD0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmRlc3Ryb3kmJnQuZGVzdHJveSgpKX1mdW5jdGlvbiBmKHQpe2lmKHMoKSwwPT09aS5saXN0ZW5lckNvdW50KHRoaXMsXCJlcnJvclwiKSl0aHJvdyB0fWZ1bmN0aW9uIHMoKXt1LnJlbW92ZUxpc3RlbmVyKFwiZGF0YVwiLHIpLHQucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLG4pLHUucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixvKSx1LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixhKSx1LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixmKSx0LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixmKSx1LnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIscyksdS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIscyksdC5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIscyl9dmFyIHU9dGhpczt1Lm9uKFwiZGF0YVwiLHIpLHQub24oXCJkcmFpblwiLG4pLHQuX2lzU3RkaW98fGUmJmUuZW5kPT09ITF8fCh1Lm9uKFwiZW5kXCIsbyksdS5vbihcImNsb3NlXCIsYSkpO3ZhciBoPSExO3JldHVybiB1Lm9uKFwiZXJyb3JcIixmKSx0Lm9uKFwiZXJyb3JcIixmKSx1Lm9uKFwiZW5kXCIscyksdS5vbihcImNsb3NlXCIscyksdC5vbihcImNsb3NlXCIscyksdC5lbWl0KFwicGlwZVwiLHUpLHR9fSxmdW5jdGlvbih0LGUpe3ZhciByPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNC4wXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9cil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG4odCksdm9pZCAwPT09ZSlyZXR1cm4gdDtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5jYWxsKGUscil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdC5jYWxsKGUscixuKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihyLG4saSl7cmV0dXJuIHQuY2FsbChlLHIsbixpKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE5MCksaT1yKDApLG89cig4NykoXCJtZXRhZGF0YVwiKSxhPW8uc3RvcmV8fChvLnN0b3JlPW5ldyhyKDE5MykpKSxmPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1hLmdldCh0KTtpZighaSl7aWYoIXIpcmV0dXJuO2Euc2V0KHQsaT1uZXcgbil9dmFyIG89aS5nZXQoZSk7aWYoIW8pe2lmKCFyKXJldHVybjtpLnNldChlLG89bmV3IG4pfXJldHVybiBvfSxzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mKGUsciwhMSk7cmV0dXJuIHZvaWQgMCE9PW4mJm4uaGFzKHQpfSx1PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mKGUsciwhMSk7cmV0dXJuIHZvaWQgMD09PW4/dm9pZCAwOm4uZ2V0KHQpfSxoPWZ1bmN0aW9uKHQsZSxyLG4pe2YocixuLCEwKS5zZXQodCxlKX0sYz1mdW5jdGlvbih0LGUpe3ZhciByPWYodCxlLCExKSxuPVtdO3JldHVybiByJiZyLmZvckVhY2goZnVuY3Rpb24odCxlKXtuLnB1c2goZSl9KSxufSxkPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fHxcInN5bWJvbFwiPT10eXBlb2YgdD90OlN0cmluZyh0KX0sbD1mdW5jdGlvbih0KXtpKGkuUyxcIlJlZmxlY3RcIix0KX07dC5leHBvcnRzPXtzdG9yZTphLG1hcDpmLGhhczpzLGdldDp1LHNldDpoLGtleXM6YyxrZXk6ZCxleHA6bH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtpZihyKDgpKXt2YXIgbj1yKDQxKSxpPXIoNCksbz1yKDUpLGE9cigwKSxmPXIoODgpLHM9cigxNDApLHU9cigzMyksaD1yKDQwKSxjPXIoMzcpLGQ9cigxNCksbD1yKDQ1KSxwPXIoMzgpLGI9cigxMCksdj1yKDQ3KSx5PXIoMjkpLG09cigxMiksZz1yKDE4Nyksdz1yKDY0KSxfPXIoNiksTT1yKDExKSxTPXIoMTI1KSxFPXIoNDIpLEE9cigyMSksaz1yKDQzKS5mLHg9cigxNDIpLEk9cig0OCksQj1yKDcpLE89cigyNyksUj1yKDc4KSxQPXIoMTM0KSxUPXIoMTQzKSxqPXIoNTYpLEM9cig4NCksTj1yKDQ2KSxMPXIoMTE4KSxVPXIoMTY3KSx6PXIoOSksRD1yKDIwKSxxPXouZixGPUQuZixLPWkuUmFuZ2VFcnJvcixHPWkuVHlwZUVycm9yLFY9aS5VaW50OEFycmF5LEg9XCJBcnJheUJ1ZmZlclwiLFg9XCJTaGFyZWRcIitILFk9XCJCWVRFU19QRVJfRUxFTUVOVFwiLFc9XCJwcm90b3R5cGVcIixaPUFycmF5W1ddLEo9cy5BcnJheUJ1ZmZlciwkPXMuRGF0YVZpZXcsUT1PKDApLHR0PU8oMiksZXQ9TygzKSxydD1PKDQpLG50PU8oNSksaXQ9Tyg2KSxvdD1SKCEwKSxhdD1SKCExKSxmdD1ULnZhbHVlcyxzdD1ULmtleXMsdXQ9VC5lbnRyaWVzLGh0PVoubGFzdEluZGV4T2YsY3Q9Wi5yZWR1Y2UsZHQ9Wi5yZWR1Y2VSaWdodCxsdD1aLmpvaW4scHQ9Wi5zb3J0LGJ0PVouc2xpY2UsdnQ9Wi50b1N0cmluZyx5dD1aLnRvTG9jYWxlU3RyaW5nLG10PUIoXCJpdGVyYXRvclwiKSxndD1CKFwidG9TdHJpbmdUYWdcIiksd3Q9SShcInR5cGVkX2NvbnN0cnVjdG9yXCIpLF90PUkoXCJkZWZfY29uc3RydWN0b3JcIiksTXQ9Zi5DT05TVFIsU3Q9Zi5UWVBFRCxFdD1mLlZJRVcsQXQ9XCJXcm9uZyBsZW5ndGghXCIsa3Q9TygxLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFB0KFAodCx0W190XSksZSl9KSx4dD1vKGZ1bmN0aW9uKCl7cmV0dXJuIDE9PT1uZXcgVihuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdfSksSXQ9ISFWJiYhIVZbV10uc2V0JiZvKGZ1bmN0aW9uKCl7bmV3IFYoMSkuc2V0KHt9KX0pLEJ0PWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dCl0aHJvdyBHKEF0KTt2YXIgcj0rdCxuPWIodCk7aWYoZSYmIWcocixuKSl0aHJvdyBLKEF0KTtyZXR1cm4gbn0sT3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1wKHQpO2lmKHI8MHx8ciVlKXRocm93IEsoXCJXcm9uZyBvZmZzZXQhXCIpO3JldHVybiByfSxSdD1mdW5jdGlvbih0KXtpZihfKHQpJiZTdCBpbiB0KXJldHVybiB0O3Rocm93IEcodCtcIiBpcyBub3QgYSB0eXBlZCBhcnJheSFcIil9LFB0PWZ1bmN0aW9uKHQsZSl7aWYoIShfKHQpJiZ3dCBpbiB0KSl0aHJvdyBHKFwiSXQgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IhXCIpO3JldHVybiBuZXcgdChlKX0sVHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4ganQoUCh0LHRbX3RdKSxlKX0sanQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk9UHQodCxuKTtuPnI7KWlbcl09ZVtyKytdO3JldHVybiBpfSxDdD1mdW5jdGlvbih0LGUscil7cSh0LGUse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kW3JdfX0pfSxOdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxvLGEsZj1NKHQpLHM9YXJndW1lbnRzLmxlbmd0aCxoPXM+MT9hcmd1bWVudHNbMV06dm9pZCAwLGM9dm9pZCAwIT09aCxkPXgoZik7aWYodm9pZCAwIT1kJiYhUyhkKSl7Zm9yKGE9ZC5jYWxsKGYpLG49W10sZT0wOyEobz1hLm5leHQoKSkuZG9uZTtlKyspbi5wdXNoKG8udmFsdWUpO2Y9bn1mb3IoYyYmcz4yJiYoaD11KGgsYXJndW1lbnRzWzJdLDIpKSxlPTAscj1iKGYubGVuZ3RoKSxpPVB0KHRoaXMscik7cj5lO2UrKylpW2VdPWM/aChmW2VdLGUpOmZbZV07cmV0dXJuIGl9LEx0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9UHQodGhpcyxlKTtlPnQ7KXJbdF09YXJndW1lbnRzW3QrK107cmV0dXJuIHJ9LFV0PSEhViYmbyhmdW5jdGlvbigpe3l0LmNhbGwobmV3IFYoMSkpfSksenQ9ZnVuY3Rpb24oKXtyZXR1cm4geXQuYXBwbHkoVXQ/YnQuY2FsbChSdCh0aGlzKSk6UnQodGhpcyksYXJndW1lbnRzKX0sRHQ9e2NvcHlXaXRoaW46ZnVuY3Rpb24odCxlKXtyZXR1cm4gVS5jYWxsKFJ0KHRoaXMpLHQsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LGV2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBydChSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0sZmlsbDpmdW5jdGlvbih0KXtyZXR1cm4gTC5hcHBseShSdCh0aGlzKSxhcmd1bWVudHMpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIFR0KHRoaXMsdHQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCkpfSxmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBudChSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0sZmluZEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiBpdChSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0sZm9yRWFjaDpmdW5jdGlvbih0KXtRKFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxpbmRleE9mOmZ1bmN0aW9uKHQpe3JldHVybiBhdChSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0saW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG90KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxqb2luOmZ1bmN0aW9uKHQpe3JldHVybiBsdC5hcHBseShSdCh0aGlzKSxhcmd1bWVudHMpfSxsYXN0SW5kZXhPZjpmdW5jdGlvbih0KXtyZXR1cm4gaHQuYXBwbHkoUnQodGhpcyksYXJndW1lbnRzKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiBrdChSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0scmVkdWNlOmZ1bmN0aW9uKHQpe3JldHVybiBjdC5hcHBseShSdCh0aGlzKSxhcmd1bWVudHMpfSxyZWR1Y2VSaWdodDpmdW5jdGlvbih0KXtyZXR1cm4gZHQuYXBwbHkoUnQodGhpcyksYXJndW1lbnRzKX0scmV2ZXJzZTpmdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMscj1SdChlKS5sZW5ndGgsbj1NYXRoLmZsb29yKHIvMiksaT0wO2k8bjspdD1lW2ldLGVbaSsrXT1lWy0tcl0sZVtyXT10O3JldHVybiBlfSxzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBldChSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gcHQuY2FsbChSdCh0aGlzKSx0KX0sc3ViYXJyYXk6ZnVuY3Rpb24odCxlKXt2YXIgcj1SdCh0aGlzKSxuPXIubGVuZ3RoLGk9dih0LG4pO3JldHVybiBuZXcoUChyLHJbX3RdKSkoci5idWZmZXIsci5ieXRlT2Zmc2V0K2kqci5CWVRFU19QRVJfRUxFTUVOVCxiKCh2b2lkIDA9PT1lP246dihlLG4pKS1pKSl9fSxxdD1mdW5jdGlvbih0LGUpe3JldHVybiBUdCh0aGlzLGJ0LmNhbGwoUnQodGhpcyksdCxlKSl9LEZ0PWZ1bmN0aW9uKHQpe1J0KHRoaXMpO3ZhciBlPU90KGFyZ3VtZW50c1sxXSwxKSxyPXRoaXMubGVuZ3RoLG49TSh0KSxpPWIobi5sZW5ndGgpLG89MDtpZihpK2U+cil0aHJvdyBLKEF0KTtmb3IoO288aTspdGhpc1tlK29dPW5bbysrXX0sS3Q9e2VudHJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdXQuY2FsbChSdCh0aGlzKSl9LGtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gc3QuY2FsbChSdCh0aGlzKSl9LHZhbHVlczpmdW5jdGlvbigpe3JldHVybiBmdC5jYWxsKFJ0KHRoaXMpKX19LEd0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF8odCkmJnRbU3RdJiZcInN5bWJvbFwiIT10eXBlb2YgZSYmZSBpbiB0JiZTdHJpbmcoK2UpPT1TdHJpbmcoZSl9LFZ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQsZT15KGUsITApKT9jKDIsdFtlXSk6Rih0LGUpfSxIdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIShHdCh0LGU9eShlLCEwKSkmJl8ocikmJm0ocixcInZhbHVlXCIpKXx8bShyLFwiZ2V0XCIpfHxtKHIsXCJzZXRcIil8fHIuY29uZmlndXJhYmxlfHxtKHIsXCJ3cml0YWJsZVwiKSYmIXIud3JpdGFibGV8fG0ocixcImVudW1lcmFibGVcIikmJiFyLmVudW1lcmFibGU/cSh0LGUscik6KHRbZV09ci52YWx1ZSx0KX07TXR8fChELmY9VnQsei5mPUh0KSxhKGEuUythLkYqIU10LFwiT2JqZWN0XCIse2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpWdCxkZWZpbmVQcm9wZXJ0eTpIdH0pLG8oZnVuY3Rpb24oKXt2dC5jYWxsKHt9KX0pJiYodnQ9eXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbHQuY2FsbCh0aGlzKX0pO3ZhciBYdD1sKHt9LER0KTtsKFh0LEt0KSxkKFh0LG10LEt0LnZhbHVlcyksbChYdCx7c2xpY2U6cXQsc2V0OkZ0LGNvbnN0cnVjdG9yOmZ1bmN0aW9uKCl7fSx0b1N0cmluZzp2dCx0b0xvY2FsZVN0cmluZzp6dH0pLEN0KFh0LFwiYnVmZmVyXCIsXCJiXCIpLEN0KFh0LFwiYnl0ZU9mZnNldFwiLFwib1wiKSxDdChYdCxcImJ5dGVMZW5ndGhcIixcImxcIiksQ3QoWHQsXCJsZW5ndGhcIixcImVcIikscShYdCxndCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbU3RdfX0pLHQuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtzPSEhczt2YXIgdT10KyhzP1wiQ2xhbXBlZFwiOlwiXCIpK1wiQXJyYXlcIixjPVwiVWludDhBcnJheVwiIT11LGw9XCJnZXRcIit0LHA9XCJzZXRcIit0LHY9aVt1XSx5PXZ8fHt9LG09diYmQSh2KSxnPSF2fHwhZi5BQlYsTT17fSxTPXYmJnZbV10seD1mdW5jdGlvbih0LHIpe3ZhciBuPXQuX2Q7cmV0dXJuIG4udltsXShyKmUrbi5vLHh0KX0sST1mdW5jdGlvbih0LHIsbil7dmFyIGk9dC5fZDtzJiYobj0obj1NYXRoLnJvdW5kKG4pKTwwPzA6bj4yNTU/MjU1OjI1NSZuKSxpLnZbcF0ociplK2kubyxuLHh0KX0sQj1mdW5jdGlvbih0LGUpe3EodCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geCh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIEkodGhpcyxlLHQpfSxlbnVtZXJhYmxlOiEwfSl9O2c/KHY9cihmdW5jdGlvbih0LHIsbixpKXtoKHQsdix1LFwiX2RcIik7dmFyIG8sYSxmLHMsYz0wLGw9MDtpZihfKHIpKXtpZighKHIgaW5zdGFuY2VvZiBKfHwocz13KHIpKT09SHx8cz09WCkpcmV0dXJuIFN0IGluIHI/anQodixyKTpOdC5jYWxsKHYscik7bz1yLGw9T3QobixlKTt2YXIgcD1yLmJ5dGVMZW5ndGg7aWYodm9pZCAwPT09aSl7aWYocCVlKXRocm93IEsoQXQpO2lmKGE9cC1sLGE8MCl0aHJvdyBLKEF0KX1lbHNlIGlmKGE9YihpKSplLGErbD5wKXRocm93IEsoQXQpO2Y9YS9lfWVsc2UgZj1CdChyLCEwKSxhPWYqZSxvPW5ldyBKKGEpO2ZvcihkKHQsXCJfZFwiLHtiOm8sbzpsLGw6YSxlOmYsdjpuZXcgJChvKX0pO2M8ZjspQih0LGMrKyl9KSxTPXZbV109RShYdCksZChTLFwiY29uc3RydWN0b3JcIix2KSk6QyhmdW5jdGlvbih0KXtuZXcgdihudWxsKSxuZXcgdih0KX0sITApfHwodj1yKGZ1bmN0aW9uKHQscixuLGkpe2godCx2LHUpO3ZhciBvO3JldHVybiBfKHIpP3IgaW5zdGFuY2VvZiBKfHwobz13KHIpKT09SHx8bz09WD92b2lkIDAhPT1pP25ldyB5KHIsT3QobixlKSxpKTp2b2lkIDAhPT1uP25ldyB5KHIsT3QobixlKSk6bmV3IHkocik6U3QgaW4gcj9qdCh2LHIpOk50LmNhbGwodixyKTpuZXcgeShCdChyLGMpKX0pLFEobSE9PUZ1bmN0aW9uLnByb3RvdHlwZT9rKHkpLmNvbmNhdChrKG0pKTprKHkpLGZ1bmN0aW9uKHQpe3QgaW4gdnx8ZCh2LHQseVt0XSl9KSx2W1ddPVMsbnx8KFMuY29uc3RydWN0b3I9dikpO3ZhciBPPVNbbXRdLFI9ISFPJiYoXCJ2YWx1ZXNcIj09Ty5uYW1lfHx2b2lkIDA9PU8ubmFtZSksUD1LdC52YWx1ZXM7ZCh2LHd0LCEwKSxkKFMsU3QsdSksZChTLEV0LCEwKSxkKFMsX3QsdiksKHM/bmV3IHYoMSlbZ3RdPT11Omd0IGluIFMpfHxxKFMsZ3Qse2dldDpmdW5jdGlvbigpe3JldHVybiB1fX0pLE1bdV09dixhKGEuRythLlcrYS5GKih2IT15KSxNKSxhKGEuUyx1LHtCWVRFU19QRVJfRUxFTUVOVDplLGZyb206TnQsb2Y6THR9KSxZIGluIFN8fGQoUyxZLGUpLGEoYS5QLHUsRHQpLE4odSksYShhLlArYS5GKkl0LHUse3NldDpGdH0pLGEoYS5QK2EuRiohUix1LEt0KSxhKGEuUCthLkYqKFMudG9TdHJpbmchPXZ0KSx1LHt0b1N0cmluZzp2dH0pLGEoYS5QK2EuRipvKGZ1bmN0aW9uKCl7bmV3IHYoMSkuc2xpY2UoKX0pLHUse3NsaWNlOnF0fSksYShhLlArYS5GKihvKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IHYoWzEsMl0pLnRvTG9jYWxlU3RyaW5nKCl9KXx8IW8oZnVuY3Rpb24oKXtTLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpLHUse3RvTG9jYWxlU3RyaW5nOnp0fSksalt1XT1SP086UCxufHxSfHxkKFMsbXQsUCl9fWVsc2UgdC5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDgpKFwibWV0YVwiKSxpPXIoNiksbz1yKDEyKSxhPXIoOSkuZixmPTAscz1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSx1PSFyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIHMoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSxoPWZ1bmN0aW9uKHQpe2EodCxuLHt2YWx1ZTp7aTpcIk9cIisgKytmLHc6e319fSl9LGM9ZnVuY3Rpb24odCxlKXtpZighaSh0KSlyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdD90OihcInN0cmluZ1wiPT10eXBlb2YgdD9cIlNcIjpcIlBcIikrdDtpZighbyh0LG4pKXtpZighcyh0KSlyZXR1cm5cIkZcIjtpZighZSlyZXR1cm5cIkVcIjtoKHQpfXJldHVybiB0W25dLml9LGQ9ZnVuY3Rpb24odCxlKXtpZighbyh0LG4pKXtpZighcyh0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTtoKHQpfXJldHVybiB0W25dLnd9LGw9ZnVuY3Rpb24odCl7cmV0dXJuIHUmJnAuTkVFRCYmcyh0KSYmIW8odCxuKSYmaCh0KSx0fSxwPXQuZXhwb3J0cz17S0VZOm4sTkVFRDohMSxmYXN0S2V5OmMsZ2V0V2VhazpkLG9uRnJlZXplOmx9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5jZWlsLG49TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9uOnIpKHQpfX0sZnVuY3Rpb24odCxlKXt2YXIgcjtyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e3I9cnx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfHwoMCxldmFsKShcInRoaXNcIil9Y2F0Y2godCl7XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmKHI9d2luZG93KX10LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYoISh0IGluc3RhbmNlb2YgZSl8fHZvaWQgMCE9PW4mJm4gaW4gdCl0aHJvdyBUeXBlRXJyb3IocitcIjogaW5jb3JyZWN0IGludm9jYXRpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ITF9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMpLGk9cigxODApLG89cigxMjEpLGE9cigxMzMpKFwiSUVfUFJPVE9cIiksZj1mdW5jdGlvbigpe30scz1cInByb3RvdHlwZVwiLHU9ZnVuY3Rpb24oKXt2YXIgdCxlPXIoMTIwKShcImlmcmFtZVwiKSxuPW8ubGVuZ3RoLGk9XCI8XCIsYT1cIj5cIjtmb3IoZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLHIoMTIzKS5hcHBlbmRDaGlsZChlKSxlLnNyYz1cImphdmFzY3JpcHQ6XCIsdD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsdC5vcGVuKCksdC53cml0ZShpK1wic2NyaXB0XCIrYStcImRvY3VtZW50LkY9T2JqZWN0XCIraStcIi9zY3JpcHRcIithKSx0LmNsb3NlKCksdT10LkY7bi0tOylkZWxldGUgdVtzXVtvW25dXTtyZXR1cm4gdSgpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gbnVsbCE9PXQ/KGZbc109bih0KSxyPW5ldyBmLGZbc109bnVsbCxyW2FdPXQpOnI9dSgpLHZvaWQgMD09PWU/cjppKHIsZSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxODIpLGk9cigxMjEpLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpO2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE4MiksaT1yKDEyMSk7dC5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4gbih0LGkpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBpIGluIGUpbih0LGksZVtpXSxyKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQpLGk9cig5KSxvPXIoOCksYT1yKDcpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9blt0XTtvJiZlJiYhZVthXSYmaS5mKGUsYSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzgpLGk9TWF0aC5tYXgsbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1uKHQpLHQ8MD9pKHQrZSwwKTpvKHQsZSl9fSxmdW5jdGlvbih0LGUpe3ZhciByPTAsbj1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09dD9cIlwiOnQsXCIpX1wiLCgrK3IrbikudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24udXRpbHM9cig1MjcpLG4uY29tbW9uPXIoNTIzKSxuLnNoYT1yKDUyNiksbi5yaXBlbWQ9cig1MjUpLG4uaG1hYz1yKDUyNCksbi5zaGExPW4uc2hhLnNoYTEsbi5zaGEyNTY9bi5zaGEuc2hhMjU2LG4uc2hhMjI0PW4uc2hhLnNoYTIyNCxuLnNoYTM4ND1uLnNoYS5zaGEzODQsbi5zaGE1MTI9bi5zaGEuc2hhNTEyLG4ucmlwZW1kMTYwPW4ucmlwZW1kLnJpcGVtZDE2MH0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi51dGlscz1yKDU2NCksbi5jb21tb249cig1NjApLG4uc2hhPXIoNTYzKSxuLnJpcGVtZD1yKDU2Miksbi5obWFjPXIoNTYxKSxuLnNoYTE9bi5zaGEuc2hhMSxuLnNoYTI1Nj1uLnNoYS5zaGEyNTYsbi5zaGEyMjQ9bi5zaGEuc2hhMjI0LG4uc2hhMzg0PW4uc2hhLnNoYTM4NCxuLnNoYTUxMj1uLnNoYS5zaGE1MTIsbi5yaXBlbWQxNjA9bi5yaXBlbWQucmlwZW1kMTYwfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHUuY2FsbCh0aGlzLHQpLGguY2FsbCh0aGlzLHQpLHQmJnQucmVhZGFibGU9PT0hMSYmKHRoaXMucmVhZGFibGU9ITEpLHQmJnQud3JpdGFibGU9PT0hMSYmKHRoaXMud3JpdGFibGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCx0JiZ0LmFsbG93SGFsZk9wZW49PT0hMSYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdm9pZCB0aGlzLm9uY2UoXCJlbmRcIixpKSk6bmV3IG4odCl9ZnVuY3Rpb24gaSgpe3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8ZihvLHRoaXMpfWZ1bmN0aW9uIG8odCl7dC5lbmQoKX12YXIgYT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfTt0LmV4cG9ydHM9bjt2YXIgZj1yKDE1Nykscz1yKDczKTtzLmluaGVyaXRzPXIoNzQpO3ZhciB1PXIoMjUwKSxoPXIoMTU1KTtzLmluaGVyaXRzKG4sdSk7Zm9yKHZhciBjPWEoaC5wcm90b3R5cGUpLGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGw9Y1tkXTtuLnByb3RvdHlwZVtsXXx8KG4ucHJvdG90eXBlW2xdPWgucHJvdG90eXBlW2xdKX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKHQmJiFzKHQpKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3QpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gbyh0KXt0aGlzLmNoYXJSZWNlaXZlZD10Lmxlbmd0aCUyLHRoaXMuY2hhckxlbmd0aD10aGlzLmNoYXJSZWNlaXZlZD8yOjB9ZnVuY3Rpb24gYSh0KXt0aGlzLmNoYXJSZWNlaXZlZD10Lmxlbmd0aCUzLHRoaXMuY2hhckxlbmd0aD10aGlzLmNoYXJSZWNlaXZlZD8zOjB9dmFyIGY9cigxKS5CdWZmZXIscz1mLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKHQpe3N3aXRjaCh0JiZ0LnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6Y2FzZVwicmF3XCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LHU9ZS5TdHJpbmdEZWNvZGVyPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmVuY29kaW5nPSh0fHxcInV0ZjhcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9dLyxcIlwiKSxuKHQpLHRoaXMuZW5jb2Rpbmcpe2Nhc2VcInV0ZjhcIjp0aGlzLnN1cnJvZ2F0ZVNpemU9MzticmVhaztjYXNlXCJ1Y3MyXCI6Y2FzZVwidXRmMTZsZVwiOnRoaXMuc3Vycm9nYXRlU2l6ZT0yLHRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXI9bzticmVhaztjYXNlXCJiYXNlNjRcIjp0aGlzLnN1cnJvZ2F0ZVNpemU9Myx0aGlzLmRldGVjdEluY29tcGxldGVDaGFyPWE7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdm9pZCh0aGlzLndyaXRlPWkpfXRoaXMuY2hhckJ1ZmZlcj1uZXcgZig2KSx0aGlzLmNoYXJSZWNlaXZlZD0wLHRoaXMuY2hhckxlbmd0aD0wfTt1LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9XCJcIjt0aGlzLmNoYXJMZW5ndGg7KXt2YXIgcj10Lmxlbmd0aD49dGhpcy5jaGFyTGVuZ3RoLXRoaXMuY2hhclJlY2VpdmVkP3RoaXMuY2hhckxlbmd0aC10aGlzLmNoYXJSZWNlaXZlZDp0Lmxlbmd0aDtpZih0LmNvcHkodGhpcy5jaGFyQnVmZmVyLHRoaXMuY2hhclJlY2VpdmVkLDAsciksdGhpcy5jaGFyUmVjZWl2ZWQrPXIsdGhpcy5jaGFyUmVjZWl2ZWQ8dGhpcy5jaGFyTGVuZ3RoKXJldHVyblwiXCI7dD10LnNsaWNlKHIsdC5sZW5ndGgpLGU9dGhpcy5jaGFyQnVmZmVyLnNsaWNlKDAsdGhpcy5jaGFyTGVuZ3RoKS50b1N0cmluZyh0aGlzLmVuY29kaW5nKTt2YXIgbj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk7aWYoIShuPj01NTI5NiYmbjw9NTYzMTkpKXtpZih0aGlzLmNoYXJSZWNlaXZlZD10aGlzLmNoYXJMZW5ndGg9MCwwPT09dC5sZW5ndGgpcmV0dXJuIGU7YnJlYWt9dGhpcy5jaGFyTGVuZ3RoKz10aGlzLnN1cnJvZ2F0ZVNpemUsZT1cIlwifXRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXIodCk7dmFyIGk9dC5sZW5ndGg7dGhpcy5jaGFyTGVuZ3RoJiYodC5jb3B5KHRoaXMuY2hhckJ1ZmZlciwwLHQubGVuZ3RoLXRoaXMuY2hhclJlY2VpdmVkLGkpLGktPXRoaXMuY2hhclJlY2VpdmVkKSxlKz10LnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCxpKTt2YXIgaT1lLmxlbmd0aC0xLG49ZS5jaGFyQ29kZUF0KGkpO2lmKG4+PTU1Mjk2JiZuPD01NjMxOSl7dmFyIG89dGhpcy5zdXJyb2dhdGVTaXplO3JldHVybiB0aGlzLmNoYXJMZW5ndGgrPW8sdGhpcy5jaGFyUmVjZWl2ZWQrPW8sdGhpcy5jaGFyQnVmZmVyLmNvcHkodGhpcy5jaGFyQnVmZmVyLG8sMCxvKSx0LmNvcHkodGhpcy5jaGFyQnVmZmVyLDAsMCxvKSxlLnN1YnN0cmluZygwLGkpfXJldHVybiBlfSx1LnByb3RvdHlwZS5kZXRlY3RJbmNvbXBsZXRlQ2hhcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGg+PTM/Mzp0Lmxlbmd0aDtlPjA7ZS0tKXt2YXIgcj10W3QubGVuZ3RoLWVdO2lmKDE9PWUmJnI+PjU9PTYpe3RoaXMuY2hhckxlbmd0aD0yO2JyZWFrfWlmKGU8PTImJnI+PjQ9PTE0KXt0aGlzLmNoYXJMZW5ndGg9MzticmVha31pZihlPD0zJiZyPj4zPT0zMCl7dGhpcy5jaGFyTGVuZ3RoPTQ7YnJlYWt9fXRoaXMuY2hhclJlY2VpdmVkPWV9LHUucHJvdG90eXBlLmVuZD1mdW5jdGlvbih0KXt2YXIgZT1cIlwiO2lmKHQmJnQubGVuZ3RoJiYoZT10aGlzLndyaXRlKHQpKSx0aGlzLmNoYXJSZWNlaXZlZCl7dmFyIHI9dGhpcy5jaGFyUmVjZWl2ZWQsbj10aGlzLmNoYXJCdWZmZXIsaT10aGlzLmVuY29kaW5nO2UrPW4uc2xpY2UoMCxyKS50b1N0cmluZyhpKX1yZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xucmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9cig2MiksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNykoXCJ1bnNjb3BhYmxlc1wiKSxpPUFycmF5LnByb3RvdHlwZTt2b2lkIDA9PWlbbl0mJnIoMTQpKGksbix7fSksdC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lbbl1bdF09ITB9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzMyksaT1yKDE3Niksbz1yKDEyNSksYT1yKDMpLGY9cigxMCkscz1yKDE0MiksdT17fSxoPXt9LGU9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMsZCl7dmFyIGwscCxiLHYseT1kP2Z1bmN0aW9uKCl7cmV0dXJuIHR9OnModCksbT1uKHIsYyxlPzI6MSksZz0wO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGl0ZXJhYmxlIVwiKTtpZihvKHkpKXtmb3IobD1mKHQubGVuZ3RoKTtsPmc7ZysrKWlmKHY9ZT9tKGEocD10W2ddKVswXSxwWzFdKTptKHRbZ10pLHY9PT11fHx2PT09aClyZXR1cm4gdn1lbHNlIGZvcihiPXkuY2FsbCh0KTshKHA9Yi5uZXh0KCkpLmRvbmU7KWlmKHY9aShiLG0scC52YWx1ZSxlKSx2PT09dXx8dj09PWgpcmV0dXJuIHZ9O2UuQlJFQUs9dSxlLlJFVFVSTj1ofSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoOSkuZixpPXIoMTIpLG89cig3KShcInRvU3RyaW5nVGFnXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dCYmIWkodD1yP3Q6dC5wcm90b3R5cGUsbykmJm4odCxvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6ZX0pfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDI0KSxvPXIoNSksYT1yKDEzOCksZj1cIltcIithK1wiXVwiLHM9XCLigIvChVwiLHU9UmVnRXhwKFwiXlwiK2YrZitcIipcIiksaD1SZWdFeHAoZitmK1wiKiRcIiksYz1mdW5jdGlvbih0LGUscil7dmFyIGk9e30sZj1vKGZ1bmN0aW9uKCl7cmV0dXJuISFhW3RdKCl8fHNbdF0oKSE9c30pLHU9aVt0XT1mP2UoZCk6YVt0XTtyJiYoaVtyXT11KSxuKG4uUCtuLkYqZixcIlN0cmluZ1wiLGkpfSxkPWMudHJpbT1mdW5jdGlvbih0LGUpe3JldHVybiB0PVN0cmluZyhpKHQpKSwxJmUmJih0PXQucmVwbGFjZSh1LFwiXCIpKSwyJmUmJih0PXQucmVwbGFjZShoLFwiXCIpKSx0fTt0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3UuY2FsbCh0aGlzLFwiZGlnZXN0XCIpLHRoaXMuX2hhc2g9dCx0aGlzLmJ1ZmZlcnM9W119ZnVuY3Rpb24gaSh0KXt1LmNhbGwodGhpcyxcImRpZ2VzdFwiKSx0aGlzLl9oYXNoPXR9dmFyIG89cigyKSxhPXIoMTA1KSxmPXIoNTY3KSxzPXIoNTY4KSx1PXIoNTY2KTtvKG4sdSksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmJ1ZmZlcnMucHVzaCh0KX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5jb25jYXQodGhpcy5idWZmZXJzKSxyPXRoaXMuX2hhc2godCk7cmV0dXJuIHRoaXMuYnVmZmVycz1udWxsLHJ9LG8oaSx1KSxpLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX2hhc2gudXBkYXRlKHQpfSxpLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKX0sdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PXQudG9Mb3dlckNhc2UoKSxcIm1kNVwiPT09dD9uZXcgbihhKTpcInJtZDE2MFwiPT09dHx8XCJyaXBlbWQxNjBcIj09PXQ/bmV3IG4oZik6bmV3IGkocyh0KSl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscil7dGhpcy5fYmxvY2s9bmV3IGUodCksdGhpcy5fZmluYWxTaXplPXIsdGhpcy5fYmxvY2tTaXplPXQsdGhpcy5fbGVuPTAsdGhpcy5fcz0wfXIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LHIpe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYocj1yfHxcInV0ZjhcIix0PW5ldyBlKHQscikpO2Zvcih2YXIgbj10aGlzLl9sZW4rPXQubGVuZ3RoLGk9dGhpcy5fc3x8MCxvPTAsYT10aGlzLl9ibG9jaztpPG47KXtmb3IodmFyIGY9TWF0aC5taW4odC5sZW5ndGgsbyt0aGlzLl9ibG9ja1NpemUtaSV0aGlzLl9ibG9ja1NpemUpLHM9Zi1vLHU9MDt1PHM7dSsrKWFbaSV0aGlzLl9ibG9ja1NpemUrdV09dFt1K29dO2krPXMsbys9cyxpJXRoaXMuX2Jsb2NrU2l6ZT09PTAmJnRoaXMuX3VwZGF0ZShhKX1yZXR1cm4gdGhpcy5fcz1pLHRoaXN9LHIucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgZT04KnRoaXMuX2xlbjt0aGlzLl9ibG9ja1t0aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplXT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemUrMSksZSUoOCp0aGlzLl9ibG9ja1NpemUpPj04KnRoaXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5fYmxvY2suZmlsbCgwKSksdGhpcy5fYmxvY2sud3JpdGVJbnQzMkJFKGUsdGhpcy5fYmxvY2tTaXplLTQpO3ZhciByPXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayl8fHRoaXMuX2hhc2goKTtyZXR1cm4gdD9yLnRvU3RyaW5nKHQpOnJ9LHIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NcIil9LHQuZXhwb3J0cz1yfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlLHIsbil7ZnVuY3Rpb24gaSgpe3Rocm93IG5ldyBFcnJvcihcInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExXCIpfWZ1bmN0aW9uIG8odCxpKXtpZih0PjY1NTM2KXRocm93IG5ldyBFcnJvcihcInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXNcIik7dmFyIG89bmV3IGUuVWludDhBcnJheSh0KTt0PjAmJmEuZ2V0UmFuZG9tVmFsdWVzKG8pO3ZhciBmPW5ldyByKG8uYnVmZmVyKTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBpP24ubmV4dFRpY2soZnVuY3Rpb24oKXtpKG51bGwsZil9KTpmfXZhciBhPWUuY3J5cHRvfHxlLm1zQ3J5cHRvO2EmJmEuZ2V0UmFuZG9tVmFsdWVzP3QuZXhwb3J0cz1vOnQuZXhwb3J0cz1pfSkuY2FsbChlLHIoMzkpLHIoMSkuQnVmZmVyLHIoMjYpKX0sZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gaSh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7cih0aGlzLGUpO3ZhciBpPW4odGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuY2FsbCh0aGlzKSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwibWVzc2FnZVwiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTp2b2lkIDAhPT10P1N0cmluZyh0KTpcIlwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJuYW1lXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmkuY29uc3RydWN0b3IubmFtZX0pLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShpLGkuY29uc3RydWN0b3IpLGl9cmV0dXJuIGkoZSx0KSxlfShFcnJvcik7dC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cigxMTUpLGE9cig3NSksZj1yKDkwKSxzPXIoOTEpLHU9cigyMDEpLGg9cigxMTYpLGM9cigxNTkpLGQ9cigxMTMpLGw9L15jZjooWzEtOWEtZl1bMC05YS1mXXswLDN9fDApOlthLXpBLVowLTlfLV0qJC8scD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtuKHRoaXMsdCl9cmV0dXJuIGkodCxbe2tleTpcImdldFR5cGVJZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuVFlQRV9JRH19LHtrZXk6XCJnZXRCaXRtYXNrXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5GRUFUVVJFX0JJVE1BU0t9fSx7a2V5OlwiZ2V0Q29uZGl0aW9uXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYTtyZXR1cm4gdC5zZXRUeXBlSWQodGhpcy5nZXRUeXBlSWQoKSksdC5zZXRCaXRtYXNrKHRoaXMuZ2V0Qml0bWFzaygpKSx0LnNldEhhc2godGhpcy5nZW5lcmF0ZUhhc2goKSksdC5zZXRNYXhGdWxmaWxsbWVudExlbmd0aCh0aGlzLmNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoKCkpLHR9fSx7a2V5OlwiZ2V0Q29uZGl0aW9uVXJpXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDb25kaXRpb24oKS5zZXJpYWxpemVVcmkoKX19LHtrZXk6XCJnZXRDb25kaXRpb25CaW5hcnlcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldENvbmRpdGlvbigpLnNlcmlhbGl6ZUJpbmFyeSgpfX0se2tleTpcImdlbmVyYXRlSGFzaFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IGEgc3ViY2xhc3NcIil9fSx7a2V5OlwiY2FsY3VsYXRlTWF4RnVsZmlsbG1lbnRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBmO3JldHVybiB0aGlzLndyaXRlUGF5bG9hZCh0KSx0LmdldFNpemUoKX19LHtrZXk6XCJzZXJpYWxpemVVcmlcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblwiY2Y6XCIrdGhpcy5nZXRUeXBlSWQoKS50b1N0cmluZygxNikrXCI6XCIraC5lbmNvZGUodGhpcy5zZXJpYWxpemVQYXlsb2FkKCkpfX0se2tleTpcInNlcmlhbGl6ZUJpbmFyeVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHM7cmV0dXJuIHQud3JpdGVVSW50MTYodGhpcy5nZXRUeXBlSWQoKSksdC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMuc2VyaWFsaXplUGF5bG9hZCgpKSx0LmdldEJ1ZmZlcigpfX0se2tleTpcInNlcmlhbGl6ZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBzO3JldHVybiB0aGlzLndyaXRlUGF5bG9hZCh0KSx0LmdldEJ1ZmZlcigpfX0se2tleTpcInZhbGlkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9fV0sW3trZXk6XCJmcm9tVXJpXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQpcmV0dXJuIGU7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKFwiU2VyaWFsaXplZCBmdWxmaWxsbWVudCBtdXN0IGJlIGEgc3RyaW5nXCIpO3ZhciByPWUuc3BsaXQoXCI6XCIpO2lmKFwiY2ZcIiE9PXJbMF0pdGhyb3cgbmV3IGMoJ1NlcmlhbGl6ZWQgZnVsZmlsbG1lbnQgbXVzdCBzdGFydCB3aXRoIFwiY2Y6XCInKTtpZighdC5SRUdFWC5leGVjKGUpKXRocm93IG5ldyBkKFwiSW52YWxpZCBmdWxmaWxsbWVudCBmb3JtYXRcIik7dmFyIG49cGFyc2VJbnQoclsxXSwxNiksaT1oLmRlY29kZShyWzJdKSxhPW8uZ2V0Q2xhc3NGcm9tVHlwZUlkKG4pLGY9bmV3IGE7cmV0dXJuIGYucGFyc2VQYXlsb2FkKHUuZnJvbShpKSxpLmxlbmd0aCksZn19LHtrZXk6XCJmcm9tQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24odCl7dD11LmZyb20odCk7dmFyIGU9by5nZXRDbGFzc0Zyb21UeXBlSWQodC5yZWFkVUludDE2KCkpLHI9bmV3IGUsbj10LnJlYWRMZW5ndGhQcmVmaXgoKTtyZXR1cm4gci5wYXJzZVBheWxvYWQodCxuKSxyfX1dKSx0fSgpO3AuUkVHRVg9bCx0LmV4cG9ydHM9cH0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjMpLGk9cig3KShcInRvU3RyaW5nVGFnXCIpLG89XCJBcmd1bWVudHNcIj09bihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLGE9ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHRbZV19Y2F0Y2godCl7fX07dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsZjtyZXR1cm4gdm9pZCAwPT09dD9cIlVuZGVmaW5lZFwiOm51bGw9PT10P1wiTnVsbFwiOlwic3RyaW5nXCI9PXR5cGVvZihyPWEoZT1PYmplY3QodCksaSkpP3I6bz9uKGUpOlwiT2JqZWN0XCI9PShmPW4oZSkpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNhbGxlZT9cIkFyZ3VtZW50c1wiOmZ9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMyk7dC5leHBvcnRzPU9iamVjdChcInpcIikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVyblwiU3RyaW5nXCI9PW4odCk/dC5zcGxpdChcIlwiKTpPYmplY3QodCl9fSxmdW5jdGlvbih0LGUpe2UuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsci5sZW5ndGgpLGk9bmV3IGUobiksbz0wO288bjsrK28paVtvXT10W29dXnJbb107cmV0dXJuIGl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5SZXBvcnRlcj1yKDUzMikuUmVwb3J0ZXIsbi5EZWNvZGVyQnVmZmVyPXIoMjE0KS5EZWNvZGVyQnVmZmVyLG4uRW5jb2RlckJ1ZmZlcj1yKDIxNCkuRW5jb2RlckJ1ZmZlcixuLk5vZGU9cig1MzEpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxyLmxlbmd0aCksaT1uZXcgZShuKSxvPTA7bzxuOysrbylpW29dPXRbb11ecltvXTtyZXR1cm4gaX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiBvLmlzQk4odCk/dDoodGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsdm9pZChudWxsIT09dCYmKFwibGVcIiE9PWUmJlwiYmVcIiE9PWV8fChyPWUsZT0xMCksdGhpcy5faW5pdCh0fHwwLGV8fDEwLHJ8fFwiYmVcIikpKSl9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxpO28rKyl7dmFyIGE9dC5jaGFyQ29kZUF0KG8pLTQ4O248PD00LG58PWE+PTQ5JiZhPD01ND9hLTQ5KzEwOmE+PTE3JiZhPD0yMj9hLTE3KzEwOjE1JmF9cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPG87YSsrKXt2YXIgZj10LmNoYXJDb2RlQXQoYSktNDg7aSo9bixpKz1mPj00OT9mLTQ5KzEwOmY+PTE3P2YtMTcrMTA6Zn1yZXR1cm4gaX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfWZ1bmN0aW9uIHUodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxvPTB8ZS53b3Jkc1swXSxhPWkqbyxmPTY3MTA4ODYzJmEscz1hLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1mO2Zvcih2YXIgdT0xO3U8bjt1Kyspe2Zvcih2YXIgaD1zPj4+MjYsYz02NzEwODg2MyZzLGQ9TWF0aC5taW4odSxlLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsdS10Lmxlbmd0aCsxKTtsPD1kO2wrKyl7dmFyIHA9dS1sfDA7aT0wfHQud29yZHNbcF0sbz0wfGUud29yZHNbbF0sYT1pKm8rYyxoKz1hLzY3MTA4ODY0fDAsYz02NzEwODg2MyZhfXIud29yZHNbdV09MHxjLHM9MHxofXJldHVybiAwIT09cz9yLndvcmRzW3VdPTB8czpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBoKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsbz0wO288ci5sZW5ndGgtMTtvKyspe3ZhciBhPWk7aT0wO2Zvcih2YXIgZj02NzEwODg2MyZuLHM9TWF0aC5taW4obyxlLmxlbmd0aC0xKSx1PU1hdGgubWF4KDAsby10Lmxlbmd0aCsxKTt1PD1zO3UrKyl7dmFyIGg9by11LGM9MHx0LndvcmRzW2hdLGQ9MHxlLndvcmRzW3VdLGw9YypkLHA9NjcxMDg4NjMmbDthPWErKGwvNjcxMDg4NjR8MCl8MCxwPXArZnwwLGY9NjcxMDg4NjMmcCxhPWErKHA+Pj4yNil8MCxpKz1hPj4+MjYsYSY9NjcxMDg4NjN9ci53b3Jkc1tvXT1mLG49YSxhPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbb109bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1uZXcgZDtyZXR1cm4gbi5tdWxwKHQsZSxyKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZnVuY3Rpb24gbCh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgbyhlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgbygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gcCgpe2wuY2FsbCh0aGlzLFwiazI1NlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIil9ZnVuY3Rpb24gYigpe2wuY2FsbCh0aGlzLFwicDIyNFwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIil9ZnVuY3Rpb24gdigpe2wuY2FsbCh0aGlzLFwicDE5MlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIil9ZnVuY3Rpb24geSgpe2wuY2FsbCh0aGlzLFwiMjU1MTlcIixcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIil9ZnVuY3Rpb24gbSh0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9by5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLFwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxXCIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBnKHQpe20uY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBvKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVwib2JqZWN0XCI9PXR5cGVvZiB0P3QuZXhwb3J0cz1vOmUuQk49byxvLkJOPW8sby53b3JkU2l6ZT0yNjt2YXIgdzt0cnl7dz1yKDEpLkJ1ZmZlcn1jYXRjaCh0KXt9by5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygb3x8bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09by53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sby5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LG8ubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpO1wiaGV4XCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KSx0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIik7dmFyIGk9MDtcIi1cIj09PXRbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLFwiLVwiPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIG8sYSxmPTA7aWYoXCJiZVwiPT09cilmb3IoaT10Lmxlbmd0aC0xLG89MDtpPj0wO2ktPTMpYT10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtlbHNlIGlmKFwibGVcIj09PXIpZm9yKGk9MCxvPTA7aTx0Lmxlbmd0aDtpKz0zKWE9dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksbz0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPWEodCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMsbys9MjQsbz49MjYmJihvLT0yNixuKyspO3IrNiE9PWUmJihpPWEodCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBvPXQubGVuZ3RoLXIsYT1vJW4scz1NYXRoLm1pbihvLG8tYSkrcix1PTAsaD1yO2g8cztoKz1uKXU9Zih0LGgsaCtuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PWEpe3ZhciBjPTE7Zm9yKHU9Zih0LGgsdC5sZW5ndGgsZSksaD0wO2g8YTtoKyspYyo9ZTt0aGlzLmltdWxuKGMpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0sby5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LG8ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sby5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIF89W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLE09WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sUz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe3Q9dHx8MTAsZT0wfGV8fDE7dmFyIHI7aWYoMTY9PT10fHxcImhleFwiPT09dCl7cj1cIlwiO2Zvcih2YXIgaT0wLG89MCxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPXRoaXMud29yZHNbYV0scz0oMTY3NzcyMTUmKGY8PGl8bykpLnRvU3RyaW5nKDE2KTtvPWY+Pj4yNC1pJjE2Nzc3MjE1LHI9MCE9PW98fGEhPT10aGlzLmxlbmd0aC0xP19bNi1zLmxlbmd0aF0rcytyOnMrcixpKz0yLGk+PTI2JiYoaS09MjYsYS0tKX1mb3IoMCE9PW8mJihyPW8udG9TdHJpbmcoMTYpK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciB1PU1bdF0saD1TW3RdO3I9XCJcIjt2YXIgYz10aGlzLmNsb25lKCk7Zm9yKGMubmVnYXRpdmU9MDshYy5pc1plcm8oKTspe3ZhciBkPWMubW9kbihoKS50b1N0cmluZyh0KTtjPWMuaWRpdm4oaCkscj1jLmlzWmVybygpP2QrcjpfW3UtZC5sZW5ndGhdK2Qrcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9bighMSxcIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzZcIil9LG8ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSxcIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0c1wiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LG8ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHcpLHRoaXMudG9BcnJheUxpa2Uodyx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sby5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLG89cnx8TWF0aC5tYXgoMSxpKTtuKGk8PW8sXCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoXCIpLG4obz4wLFwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwXCIpLHRoaXMuc3RyaXAoKTt2YXIgYSxmLHM9XCJsZVwiPT09ZSx1PW5ldyB0KG8pLGg9dGhpcy5jbG9uZSgpO2lmKHMpe2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbZl09YTtmb3IoO2Y8bztmKyspdVtmXT0wfWVsc2V7Zm9yKGY9MDtmPG8taTtmKyspdVtmXT0wO2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbby1mLTFdPWF9cmV0dXJuIHV9LE1hdGguY2x6MzI/by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LG8ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PT0oMSZlKSYmcisrLHJ9LG8ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxvLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sby5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sby5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LG8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxvLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxvLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LG8ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LG8ucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LG8ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1YW5kKHQpfSxvLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxvLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodCk6dC5jbG9uZSgpLml1YW5kKHRoaXMpfSxvLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LG8ucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LG8ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LG8ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sby5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLGU/dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt2YXIgcixuO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsbz0wO288bi5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkrKDB8bi53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmbzxyLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LG8ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByPXRoaXMuY21wKHQpO2lmKDA9PT1yKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt2YXIgbixpO3I+MD8obj10aGlzLGk9dCk6KG49dCxpPXRoaXMpO2Zvcih2YXIgbz0wLGE9MDthPGkubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pLSgwfGkud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7Zm9yKDswIT09byYmYTxuLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2lmKDA9PT1vJiZhPG4ubGVuZ3RoJiZuIT09dGhpcylmb3IoO2E8bi5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09bi53b3Jkc1thXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYSksbiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxhPXQud29yZHMsZj1lLndvcmRzLHM9ci53b3Jkcyx1PTAsaD0wfGFbMF0sYz04MTkxJmgsZD1oPj4+MTMsbD0wfGFbMV0scD04MTkxJmwsYj1sPj4+MTMsdj0wfGFbMl0seT04MTkxJnYsbT12Pj4+MTMsZz0wfGFbM10sdz04MTkxJmcsXz1nPj4+MTMsTT0wfGFbNF0sUz04MTkxJk0sRT1NPj4+MTMsQT0wfGFbNV0saz04MTkxJkEseD1BPj4+MTMsST0wfGFbNl0sQj04MTkxJkksTz1JPj4+MTMsUj0wfGFbN10sUD04MTkxJlIsVD1SPj4+MTMsaj0wfGFbOF0sQz04MTkxJmosTj1qPj4+MTMsTD0wfGFbOV0sVT04MTkxJkwsej1MPj4+MTMsRD0wfGZbMF0scT04MTkxJkQsRj1EPj4+MTMsSz0wfGZbMV0sRz04MTkxJkssVj1LPj4+MTMsSD0wfGZbMl0sWD04MTkxJkgsWT1IPj4+MTMsVz0wfGZbM10sWj04MTkxJlcsSj1XPj4+MTMsJD0wfGZbNF0sUT04MTkxJiQsdHQ9JD4+PjEzLGV0PTB8Zls1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxmWzZdLG90PTgxOTEmaXQsYXQ9aXQ+Pj4xMyxmdD0wfGZbN10sc3Q9ODE5MSZmdCx1dD1mdD4+PjEzLGh0PTB8Zls4XSxjdD04MTkxJmh0LGR0PWh0Pj4+MTMsbHQ9MHxmWzldLHB0PTgxOTEmbHQsYnQ9bHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOSxuPU1hdGguaW11bChjLHEpLGk9TWF0aC5pbXVsKGMsRiksaT1pK01hdGguaW11bChkLHEpfDAsbz1NYXRoLmltdWwoZCxGKTt2YXIgdnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHZ0Pj4+MjYpfDAsdnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHAscSksaT1NYXRoLmltdWwocCxGKSxpPWkrTWF0aC5pbXVsKGIscSl8MCxvPU1hdGguaW11bChiLEYpLG49bitNYXRoLmltdWwoYyxHKXwwLGk9aStNYXRoLmltdWwoYyxWKXwwLGk9aStNYXRoLmltdWwoZCxHKXwwLG89bytNYXRoLmltdWwoZCxWKXwwO3ZhciB5dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeSxxKSxpPU1hdGguaW11bCh5LEYpLGk9aStNYXRoLmltdWwobSxxKXwwLG89TWF0aC5pbXVsKG0sRiksbj1uK01hdGguaW11bChwLEcpfDAsaT1pK01hdGguaW11bChwLFYpfDAsaT1pK01hdGguaW11bChiLEcpfDAsbz1vK01hdGguaW11bChiLFYpfDAsbj1uK01hdGguaW11bChjLFgpfDAsaT1pK01hdGguaW11bChjLFkpfDAsaT1pK01hdGguaW11bChkLFgpfDAsbz1vK01hdGguaW11bChkLFkpfDA7dmFyIG10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhtdD4+PjI2KXwwLG10Jj02NzEwODg2MyxuPU1hdGguaW11bCh3LHEpLGk9TWF0aC5pbXVsKHcsRiksaT1pK01hdGguaW11bChfLHEpfDAsbz1NYXRoLmltdWwoXyxGKSxuPW4rTWF0aC5pbXVsKHksRyl8MCxpPWkrTWF0aC5pbXVsKHksVil8MCxpPWkrTWF0aC5pbXVsKG0sRyl8MCxvPW8rTWF0aC5pbXVsKG0sVil8MCxuPW4rTWF0aC5pbXVsKHAsWCl8MCxpPWkrTWF0aC5pbXVsKHAsWSl8MCxpPWkrTWF0aC5pbXVsKGIsWCl8MCxvPW8rTWF0aC5pbXVsKGIsWSl8MCxuPW4rTWF0aC5pbXVsKGMsWil8MCxpPWkrTWF0aC5pbXVsKGMsSil8MCxpPWkrTWF0aC5pbXVsKGQsWil8MCxvPW8rTWF0aC5pbXVsKGQsSil8MDt2YXIgZ3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGd0Pj4+MjYpfDAsZ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFMscSksaT1NYXRoLmltdWwoUyxGKSxpPWkrTWF0aC5pbXVsKEUscSl8MCxvPU1hdGguaW11bChFLEYpLG49bitNYXRoLmltdWwodyxHKXwwLGk9aStNYXRoLmltdWwodyxWKXwwLGk9aStNYXRoLmltdWwoXyxHKXwwLG89bytNYXRoLmltdWwoXyxWKXwwLG49bitNYXRoLmltdWwoeSxYKXwwLGk9aStNYXRoLmltdWwoeSxZKXwwLGk9aStNYXRoLmltdWwobSxYKXwwLG89bytNYXRoLmltdWwobSxZKXwwLG49bitNYXRoLmltdWwocCxaKXwwLGk9aStNYXRoLmltdWwocCxKKXwwLGk9aStNYXRoLmltdWwoYixaKXwwLG89bytNYXRoLmltdWwoYixKKXwwLG49bitNYXRoLmltdWwoYyxRKXwwLGk9aStNYXRoLmltdWwoYyx0dCl8MCxpPWkrTWF0aC5pbXVsKGQsUSl8MCxvPW8rTWF0aC5pbXVsKGQsdHQpfDA7dmFyIHd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChrLHEpLGk9TWF0aC5pbXVsKGssRiksaT1pK01hdGguaW11bCh4LHEpfDAsbz1NYXRoLmltdWwoeCxGKSxuPW4rTWF0aC5pbXVsKFMsRyl8MCxpPWkrTWF0aC5pbXVsKFMsVil8MCxpPWkrTWF0aC5pbXVsKEUsRyl8MCxvPW8rTWF0aC5pbXVsKEUsVil8MCxuPW4rTWF0aC5pbXVsKHcsWCl8MCxpPWkrTWF0aC5pbXVsKHcsWSl8MCxpPWkrTWF0aC5pbXVsKF8sWCl8MCxvPW8rTWF0aC5pbXVsKF8sWSl8MCxuPW4rTWF0aC5pbXVsKHksWil8MCxpPWkrTWF0aC5pbXVsKHksSil8MCxpPWkrTWF0aC5pbXVsKG0sWil8MCxvPW8rTWF0aC5pbXVsKG0sSil8MCxuPW4rTWF0aC5pbXVsKHAsUSl8MCxpPWkrTWF0aC5pbXVsKHAsdHQpfDAsaT1pK01hdGguaW11bChiLFEpfDAsbz1vK01hdGguaW11bChiLHR0KXwwLG49bitNYXRoLmltdWwoYyxydCl8MCxpPWkrTWF0aC5pbXVsKGMsbnQpfDAsaT1pK01hdGguaW11bChkLHJ0KXwwLG89bytNYXRoLmltdWwoZCxudCl8MDt2YXIgX3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscSksaT1NYXRoLmltdWwoQixGKSxpPWkrTWF0aC5pbXVsKE8scSl8MCxvPU1hdGguaW11bChPLEYpLG49bitNYXRoLmltdWwoayxHKXwwLGk9aStNYXRoLmltdWwoayxWKXwwLGk9aStNYXRoLmltdWwoeCxHKXwwLG89bytNYXRoLmltdWwoeCxWKXwwLG49bitNYXRoLmltdWwoUyxYKXwwLGk9aStNYXRoLmltdWwoUyxZKXwwLGk9aStNYXRoLmltdWwoRSxYKXwwLG89bytNYXRoLmltdWwoRSxZKXwwLG49bitNYXRoLmltdWwodyxaKXwwLGk9aStNYXRoLmltdWwodyxKKXwwLGk9aStNYXRoLmltdWwoXyxaKXwwLG89bytNYXRoLmltdWwoXyxKKXwwLG49bitNYXRoLmltdWwoeSxRKXwwLGk9aStNYXRoLmltdWwoeSx0dCl8MCxpPWkrTWF0aC5pbXVsKG0sUSl8MCxvPW8rTWF0aC5pbXVsKG0sdHQpfDAsbj1uK01hdGguaW11bChwLHJ0KXwwLGk9aStNYXRoLmltdWwocCxudCl8MCxpPWkrTWF0aC5pbXVsKGIscnQpfDAsbz1vK01hdGguaW11bChiLG50KXwwLG49bitNYXRoLmltdWwoYyxvdCl8MCxpPWkrTWF0aC5pbXVsKGMsYXQpfDAsaT1pK01hdGguaW11bChkLG90KXwwLG89bytNYXRoLmltdWwoZCxhdCl8MDt2YXIgTXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFAscSksaT1NYXRoLmltdWwoUCxGKSxpPWkrTWF0aC5pbXVsKFQscSl8MCxvPU1hdGguaW11bChULEYpLG49bitNYXRoLmltdWwoQixHKXwwLGk9aStNYXRoLmltdWwoQixWKXwwLGk9aStNYXRoLmltdWwoTyxHKXwwLG89bytNYXRoLmltdWwoTyxWKXwwLG49bitNYXRoLmltdWwoayxYKXwwLGk9aStNYXRoLmltdWwoayxZKXwwLGk9aStNYXRoLmltdWwoeCxYKXwwLG89bytNYXRoLmltdWwoeCxZKXwwLG49bitNYXRoLmltdWwoUyxaKXwwLGk9aStNYXRoLmltdWwoUyxKKXwwLGk9aStNYXRoLmltdWwoRSxaKXwwLG89bytNYXRoLmltdWwoRSxKKXwwLG49bitNYXRoLmltdWwodyxRKXwwLGk9aStNYXRoLmltdWwodyx0dCl8MCxpPWkrTWF0aC5pbXVsKF8sUSl8MCxvPW8rTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bCh5LHJ0KXwwLGk9aStNYXRoLmltdWwoeSxudCl8MCxpPWkrTWF0aC5pbXVsKG0scnQpfDAsbz1vK01hdGguaW11bChtLG50KXwwLG49bitNYXRoLmltdWwocCxvdCl8MCxpPWkrTWF0aC5pbXVsKHAsYXQpfDAsaT1pK01hdGguaW11bChiLG90KXwwLG89bytNYXRoLmltdWwoYixhdCl8MCxuPW4rTWF0aC5pbXVsKGMsc3QpfDAsaT1pK01hdGguaW11bChjLHV0KXwwLGk9aStNYXRoLmltdWwoZCxzdCl8MCxvPW8rTWF0aC5pbXVsKGQsdXQpfDA7dmFyIFN0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChDLHEpLGk9TWF0aC5pbXVsKEMsRiksaT1pK01hdGguaW11bChOLHEpfDAsbz1NYXRoLmltdWwoTixGKSxuPW4rTWF0aC5pbXVsKFAsRyl8MCxpPWkrTWF0aC5pbXVsKFAsVil8MCxpPWkrTWF0aC5pbXVsKFQsRyl8MCxvPW8rTWF0aC5pbXVsKFQsVil8MCxuPW4rTWF0aC5pbXVsKEIsWCl8MCxpPWkrTWF0aC5pbXVsKEIsWSl8MCxpPWkrTWF0aC5pbXVsKE8sWCl8MCxvPW8rTWF0aC5pbXVsKE8sWSl8MCxuPW4rTWF0aC5pbXVsKGssWil8MCxpPWkrTWF0aC5pbXVsKGssSil8MCxpPWkrTWF0aC5pbXVsKHgsWil8MCxvPW8rTWF0aC5pbXVsKHgsSil8MCxuPW4rTWF0aC5pbXVsKFMsUSl8MCxpPWkrTWF0aC5pbXVsKFMsdHQpfDAsaT1pK01hdGguaW11bChFLFEpfDAsbz1vK01hdGguaW11bChFLHR0KXwwLG49bitNYXRoLmltdWwodyxydCl8MCxpPWkrTWF0aC5pbXVsKHcsbnQpfDAsaT1pK01hdGguaW11bChfLHJ0KXwwLG89bytNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKHksb3QpfDAsaT1pK01hdGguaW11bCh5LGF0KXwwLGk9aStNYXRoLmltdWwobSxvdCl8MCxvPW8rTWF0aC5pbXVsKG0sYXQpfDAsbj1uK01hdGguaW11bChwLHN0KXwwLGk9aStNYXRoLmltdWwocCx1dCl8MCxpPWkrTWF0aC5pbXVsKGIsc3QpfDAsbz1vK01hdGguaW11bChiLHV0KXwwLG49bitNYXRoLmltdWwoYyxjdCl8MCxpPWkrTWF0aC5pbXVsKGMsZHQpfDAsaT1pK01hdGguaW11bChkLGN0KXwwLG89bytNYXRoLmltdWwoZCxkdCl8MDt2YXIgRXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscSksaT1NYXRoLmltdWwoVSxGKSxpPWkrTWF0aC5pbXVsKHoscSl8MCxvPU1hdGguaW11bCh6LEYpLG49bitNYXRoLmltdWwoQyxHKXwwLGk9aStNYXRoLmltdWwoQyxWKXwwLGk9aStNYXRoLmltdWwoTixHKXwwLG89bytNYXRoLmltdWwoTixWKXwwLG49bitNYXRoLmltdWwoUCxYKXwwLGk9aStNYXRoLmltdWwoUCxZKXwwLGk9aStNYXRoLmltdWwoVCxYKXwwLG89bytNYXRoLmltdWwoVCxZKXwwLG49bitNYXRoLmltdWwoQixaKXwwLGk9aStNYXRoLmltdWwoQixKKXwwLGk9aStNYXRoLmltdWwoTyxaKXwwLG89bytNYXRoLmltdWwoTyxKKXwwLG49bitNYXRoLmltdWwoayxRKXwwLGk9aStNYXRoLmltdWwoayx0dCl8MCxpPWkrTWF0aC5pbXVsKHgsUSl8MCxvPW8rTWF0aC5pbXVsKHgsdHQpfDAsbj1uK01hdGguaW11bChTLHJ0KXwwLGk9aStNYXRoLmltdWwoUyxudCl8MCxpPWkrTWF0aC5pbXVsKEUscnQpfDAsbz1vK01hdGguaW11bChFLG50KXwwLG49bitNYXRoLmltdWwodyxvdCl8MCxpPWkrTWF0aC5pbXVsKHcsYXQpfDAsaT1pK01hdGguaW11bChfLG90KXwwLG89bytNYXRoLmltdWwoXyxhdCl8MCxuPW4rTWF0aC5pbXVsKHksc3QpfDAsaT1pK01hdGguaW11bCh5LHV0KXwwLGk9aStNYXRoLmltdWwobSxzdCl8MCxvPW8rTWF0aC5pbXVsKG0sdXQpfDAsbj1uK01hdGguaW11bChwLGN0KXwwLGk9aStNYXRoLmltdWwocCxkdCl8MCxpPWkrTWF0aC5pbXVsKGIsY3QpfDAsbz1vK01hdGguaW11bChiLGR0KXwwLG49bitNYXRoLmltdWwoYyxwdCl8MCxpPWkrTWF0aC5pbXVsKGMsYnQpfDAsaT1pK01hdGguaW11bChkLHB0KXwwLG89bytNYXRoLmltdWwoZCxidCl8MDt2YXIgQXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsRyksaT1NYXRoLmltdWwoVSxWKSxpPWkrTWF0aC5pbXVsKHosRyl8MCxvPU1hdGguaW11bCh6LFYpLG49bitNYXRoLmltdWwoQyxYKXwwLGk9aStNYXRoLmltdWwoQyxZKXwwLGk9aStNYXRoLmltdWwoTixYKXwwLG89bytNYXRoLmltdWwoTixZKXwwLG49bitNYXRoLmltdWwoUCxaKXwwLGk9aStNYXRoLmltdWwoUCxKKXwwLGk9aStNYXRoLmltdWwoVCxaKXwwLG89bytNYXRoLmltdWwoVCxKKXwwLG49bitNYXRoLmltdWwoQixRKXwwLGk9aStNYXRoLmltdWwoQix0dCl8MCxpPWkrTWF0aC5pbXVsKE8sUSl8MCxvPW8rTWF0aC5pbXVsKE8sdHQpfDAsbj1uK01hdGguaW11bChrLHJ0KXwwLGk9aStNYXRoLmltdWwoayxudCl8MCxpPWkrTWF0aC5pbXVsKHgscnQpfDAsbz1vK01hdGguaW11bCh4LG50KXwwLG49bitNYXRoLmltdWwoUyxvdCl8MCxpPWkrTWF0aC5pbXVsKFMsYXQpfDAsaT1pK01hdGguaW11bChFLG90KXwwLG89bytNYXRoLmltdWwoRSxhdCl8MCxuPW4rTWF0aC5pbXVsKHcsc3QpfDAsaT1pK01hdGguaW11bCh3LHV0KXwwLGk9aStNYXRoLmltdWwoXyxzdCl8MCxvPW8rTWF0aC5pbXVsKF8sdXQpfDAsbj1uK01hdGguaW11bCh5LGN0KXwwLGk9aStNYXRoLmltdWwoeSxkdCl8MCxpPWkrTWF0aC5pbXVsKG0sY3QpfDAsbz1vK01hdGguaW11bChtLGR0KXwwLG49bitNYXRoLmltdWwocCxwdCl8MCxpPWkrTWF0aC5pbXVsKHAsYnQpfDAsaT1pK01hdGguaW11bChiLHB0KXwwLG89bytNYXRoLmltdWwoYixidCl8MDt2YXIga3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWCksaT1NYXRoLmltdWwoVSxZKSxpPWkrTWF0aC5pbXVsKHosWCl8MCxvPU1hdGguaW11bCh6LFkpLG49bitNYXRoLmltdWwoQyxaKXwwLGk9aStNYXRoLmltdWwoQyxKKXwwLGk9aStNYXRoLmltdWwoTixaKXwwLG89bytNYXRoLmltdWwoTixKKXwwLG49bitNYXRoLmltdWwoUCxRKXwwLGk9aStNYXRoLmltdWwoUCx0dCl8MCxpPWkrTWF0aC5pbXVsKFQsUSl8MCxvPW8rTWF0aC5pbXVsKFQsdHQpfDAsbj1uK01hdGguaW11bChCLHJ0KXwwLGk9aStNYXRoLmltdWwoQixudCl8MCxpPWkrTWF0aC5pbXVsKE8scnQpfDAsbz1vK01hdGguaW11bChPLG50KXwwLG49bitNYXRoLmltdWwoayxvdCl8MCxpPWkrTWF0aC5pbXVsKGssYXQpfDAsaT1pK01hdGguaW11bCh4LG90KXwwLG89bytNYXRoLmltdWwoeCxhdCl8MCxuPW4rTWF0aC5pbXVsKFMsc3QpfDAsaT1pK01hdGguaW11bChTLHV0KXwwLGk9aStNYXRoLmltdWwoRSxzdCl8MCxvPW8rTWF0aC5pbXVsKEUsdXQpfDAsbj1uK01hdGguaW11bCh3LGN0KXwwLGk9aStNYXRoLmltdWwodyxkdCl8MCxpPWkrTWF0aC5pbXVsKF8sY3QpfDAsbz1vK01hdGguaW11bChfLGR0KXwwLG49bitNYXRoLmltdWwoeSxwdCl8MCxpPWkrTWF0aC5pbXVsKHksYnQpfDAsaT1pK01hdGguaW11bChtLHB0KXwwLG89bytNYXRoLmltdWwobSxidCl8MDt2YXIgeHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWiksaT1NYXRoLmltdWwoVSxKKSxpPWkrTWF0aC5pbXVsKHosWil8MCxvPU1hdGguaW11bCh6LEopLG49bitNYXRoLmltdWwoQyxRKXwwLGk9aStNYXRoLmltdWwoQyx0dCl8MCxpPWkrTWF0aC5pbXVsKE4sUSl8MCxvPW8rTWF0aC5pbXVsKE4sdHQpfDAsbj1uK01hdGguaW11bChQLHJ0KXwwLGk9aStNYXRoLmltdWwoUCxudCl8MCxpPWkrTWF0aC5pbXVsKFQscnQpfDAsbz1vK01hdGguaW11bChULG50KXwwLG49bitNYXRoLmltdWwoQixvdCl8MCxpPWkrTWF0aC5pbXVsKEIsYXQpfDAsaT1pK01hdGguaW11bChPLG90KXwwLG89bytNYXRoLmltdWwoTyxhdCl8MCxuPW4rTWF0aC5pbXVsKGssc3QpfDAsaT1pK01hdGguaW11bChrLHV0KXwwLGk9aStNYXRoLmltdWwoeCxzdCl8MCxvPW8rTWF0aC5pbXVsKHgsdXQpfDAsbj1uK01hdGguaW11bChTLGN0KXwwLGk9aStNYXRoLmltdWwoUyxkdCl8MCxpPWkrTWF0aC5pbXVsKEUsY3QpfDAsbz1vK01hdGguaW11bChFLGR0KXwwLG49bitNYXRoLmltdWwodyxwdCl8MCxpPWkrTWF0aC5pbXVsKHcsYnQpfDAsaT1pK01hdGguaW11bChfLHB0KXwwLG89bytNYXRoLmltdWwoXyxidCl8MDt2YXIgSXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsUSksaT1NYXRoLmltdWwoVSx0dCksaT1pK01hdGguaW11bCh6LFEpfDAsbz1NYXRoLmltdWwoeix0dCksbj1uK01hdGguaW11bChDLHJ0KXwwLGk9aStNYXRoLmltdWwoQyxudCl8MCxpPWkrTWF0aC5pbXVsKE4scnQpfDAsbz1vK01hdGguaW11bChOLG50KXwwLG49bitNYXRoLmltdWwoUCxvdCl8MCxpPWkrTWF0aC5pbXVsKFAsYXQpfDAsaT1pK01hdGguaW11bChULG90KXwwLG89bytNYXRoLmltdWwoVCxhdCl8MCxuPW4rTWF0aC5pbXVsKEIsc3QpfDAsaT1pK01hdGguaW11bChCLHV0KXwwLGk9aStNYXRoLmltdWwoTyxzdCl8MCxvPW8rTWF0aC5pbXVsKE8sdXQpfDAsbj1uK01hdGguaW11bChrLGN0KXwwLGk9aStNYXRoLmltdWwoayxkdCl8MCxpPWkrTWF0aC5pbXVsKHgsY3QpfDAsbz1vK01hdGguaW11bCh4LGR0KXwwLG49bitNYXRoLmltdWwoUyxwdCl8MCxpPWkrTWF0aC5pbXVsKFMsYnQpfDAsaT1pK01hdGguaW11bChFLHB0KXwwLG89bytNYXRoLmltdWwoRSxidCl8MDt2YXIgQnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEJ0Pj4+MjYpfDAsQnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscnQpLGk9TWF0aC5pbXVsKFUsbnQpLGk9aStNYXRoLmltdWwoeixydCl8MCxvPU1hdGguaW11bCh6LG50KSxuPW4rTWF0aC5pbXVsKEMsb3QpfDAsaT1pK01hdGguaW11bChDLGF0KXwwLGk9aStNYXRoLmltdWwoTixvdCl8MCxvPW8rTWF0aC5pbXVsKE4sYXQpfDAsbj1uK01hdGguaW11bChQLHN0KXwwLGk9aStNYXRoLmltdWwoUCx1dCl8MCxpPWkrTWF0aC5pbXVsKFQsc3QpfDAsbz1vK01hdGguaW11bChULHV0KXwwLG49bitNYXRoLmltdWwoQixjdCl8MCxpPWkrTWF0aC5pbXVsKEIsZHQpfDAsaT1pK01hdGguaW11bChPLGN0KXwwLG89bytNYXRoLmltdWwoTyxkdCl8MCxuPW4rTWF0aC5pbXVsKGsscHQpfDAsaT1pK01hdGguaW11bChrLGJ0KXwwLGk9aStNYXRoLmltdWwoeCxwdCl8MCxvPW8rTWF0aC5pbXVsKHgsYnQpfDA7dmFyIE90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxuPU1hdGguaW11bChVLG90KSxpPU1hdGguaW11bChVLGF0KSxpPWkrTWF0aC5pbXVsKHosb3QpfDAsbz1NYXRoLmltdWwoeixhdCksbj1uK01hdGguaW11bChDLHN0KXwwLGk9aStNYXRoLmltdWwoQyx1dCl8MCxpPWkrTWF0aC5pbXVsKE4sc3QpfDAsbz1vK01hdGguaW11bChOLHV0KXwwLG49bitNYXRoLmltdWwoUCxjdCl8MCxpPWkrTWF0aC5pbXVsKFAsZHQpfDAsaT1pK01hdGguaW11bChULGN0KXwwLG89bytNYXRoLmltdWwoVCxkdCl8MCxuPW4rTWF0aC5pbXVsKEIscHQpfDAsaT1pK01hdGguaW11bChCLGJ0KXwwLGk9aStNYXRoLmltdWwoTyxwdCl8MCxvPW8rTWF0aC5pbXVsKE8sYnQpfDA7dmFyIFJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhSdD4+PjI2KXwwLFJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHN0KSxpPU1hdGguaW11bChVLHV0KSxpPWkrTWF0aC5pbXVsKHosc3QpfDAsbz1NYXRoLmltdWwoeix1dCksbj1uK01hdGguaW11bChDLGN0KXwwLGk9aStNYXRoLmltdWwoQyxkdCl8MCxpPWkrTWF0aC5pbXVsKE4sY3QpfDAsbz1vK01hdGguaW11bChOLGR0KXwwLG49bitNYXRoLmltdWwoUCxwdCl8MCxpPWkrTWF0aC5pbXVsKFAsYnQpfDAsaT1pK01hdGguaW11bChULHB0KXwwLG89bytNYXRoLmltdWwoVCxidCl8MDt2YXIgUHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsY3QpLGk9TWF0aC5pbXVsKFUsZHQpLGk9aStNYXRoLmltdWwoeixjdCl8MCxvPU1hdGguaW11bCh6LGR0KSxuPW4rTWF0aC5pbXVsKEMscHQpfDAsaT1pK01hdGguaW11bChDLGJ0KXwwLGk9aStNYXRoLmltdWwoTixwdCl8MCxvPW8rTWF0aC5pbXVsKE4sYnQpfDA7dmFyIFR0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHB0KSxpPU1hdGguaW11bChVLGJ0KSxpPWkrTWF0aC5pbXVsKHoscHQpfDAsbz1NYXRoLmltdWwoeixidCk7dmFyIGp0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDtyZXR1cm4gdT0obysoaT4+PjEzKXwwKSsoanQ+Pj4yNil8MCxqdCY9NjcxMDg4NjMsc1swXT12dCxzWzFdPXl0LHNbMl09bXQsc1szXT1ndCxzWzRdPXd0LHNbNV09X3Qsc1s2XT1NdCxzWzddPVN0LHNbOF09RXQsc1s5XT1BdCxzWzEwXT1rdCxzWzExXT14dCxzWzEyXT1JdCxzWzEzXT1CdCxzWzE0XT1PdCxzWzE1XT1SdCxzWzE2XT1QdCxzWzE3XT1UdCxzWzE4XT1qdCwwIT09dSYmKHNbMTldPXUsci5sZW5ndGgrKykscn07TWF0aC5pbXVsfHwoRT11KSxvLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIHI9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT10Lmxlbmd0aD9FKHRoaXMsdCxlKTpuPDYzP3UodGhpcyx0LGUpOm48MTAyND9oKHRoaXMsdCxlKTpjKHRoaXMsdCxlKX0sZC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9by5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxkLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sXG5kLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXtmb3IodmFyIGE9MDthPG87YSsrKW5bYV09ZVt0W2FdXSxpW2FdPXJbdFthXV19LGQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUscixuLGksbyl7dGhpcy5wZXJtdXRlKG8sdCxlLHIsbixpKTtmb3IodmFyIGE9MTthPGk7YTw8PTEpZm9yKHZhciBmPWE8PDEscz1NYXRoLmNvcygyKk1hdGguUEkvZiksdT1NYXRoLnNpbigyKk1hdGguUEkvZiksaD0wO2g8aTtoKz1mKWZvcih2YXIgYz1zLGQ9dSxsPTA7bDxhO2wrKyl7dmFyIHA9cltoK2xdLGI9bltoK2xdLHY9cltoK2wrYV0seT1uW2grbCthXSxtPWMqdi1kKnk7eT1jKnkrZCp2LHY9bSxyW2grbF09cCt2LG5baCtsXT1iK3kscltoK2wrYV09cC12LG5baCtsK2FdPWIteSxsIT09ZiYmKG09cypjLXUqZCxkPXMqZCt1KmMsYz1tKX19LGQucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MXxNYXRoLm1heChlLHQpLG49MSZyLGk9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStufSxkLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgaT10W25dO3Rbbl09dFtyLW4tMV0sdFtyLW4tMV09aSxpPWVbbl0sZVtuXT0tZVtyLW4tMV0sZVtyLW4tMV09LWl9fSxkLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTA7bjxlLzI7bisrKXt2YXIgaT04MTkyKk1hdGgucm91bmQodFsyKm4rMV0vZSkrTWF0aC5yb3VuZCh0WzIqbl0vZSkrcjt0W25dPTY3MTA4ODYzJmkscj1pPDY3MTA4ODY0PzA6aS82NzEwODg2NHwwfXJldHVybiB0fSxkLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgbz0wLGE9MDthPGU7YSsrKW8rPTB8dFthXSxyWzIqYV09ODE5MSZvLG8+Pj49MTMsclsyKmErMV09ODE5MSZvLG8+Pj49MTM7Zm9yKGE9MiplO2E8aTsrK2EpclthXT0wO24oMD09PW8pLG4oMD09PShvJi04MTkyKSl9LGQucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGQucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksbz10aGlzLnN0dWIobiksYT1uZXcgQXJyYXkobiksZj1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksaD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksZD1yLndvcmRzO2QubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsYSxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCx1LG4pLHRoaXMudHJhbnNmb3JtKGEsbyxmLHMsbixpKSx0aGlzLnRyYW5zZm9ybSh1LG8saCxjLG4saSk7Zm9yKHZhciBsPTA7bDxuO2wrKyl7dmFyIHA9ZltsXSpoW2xdLXNbbF0qY1tsXTtzW2xdPWZbbF0qY1tsXStzW2xdKmhbbF0sZltsXT1wfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShmLHMsbiksdGhpcy50cmFuc2Zvcm0oZixzLGQsbyxuLGkpLHRoaXMuY29uanVnYXRlKGQsbyxuKSx0aGlzLm5vcm1hbGl6ZTEzYihkLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sby5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxvLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksYyh0aGlzLHQsZSl9LG8ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxvLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxvPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1vPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZvfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LG8ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sby5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sby5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPXModCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgbygxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxvLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsbz02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBhPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy53b3Jkc1tlXSZvLHM9KDB8dGhpcy53b3Jkc1tlXSktZjw8cjt0aGlzLndvcmRzW2VdPXN8YSxhPWY+Pj4yNi1yfWEmJih0aGlzLndvcmRzW2VdPWEsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LG8ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGk7aT1lPyhlLWUlMjYpLzI2OjA7dmFyIG89dCUyNixhPU1hdGgubWluKCh0LW8pLzI2LHRoaXMubGVuZ3RoKSxmPTY3MTA4ODYzXjY3MTA4ODYzPj4+bzw8byxzPXI7aWYoaS09YSxpPU1hdGgubWF4KDAsaSkscyl7Zm9yKHZhciB1PTA7dTxhO3UrKylzLndvcmRzW3VdPXRoaXMud29yZHNbdV07cy5sZW5ndGg9YX1pZigwPT09YSk7ZWxzZSBpZih0aGlzLmxlbmd0aD5hKWZvcih0aGlzLmxlbmd0aC09YSx1PTA7dTx0aGlzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3UrYV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgaD0wO2Zvcih1PXRoaXMubGVuZ3RoLTE7dT49MCYmKDAhPT1ofHx1Pj1pKTt1LS0pe3ZhciBjPTB8dGhpcy53b3Jkc1t1XTt0aGlzLndvcmRzW3VdPWg8PDI2LW98Yz4+Pm8saD1jJmZ9cmV0dXJuIHMmJjAhPT1oJiYocy53b3Jkc1tzLmxlbmd0aCsrXT1oKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sby5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxvLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sby5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxvLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sby5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4hMTt2YXIgbz10aGlzLndvcmRzW3JdO3JldHVybiEhKG8maSl9LG8ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSxcImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVyc1wiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sby5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwP3RoaXMuaXN1Ym4oLXQpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8dD8odGhpcy53b3Jkc1swXT10LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxvLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30sby5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYobihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxvLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LG8ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LG8ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxvLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIGEsZj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStmO3ZhciBzPSgwfHQud29yZHNbaV0pKmU7YS09NjcxMDg4NjMmcyxmPShhPj4yNiktKHMvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKWE9KDB8dGhpcy53b3Jkc1tpK3JdKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PWYpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobihmPT09LTEpLGY9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspYT0tKDB8dGhpcy53b3Jkc1tpXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aC10Lmxlbmd0aCxuPXRoaXMuY2xvbmUoKSxpPXQsYT0wfGkud29yZHNbaS5sZW5ndGgtMV0sZj10aGlzLl9jb3VudEJpdHMoYSk7cj0yNi1mLDAhPT1yJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyx1PW4ubGVuZ3RoLWkubGVuZ3RoO2lmKFwibW9kXCIhPT1lKXtzPW5ldyBvKG51bGwpLHMubGVuZ3RoPXUrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspcy53b3Jkc1toXT0wfXZhciBjPW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLHUpOzA9PT1jLm5lZ2F0aXZlJiYobj1jLHMmJihzLndvcmRzW3VdPTEpKTtmb3IodmFyIGQ9dS0xO2Q+PTA7ZC0tKXt2YXIgbD02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2RdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2QtMV0pO2ZvcihsPU1hdGgubWluKGwvYXwwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGwsZCk7MCE9PW4ubmVnYXRpdmU7KWwtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGQpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1tkXT1sKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSxcImRpdlwiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LG8ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7aWYobighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKSlyZXR1cm57ZGl2Om5ldyBvKDApLG1vZDpuZXcgbygwKX07dmFyIGksYSxmO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KGY9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pYWRkKHQpKSx7ZGl2OmksbW9kOmF9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmU/KGY9dGhpcy5kaXZtb2QodC5uZWcoKSxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6Zi5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KGY9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaXN1Yih0KSkse2RpdjpmLmRpdixtb2Q6YX0pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IG8oMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD9cImRpdlwiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06XCJtb2RcIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpfSxvLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJkaXZcIiwhMSkuZGl2fSxvLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMSkubW9kfSxvLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITApLm1vZH0sby5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaXZtb2QodCk7aWYoZS5tb2QuaXNaZXJvKCkpcmV0dXJuIGUuZGl2O3ZhciByPTAhPT1lLmRpdi5uZWdhdGl2ZT9lLm1vZC5pc3ViKHQpOmUubW9kLG49dC51c2hybigxKSxpPXQuYW5kbG4oMSksbz1yLmNtcChuKTtyZXR1cm4gbzwwfHwxPT09aSYmMD09PW8/ZS5kaXY6MCE9PWUuZGl2Lm5lZ2F0aXZlP2UuZGl2LmlzdWJuKDEpOmUuZGl2LmlhZGRuKDEpfSxvLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0oMTw8MjYpJXQscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPShlKnIrKDB8dGhpcy53b3Jkc1tpXSkpJXQ7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqZTt0aGlzLndvcmRzW3JdPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0sby5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPW5ldyBvKDApLHM9bmV3IG8oMSksdT0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrdTtmb3IodmFyIGg9ci5jbG9uZSgpLGM9ZS5jbG9uZSgpOyFlLmlzWmVybygpOyl7Zm9yKHZhciBkPTAsbD0xOzA9PT0oZS53b3Jkc1swXSZsKSYmZDwyNjsrK2QsbDw8PTEpO2lmKGQ+MClmb3IoZS5pdXNocm4oZCk7ZC0tID4wOykoaS5pc09kZCgpfHxhLmlzT2RkKCkpJiYoaS5pYWRkKGgpLGEuaXN1YihjKSksaS5pdXNocm4oMSksYS5pdXNocm4oMSk7Zm9yKHZhciBwPTAsYj0xOzA9PT0oci53b3Jkc1swXSZiKSYmcDwyNjsrK3AsYjw8PTEpO2lmKHA+MClmb3Ioci5pdXNocm4ocCk7cC0tID4wOykoZi5pc09kZCgpfHxzLmlzT2RkKCkpJiYoZi5pYWRkKGgpLHMuaXN1YihjKSksZi5pdXNocm4oMSkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoZiksYS5pc3ViKHMpKTooci5pc3ViKGUpLGYuaXN1YihpKSxzLmlzdWIoYSkpfXJldHVybnthOmYsYjpzLGdjZDpyLml1c2hsbih1KX19LG8ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIHM9MCx1PTE7MD09PShlLndvcmRzWzBdJnUpJiZzPDI2Oysrcyx1PDw9MSk7aWYocz4wKWZvcihlLml1c2hybihzKTtzLS0gPjA7KWkuaXNPZGQoKSYmaS5pYWRkKGYpLGkuaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGM9MTswPT09KHIud29yZHNbMF0mYykmJmg8MjY7KytoLGM8PD0xKTtpZihoPjApZm9yKHIuaXVzaHJuKGgpO2gtLSA+MDspYS5pc09kZCgpJiZhLmlhZGQoZiksYS5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoYSkpOihyLmlzdWIoZSksYS5pc3ViKGkpKX12YXIgZDtyZXR1cm4gZD0wPT09ZS5jbXBuKDEpP2k6YSxkLmNtcG4oMCk8MCYmZC5pYWRkKHQpLGR9LG8ucHJvdG90eXBlLmdjZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB0LmFicygpO2lmKHQuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2UubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9ZS5jbXAocik7aWYoaTwwKXt2YXIgbz1lO2U9cixyPW99ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhaztlLmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxvLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVnY2QodCkuYS51bW9kKHQpfSxvLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LG8ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIG89aSxhPXI7MCE9PW8mJmE8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj0wfHRoaXMud29yZHNbYV07Zis9byxvPWY+Pj4yNixmJj02NzEwODg2Myx0aGlzLndvcmRzW2FdPWZ9cmV0dXJuIDAhPT1vJiYodGhpcy53b3Jkc1thXT1vLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxvLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmUpcmV0dXJuIDE7dGhpcy5zdHJpcCgpO3ZhciByO2lmKHRoaXMubGVuZ3RoPjEpcj0xO2Vsc2V7ZSYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsXCJOdW1iZXIgaXMgdG9vIGJpZ1wiKTt2YXIgaT0wfHRoaXMud29yZHNbMF07cj1pPT09dD8wOmk8dD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yOnJ9LG8ucHJvdG90eXBlLmNtcD1mdW5jdGlvbih0KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBlPXRoaXMudWNtcCh0KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxvLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPnQubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHx0LndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0sby5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5ndD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wKHQpfSxvLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk+PTB9LG8ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk+PTB9LG8ucHJvdG90eXBlLmx0bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT09PS0xfSxvLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LG8ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LG8ucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sby5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtKHQpfSxvLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLG4oMD09PXRoaXMubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LG8ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxvLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxvLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCxcInJlZFBvdyhub3JtYWxOdW0pXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgQT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2wucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LGwucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2RvIHRoaXMuc3BsaXQocix0aGlzLnRtcCkscj10aGlzLmltdWxLKHIpLHI9ci5pYWRkKHRoaXMudG1wKSxlPXIuYml0TGVuZ3RoKCk7d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sbC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sbC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHAsbCkscC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDE5NDMwMyxuPU1hdGgubWluKHQubGVuZ3RoLDkpLGk9MDtpPG47aSsrKWUud29yZHNbaV09dC53b3Jkc1tpXTtpZihlLmxlbmd0aD1uLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgbz10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPW8mcixpPTEwO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT0wfHQud29yZHNbaV07dC53b3Jkc1tpLTEwXT0oYSZyKTw8NHxvPj4+MjIsbz1hfW8+Pj49MjIsdC53b3Jkc1tpLTEwXT1vLDA9PT1vJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHAucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saShiLGwpLGkodixsKSxpKHksbCkseS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxvLl9wcmltZT1mdW5jdGlvbiB0KGUpe2lmKEFbZV0pcmV0dXJuIEFbZV07dmFyIHQ7aWYoXCJrMjU2XCI9PT1lKXQ9bmV3IHA7ZWxzZSBpZihcInAyMjRcIj09PWUpdD1uZXcgYjtlbHNlIGlmKFwicDE5MlwiPT09ZSl0PW5ldyB2O2Vsc2V7aWYoXCJwMjU1MTlcIiE9PWUpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwcmltZSBcIitlKTt0PW5ldyB5fXJldHVybiBBW2VdPXQsdH0sbS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih0LGUpe24oMD09PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCYmdC5yZWQ9PT1lLnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LG0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSxtLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LG0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LG0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sbS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT09MSksMz09PWUpe3ZhciByPXRoaXMubS5hZGQobmV3IG8oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codCxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksYT0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspYSsrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBmPW5ldyBvKDEpLnRvUmVkKHRoaXMpLHM9Zi5yZWROZWcoKSx1PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxoPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoaD1uZXcgbygyKmgqaCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGgsdSkuY21wKHMpOyloLnJlZElBZGQocyk7Zm9yKHZhciBjPXRoaXMucG93KGgsaSksZD10aGlzLnBvdyh0LGkuYWRkbigxKS5pdXNocm4oMSkpLGw9dGhpcy5wb3codCxpKSxwPWE7MCE9PWwuY21wKGYpOyl7Zm9yKHZhciBiPWwsdj0wOzAhPT1iLmNtcChmKTt2KyspYj1iLnJlZFNxcigpO24odjxwKTt2YXIgeT10aGlzLnBvdyhjLG5ldyBvKDEpLml1c2hsbihwLXYtMSkpO2Q9ZC5yZWRNdWwoeSksYz15LnJlZFNxcigpLGw9bC5yZWRNdWwoYykscD12fXJldHVybiBkfSxtLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlPyhlLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LG0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe2lmKGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDEpO2lmKDA9PT1lLmNtcG4oMSkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgcj00LG49bmV3IEFycmF5KDE8PHIpO25bMF09bmV3IG8oMSkudG9SZWQodGhpcyksblsxXT10O2Zvcih2YXIgaT0yO2k8bi5sZW5ndGg7aSsrKW5baV09dGhpcy5tdWwobltpLTFdLHQpO3ZhciBhPW5bMF0sZj0wLHM9MCx1PWUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT11JiYodT0yNiksaT1lLmxlbmd0aC0xO2k+PTA7aS0tKXtmb3IodmFyIGg9ZS53b3Jkc1tpXSxjPXUtMTtjPj0wO2MtLSl7dmFyIGQ9aD4+YyYxO2EhPT1uWzBdJiYoYT10aGlzLnNxcihhKSksMCE9PWR8fDAhPT1mPyhmPDw9MSxmfD1kLHMrKywocz09PXJ8fDA9PT1pJiYwPT09YykmJihhPXRoaXMubXVsKGEsbltmXSkscz0wLGY9MCkpOnM9MH11PTI2fXJldHVybiBhfSxtLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSxtLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sby5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZyh0KX0saShnLG0pLGcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0sZy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxhPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/YT1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKGE9aS5pYWRkKHRoaXMubSkpLGEuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSk7cmV0dXJuIGUuX2ZvcmNlUmVkKHRoaXMpfX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHR8fHQsdGhpcyl9KS5jYWxsKGUscig5MikodCkpfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLlJlcG9ydGVyPXIoNTgyKS5SZXBvcnRlcixuLkRlY29kZXJCdWZmZXI9cigyMzQpLkRlY29kZXJCdWZmZXIsbi5FbmNvZGVyQnVmZmVyPXIoMjM0KS5FbmNvZGVyQnVmZmVyLG4uTm9kZT1yKDU4MSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLHIubGVuZ3RoKSxpPW5ldyBlKG4pLG89MDtvPG47KytvKWlbb109dFtvXV5yW29dO3JldHVybiBpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KHQpOlwiW29iamVjdCBBcnJheV1cIj09PXYodCl9ZnVuY3Rpb24gbih0KXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIHR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbnVsbD09PXR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09dH1mdW5jdGlvbiBhKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGYodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR9ZnVuY3Rpb24gcyh0KXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdH1mdW5jdGlvbiB1KHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIGgodCl7cmV0dXJuXCJbb2JqZWN0IFJlZ0V4cF1cIj09PXYodCl9ZnVuY3Rpb24gYyh0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmbnVsbCE9PXR9ZnVuY3Rpb24gZCh0KXtyZXR1cm5cIltvYmplY3QgRGF0ZV1cIj09PXYodCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm5cIltvYmplY3QgRXJyb3JdXCI9PT12KHQpfHx0IGluc3RhbmNlb2YgRXJyb3J9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuIG51bGw9PT10fHxcImJvb2xlYW5cIj09dHlwZW9mIHR8fFwibnVtYmVyXCI9PXR5cGVvZiB0fHxcInN0cmluZ1wiPT10eXBlb2YgdHx8XCJzeW1ib2xcIj09dHlwZW9mIHR8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHYodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1lLmlzQXJyYXk9cixlLmlzQm9vbGVhbj1uLGUuaXNOdWxsPWksZS5pc051bGxPclVuZGVmaW5lZD1vLGUuaXNOdW1iZXI9YSxlLmlzU3RyaW5nPWYsZS5pc1N5bWJvbD1zLGUuaXNVbmRlZmluZWQ9dSxlLmlzUmVnRXhwPWgsZS5pc09iamVjdD1jLGUuaXNEYXRlPWQsZS5pc0Vycm9yPWwsZS5pc0Z1bmN0aW9uPXAsZS5pc1ByaW1pdGl2ZT1iLGUuaXNCdWZmZXI9dC5pc0J1ZmZlcn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT90LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTp0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cigxMTUpLGE9cigxNTkpLGY9cigxMTMpLHM9cig1MyksdT1yKDExNiksaD1yKDIwMSksYz1yKDkxKSxkPXIoMTYyKSxsPS9eY2M6KFsxLTlhLWZdWzAtOWEtZl17MCwzfXwwKTpbMS05YS1mXVswLTlhLWZdezAsMTV9OlthLXpBLVowLTlfLV17MCw4Nn06KFsxLTldWzAtOV17MCwxN318MCkkLyxwPS9eY2M6KFsxLTlhLWZdWzAtOWEtZl17MCwzfXwwKTpbMS05YS1mXVswLTlhLWZdezAsN306W2EtekEtWjAtOV8tXXswLDg2fTooWzEtOV1bMC05XXswLDE3fXwwKSQvLGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpfXJldHVybiBpKHQsW3trZXk6XCJnZXRUeXBlSWRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGV9fSx7a2V5Olwic2V0VHlwZUlkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy50eXBlPXR9fSx7a2V5OlwiZ2V0Qml0bWFza1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYml0bWFza319LHtrZXk6XCJzZXRCaXRtYXNrXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5iaXRtYXNrPXR9fSx7a2V5OlwiZ2V0SGFzaFwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaGFzaCl0aHJvdyBuZXcgcyhcIkhhc2ggbm90IHNldFwiKTtyZXR1cm4gdGhpcy5oYXNofX0se2tleTpcInNldEhhc2hcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSGFzaCBtdXN0IGJlIGEgQnVmZmVyXCIpO3RoaXMuaGFzaD10fX0se2tleTpcImdldE1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihcIm51bWJlclwiIT10eXBlb2YgdGhpcy5tYXhGdWxmaWxsbWVudExlbmd0aCl0aHJvdyBuZXcgcyhcIk1heGltdW0gZnVsZmlsbG1lbnQgbGVuZ3RoIG5vdCBzZXRcIik7cmV0dXJuIHRoaXMubWF4RnVsZmlsbG1lbnRMZW5ndGh9fSx7a2V5Olwic2V0TWF4RnVsZmlsbG1lbnRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVsZmlsbG1lbnQgbGVuZ3RoIG11c3QgYmUgYW4gaW50ZWdlclwiKTtpZih0PDApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bGZpbGxtZW50IGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIG9yIHplcm9cIik7dGhpcy5tYXhGdWxmaWxsbWVudExlbmd0aD10fX0se2tleTpcInNlcmlhbGl6ZVVyaVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCJjYzpcIit0aGlzLmdldFR5cGVJZCgpLnRvU3RyaW5nKDE2KStcIjpcIit0aGlzLmdldEJpdG1hc2soKS50b1N0cmluZygxNikrXCI6XCIrdS5lbmNvZGUodGhpcy5nZXRIYXNoKCkpK1wiOlwiK3RoaXMuZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKX19LHtrZXk6XCJzZXJpYWxpemVCaW5hcnlcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBjO3JldHVybiB0LndyaXRlVUludDE2KHRoaXMuZ2V0VHlwZUlkKCkpLHQud3JpdGVWYXJVSW50KHRoaXMuZ2V0Qml0bWFzaygpKSx0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5nZXRIYXNoKCkpLHQud3JpdGVWYXJVSW50KHRoaXMuZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKSksdC5nZXRCdWZmZXIoKX19LHtrZXk6XCJwYXJzZUJpbmFyeVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2V0VHlwZUlkKHQucmVhZFVJbnQxNigpKSx0aGlzLnNldEJpdG1hc2sodC5yZWFkVmFyVUludCgpKSx0aGlzLnNldEhhc2godC5yZWFkVmFyT2N0ZXRTdHJpbmcoKSksdGhpcy5zZXRNYXhGdWxmaWxsbWVudExlbmd0aCh0LnJlYWRWYXJVSW50KCkpfX0se2tleTpcInZhbGlkYXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihvLmdldENsYXNzRnJvbVR5cGVJZCh0aGlzLmdldFR5cGVJZCgpKSx0aGlzLmdldEJpdG1hc2soKT50Lk1BWF9TQUZFX0JJVE1BU0spdGhyb3cgbmV3IEVycm9yKFwiQml0bWFzayB0b28gbGFyZ2UgdG8gYmUgc2FmZWx5IHJlcHJlc2VudGVkXCIpO2lmKHRoaXMuZ2V0Qml0bWFzaygpJn50LlNVUFBPUlRFRF9CSVRNQVNLKXRocm93IG5ldyBFcnJvcihcIkNvbmRpdGlvbiByZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgZmVhdHVyZSBzdWl0ZXNcIik7aWYodGhpcy5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpPnQuTUFYX0ZVTEZJTExNRU5UX0xFTkdUSCl0aHJvdyBuZXcgRXJyb3IoXCJDb25kaXRpb24gcmVxdWVzdGVkIHRvbyBsYXJnZSBvZiBhIG1heCBmdWxmaWxsbWVudCBzaXplXCIpO3JldHVybiEwfX1dLFt7a2V5OlwiZnJvbVVyaVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiB0KXJldHVybiBlO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcIlNlcmlhbGl6ZWQgY29uZGl0aW9uIG11c3QgYmUgYSBzdHJpbmdcIik7dmFyIHI9ZS5zcGxpdChcIjpcIik7aWYoXCJjY1wiIT09clswXSl0aHJvdyBuZXcgYSgnU2VyaWFsaXplZCBjb25kaXRpb24gbXVzdCBzdGFydCB3aXRoIFwiY2M6XCInKTtpZighdC5SRUdFWF9TVFJJQ1QuZXhlYyhlKSl0aHJvdyBuZXcgZihcIkludmFsaWQgY29uZGl0aW9uIGZvcm1hdFwiKTt2YXIgbj1uZXcgdDtyZXR1cm4gbi5zZXRUeXBlSWQocGFyc2VJbnQoclsxXSwxNikpLG4uc2V0Qml0bWFzayhwYXJzZUludChyWzJdLDE2KSksbi5zZXRIYXNoKHUuZGVjb2RlKHJbM10pKSxuLnNldE1heEZ1bGZpbGxtZW50TGVuZ3RoKHBhcnNlSW50KHJbNF0sMTApKSxufX0se2tleTpcImZyb21CaW5hcnlcIix2YWx1ZTpmdW5jdGlvbihlKXtlPWguZnJvbShlKTt2YXIgcj1uZXcgdDtyZXR1cm4gci5wYXJzZUJpbmFyeShlKSxyfX1dKSx0fSgpO2IuTUFYX1NBRkVfQklUTUFTSz00Mjk0OTY3Mjk1LGIuU1VQUE9SVEVEX0JJVE1BU0s9NjMsYi5NQVhfRlVMRklMTE1FTlRfTEVOR1RIPTY1NTM1LGIuUkVHRVg9bCxiLlJFR0VYX1NUUklDVD1wLHQuZXhwb3J0cz1ifSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxmPXIoNjMpLHM9cigxMTQpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksYShlLFt7a2V5OlwiZ2VuZXJhdGVIYXNoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcyhcInNoYTI1NlwiKTtyZXR1cm4gdGhpcy53cml0ZUhhc2hQYXlsb2FkKHQpLHQuZ2V0RGlnZXN0KCl9fV0pLGV9KGYpO3QuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTcpLGk9cigxMCksbz1yKDQ3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixhKXt2YXIgZixzPW4oZSksdT1pKHMubGVuZ3RoKSxoPW8oYSx1KTtpZih0JiZyIT1yKXtmb3IoO3U+aDspaWYoZj1zW2grK10sZiE9ZilyZXR1cm4hMH1lbHNlIGZvcig7dT5oO2grKylpZigodHx8aCBpbiBzKSYmc1toXT09PXIpcmV0dXJuIHR8fGh8fDA7cmV0dXJuIXQmJi0xfX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQpLGk9cigwKSxvPXIoMTUpLGE9cig0NSksZj1yKDM2KSxzPXIoNTUpLHU9cig0MCksaD1yKDYpLGM9cig1KSxkPXIoODQpLGw9cig1NykscD1yKDEyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGIsdix5KXt2YXIgbT1uW3RdLGc9bSx3PXY/XCJzZXRcIjpcImFkZFwiLF89ZyYmZy5wcm90b3R5cGUsTT17fSxTPWZ1bmN0aW9uKHQpe3ZhciBlPV9bdF07byhfLHQsXCJkZWxldGVcIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKHkmJiFoKHQpKSYmZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06XCJoYXNcIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKHkmJiFoKHQpKSYmZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06XCJnZXRcIj09dD9mdW5jdGlvbih0KXtyZXR1cm4geSYmIWgodCk/dm9pZCAwOmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OlwiYWRkXCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLDA9PT10PzA6dCksdGhpc306ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5jYWxsKHRoaXMsMD09PXQ/MDp0LHIpLHRoaXN9KX07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZyYmKHl8fF8uZm9yRWFjaCYmIWMoZnVuY3Rpb24oKXsobmV3IGcpLmVudHJpZXMoKS5uZXh0KCl9KSkpe3ZhciBFPW5ldyBnLEE9RVt3XSh5P3t9Oi0wLDEpIT1FLGs9YyhmdW5jdGlvbigpe0UuaGFzKDEpfSkseD1kKGZ1bmN0aW9uKHQpe25ldyBnKHQpfSksST0heSYmYyhmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgZyxlPTU7ZS0tOyl0W3ddKGUsZSk7cmV0dXJuIXQuaGFzKC0wKX0pO3h8fChnPWUoZnVuY3Rpb24oZSxyKXt1KGUsZyx0KTt2YXIgbj1wKG5ldyBtLGUsZyk7cmV0dXJuIHZvaWQgMCE9ciYmcyhyLHYsblt3XSxuKSxufSksZy5wcm90b3R5cGU9XyxfLmNvbnN0cnVjdG9yPWcpLChrfHxJKSYmKFMoXCJkZWxldGVcIiksUyhcImhhc1wiKSx2JiZTKFwiZ2V0XCIpKSwoSXx8QSkmJlModykseSYmXy5jbGVhciYmZGVsZXRlIF8uY2xlYXJ9ZWxzZSBnPWIuZ2V0Q29uc3RydWN0b3IoZSx0LHYsdyksYShnLnByb3RvdHlwZSxyKSxmLk5FRUQ9ITA7cmV0dXJuIGwoZyx0KSxNW3RdPWcsaShpLkcraS5XK2kuRiooZyE9bSksTSkseXx8Yi5zZXRTdHJvbmcoZyx0LHYpLGd9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxNCksaT1yKDE1KSxvPXIoNSksYT1yKDI0KSxmPXIoNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgcz1mKHQpLHU9cihhLHMsXCJcIlt0XSksaD11WzBdLGM9dVsxXTtvKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGVbc109ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9XCJcIlt0XShlKX0pJiYoaShTdHJpbmcucHJvdG90eXBlLHQsaCksbihSZWdFeHAucHJvdG90eXBlLHMsMj09ZT9mdW5jdGlvbih0LGUpe3JldHVybiBjLmNhbGwodCx0aGlzLGUpfTpmdW5jdGlvbih0KXtyZXR1cm4gYy5jYWxsKHQsdGhpcyl9KSl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigzKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKHRoaXMpLGU9XCJcIjtyZXR1cm4gdC5nbG9iYWwmJihlKz1cImdcIiksdC5pZ25vcmVDYXNlJiYoZSs9XCJpXCIpLHQubXVsdGlsaW5lJiYoZSs9XCJtXCIpLHQudW5pY29kZSYmKGUrPVwidVwiKSx0LnN0aWNreSYmKGUrPVwieVwiKSxlfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXZvaWQgMD09PXI7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG4/dCgpOnQuY2FsbChyKTtjYXNlIDE6cmV0dXJuIG4/dChlWzBdKTp0LmNhbGwocixlWzBdKTtjYXNlIDI6cmV0dXJuIG4/dChlWzBdLGVbMV0pOnQuY2FsbChyLGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiBuP3QoZVswXSxlWzFdLGVbMl0pOnQuY2FsbChyLGVbMF0sZVsxXSxlWzJdKTtjYXNlIDQ6cmV0dXJuIG4/dChlWzBdLGVbMV0sZVsyXSxlWzNdKTp0LmNhbGwocixlWzBdLGVbMV0sZVsyXSxlWzNdKX1yZXR1cm4gdC5hcHBseShyLGUpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDIzKSxvPXIoNykoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIG4odCkmJih2b2lkIDAhPT0oZT10W29dKT8hIWU6XCJSZWdFeHBcIj09aSh0KSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3KShcIml0ZXJhdG9yXCIpLGk9ITE7dHJ5e3ZhciBvPVs3XVtuXSgpO28ucmV0dXJuPWZ1bmN0aW9uKCl7aT0hMH0sQXJyYXkuZnJvbShvLGZ1bmN0aW9uKCl7dGhyb3cgMn0pfWNhdGNoKHQpe310LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighZSYmIWkpcmV0dXJuITE7dmFyIHI9ITE7dHJ5e3ZhciBvPVs3XSxhPW9bbl0oKTthLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX0sb1tuXT1mdW5jdGlvbigpe3JldHVybiBhfSx0KG8pfWNhdGNoKHQpe31yZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cig0MSl8fCFyKDUpKGZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5yYW5kb20oKTtfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCx0LGZ1bmN0aW9uKCl7fSksZGVsZXRlIHIoNClbdF19KX0sZnVuY3Rpb24odCxlKXtlLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1cIl9fY29yZS1qc19zaGFyZWRfX1wiLG89bltpXXx8KG5baV09e30pO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gb1t0XXx8KG9bdF09e30pfX0sZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPXIoNCksbz1yKDE0KSxhPXIoNDgpLGY9YShcInR5cGVkX2FycmF5XCIpLHM9YShcInZpZXdcIiksdT0hKCFpLkFycmF5QnVmZmVyfHwhaS5EYXRhVmlldyksaD11LGM9MCxkPTksbD1cIkludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XCIuc3BsaXQoXCIsXCIpO2M8ZDspKG49aVtsW2MrK11dKT8obyhuLnByb3RvdHlwZSxmLCEwKSxvKG4ucHJvdG90eXBlLHMsITApKTpoPSExO3QuZXhwb3J0cz17QUJWOnUsQ09OU1RSOmgsVFlQRUQ6ZixWSUVXOnN9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1yKDQ3Mil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9cig0NzQpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC53ZWJwYWNrUG9seWZpbGx8fCh0LmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sdC5wYXRocz1bXSx0LmNoaWxkcmVufHwodC5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJsb2FkZWRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcImlkXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lml9fSksdC53ZWJwYWNrUG9seWZpbGw9MSksdH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLnJhbmRvbUJ5dGVzPWUucm5nPWUucHNldWRvUmFuZG9tQnl0ZXM9ZS5wcm5nPXIoNjEpLGUuY3JlYXRlSGFzaD1lLkhhc2g9cig1OSksZS5jcmVhdGVIbWFjPWUuSG1hYz1yKDE0OSk7dmFyIG49W1wic2hhMVwiLFwic2hhMjI0XCIsXCJzaGEyNTZcIixcInNoYTM4NFwiLFwic2hhNTEyXCIsXCJtZDVcIixcInJtZDE2MFwiXS5jb25jYXQoT2JqZWN0LmtleXMocigyMTEpKSk7ZS5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbn07dmFyIGk9cigxNTEpO2UucGJrZGYyPWkucGJrZGYyLGUucGJrZGYyU3luYz1pLnBia2RmMlN5bmM7dmFyIG89cig0OTMpO1tcIkNpcGhlclwiLFwiY3JlYXRlQ2lwaGVyXCIsXCJDaXBoZXJpdlwiLFwiY3JlYXRlQ2lwaGVyaXZcIixcIkRlY2lwaGVyXCIsXCJjcmVhdGVEZWNpcGhlclwiLFwiRGVjaXBoZXJpdlwiLFwiY3JlYXRlRGVjaXBoZXJpdlwiLFwiZ2V0Q2lwaGVyc1wiLFwibGlzdENpcGhlcnNcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPW9bdF19KTt2YXIgYT1yKDU3Myk7W1wiRGlmZmllSGVsbG1hbkdyb3VwXCIsXCJjcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXBcIixcImdldERpZmZpZUhlbGxtYW5cIixcImNyZWF0ZURpZmZpZUhlbGxtYW5cIixcIkRpZmZpZUhlbGxtYW5cIl0uZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPWFbdF19KTt2YXIgZj1yKDUwNik7W1wiY3JlYXRlU2lnblwiLFwiU2lnblwiLFwiY3JlYXRlVmVyaWZ5XCIsXCJWZXJpZnlcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPWZbdF19KSxlLmNyZWF0ZUVDREg9cig1NDQpO3ZhciBzPXIoNTc3KTtbXCJwdWJsaWNFbmNyeXB0XCIsXCJwcml2YXRlRW5jcnlwdFwiLFwicHVibGljRGVjcnlwdFwiLFwicHJpdmF0ZURlY3J5cHRcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPXNbdF19KSxbXCJjcmVhdGVDcmVkZW50aWFsc1wiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoW1wic29ycnksIFwiK3QrXCIgaXMgbm90IGltcGxlbWVudGVkIHlldFwiLFwid2UgYWNjZXB0IHB1bGwgcmVxdWVzdHNcIixcImh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG8tYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeVwiXS5qb2luKFwiXFxuXCIpKX19KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQpe3ZhciBlLHI7cmV0dXJuIGU9dD5mfHx0PDA/KHI9TWF0aC5hYnModCklZix0PDA/Zi1yOnIpOnR9ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO3QrKyl0W2VdPTA7cmV0dXJuITF9ZnVuY3Rpb24gaSgpe3RoaXMuU0JPWD1bXSx0aGlzLklOVl9TQk9YPVtdLHRoaXMuU1VCX01JWD1bW10sW10sW10sW11dLHRoaXMuSU5WX1NVQl9NSVg9W1tdLFtdLFtdLFtdXSx0aGlzLmluaXQoKSx0aGlzLlJDT049WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzQscj1uZXcgQXJyYXkoZSksbj0tMTsrK248ZTspcltuXT10LnJlYWRVSW50MzJCRSg0Km4pO3JldHVybiByfWZ1bmN0aW9uIGEodCl7dGhpcy5fa2V5PW8odCksdGhpcy5fZG9SZXNldCgpfXZhciBmPU1hdGgucG93KDIsMzIpO2kucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG8sYSxmLHMsdTtmb3IodD1mdW5jdGlvbigpe3ZhciB0LHI7Zm9yKHI9W10sZT10PTA7dDwyNTY7ZT0rK3QpZTwxMjg/ci5wdXNoKGU8PDEpOnIucHVzaChlPDwxXjI4Myk7cmV0dXJuIHJ9KCksaT0wLHM9MCxlPXU9MDt1PDI1NjtlPSsrdSlyPXNeczw8MV5zPDwyXnM8PDNeczw8NCxyPXI+Pj44XjI1NSZyXjk5LHRoaXMuU0JPWFtpXT1yLHRoaXMuSU5WX1NCT1hbcl09aSxvPXRbaV0sYT10W29dLGY9dFthXSxuPTI1Nyp0W3JdXjE2ODQzMDA4KnIsdGhpcy5TVUJfTUlYWzBdW2ldPW48PDI0fG4+Pj44LHRoaXMuU1VCX01JWFsxXVtpXT1uPDwxNnxuPj4+MTYsdGhpcy5TVUJfTUlYWzJdW2ldPW48PDh8bj4+PjI0LHRoaXMuU1VCX01JWFszXVtpXT1uLG49MTY4NDMwMDkqZl42NTUzNyphXjI1NypvXjE2ODQzMDA4KmksdGhpcy5JTlZfU1VCX01JWFswXVtyXT1uPDwyNHxuPj4+OCx0aGlzLklOVl9TVUJfTUlYWzFdW3JdPW48PDE2fG4+Pj4xNix0aGlzLklOVl9TVUJfTUlYWzJdW3JdPW48PDh8bj4+PjI0LHRoaXMuSU5WX1NVQl9NSVhbM11bcl09biwwPT09aT9pPXM9MTooaT1vXnRbdFt0W2Zeb11dXSxzXj10W3Rbc11dKTtyZXR1cm4hMH07dmFyIHM9bmV3IGk7YS5ibG9ja1NpemU9MTYsYS5wcm90b3R5cGUuYmxvY2tTaXplPWEuYmxvY2tTaXplLGEua2V5U2l6ZT0zMixhLnByb3RvdHlwZS5rZXlTaXplPWEua2V5U2l6ZSxhLnByb3RvdHlwZS5fZG9SZXNldD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksbztmb3Iocj10aGlzLl9rZXksZT1yLmxlbmd0aCx0aGlzLl9uUm91bmRzPWUrNixpPTQqKHRoaXMuX25Sb3VuZHMrMSksdGhpcy5fa2V5U2NoZWR1bGU9W10sbj0wO248aTtuKyspdGhpcy5fa2V5U2NoZWR1bGVbbl09bjxlP3Jbbl06KG89dGhpcy5fa2V5U2NoZWR1bGVbbi0xXSxuJWU9PT0wPyhvPW88PDh8bz4+PjI0LG89cy5TQk9YW28+Pj4yNF08PDI0fHMuU0JPWFtvPj4+MTYmMjU1XTw8MTZ8cy5TQk9YW28+Pj44JjI1NV08PDh8cy5TQk9YWzI1NSZvXSxvXj1zLlJDT05bbi9lfDBdPDwyNCk6ZT42JiZuJWU9PT00P289cy5TQk9YW28+Pj4yNF08PDI0fHMuU0JPWFtvPj4+MTYmMjU1XTw8MTZ8cy5TQk9YW28+Pj44JjI1NV08PDh8cy5TQk9YWzI1NSZvXTp2b2lkIDAsdGhpcy5fa2V5U2NoZWR1bGVbbi1lXV5vKTtmb3IodGhpcy5faW52S2V5U2NoZWR1bGU9W10sdD0wO3Q8aTt0Kyspbj1pLXQsbz10aGlzLl9rZXlTY2hlZHVsZVtuLSh0JTQ/MDo0KV0sdGhpcy5faW52S2V5U2NoZWR1bGVbdF09dDw0fHxuPD00P286cy5JTlZfU1VCX01JWFswXVtzLlNCT1hbbz4+PjI0XV1ecy5JTlZfU1VCX01JWFsxXVtzLlNCT1hbbz4+PjE2JjI1NV1dXnMuSU5WX1NVQl9NSVhbMl1bcy5TQk9YW28+Pj44JjI1NV1dXnMuSU5WX1NVQl9NSVhbM11bcy5TQk9YWzI1NSZvXV07XG5yZXR1cm4hMH0sYS5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKGUpe2U9byhuZXcgdChlKSk7dmFyIHI9dGhpcy5fZG9DcnlwdEJsb2NrKGUsdGhpcy5fa2V5U2NoZWR1bGUscy5TVUJfTUlYLHMuU0JPWCksbj1uZXcgdCgxNik7cmV0dXJuIG4ud3JpdGVVSW50MzJCRShyWzBdLDApLG4ud3JpdGVVSW50MzJCRShyWzFdLDQpLG4ud3JpdGVVSW50MzJCRShyWzJdLDgpLG4ud3JpdGVVSW50MzJCRShyWzNdLDEyKSxufSxhLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oZSl7ZT1vKG5ldyB0KGUpKTt2YXIgcj1bZVszXSxlWzFdXTtlWzFdPXJbMF0sZVszXT1yWzFdO3ZhciBuPXRoaXMuX2RvQ3J5cHRCbG9jayhlLHRoaXMuX2ludktleVNjaGVkdWxlLHMuSU5WX1NVQl9NSVgscy5JTlZfU0JPWCksaT1uZXcgdCgxNik7cmV0dXJuIGkud3JpdGVVSW50MzJCRShuWzBdLDApLGkud3JpdGVVSW50MzJCRShuWzNdLDQpLGkud3JpdGVVSW50MzJCRShuWzJdLDgpLGkud3JpdGVVSW50MzJCRShuWzFdLDEyKSxpfSxhLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe24odGhpcy5fa2V5U2NoZWR1bGUpLG4odGhpcy5faW52S2V5U2NoZWR1bGUpLG4odGhpcy5fa2V5KX0sYS5wcm90b3R5cGUuX2RvQ3J5cHRCbG9jaz1mdW5jdGlvbih0LGUsbixpKXt2YXIgbyxhLGYscyx1LGgsYyxkLGw7YT10WzBdXmVbMF0sZj10WzFdXmVbMV0scz10WzJdXmVbMl0sdT10WzNdXmVbM10sbz00O2Zvcih2YXIgcD0xO3A8dGhpcy5fblJvdW5kcztwKyspaD1uWzBdW2E+Pj4yNF1eblsxXVtmPj4+MTYmMjU1XV5uWzJdW3M+Pj44JjI1NV1eblszXVsyNTUmdV1eZVtvKytdLGM9blswXVtmPj4+MjRdXm5bMV1bcz4+PjE2JjI1NV1eblsyXVt1Pj4+OCYyNTVdXm5bM11bMjU1JmFdXmVbbysrXSxkPW5bMF1bcz4+PjI0XV5uWzFdW3U+Pj4xNiYyNTVdXm5bMl1bYT4+PjgmMjU1XV5uWzNdWzI1NSZmXV5lW28rK10sbD1uWzBdW3U+Pj4yNF1eblsxXVthPj4+MTYmMjU1XV5uWzJdW2Y+Pj44JjI1NV1eblszXVsyNTUmc11eZVtvKytdLGE9aCxmPWMscz1kLHU9bDtyZXR1cm4gaD0oaVthPj4+MjRdPDwyNHxpW2Y+Pj4xNiYyNTVdPDwxNnxpW3M+Pj44JjI1NV08PDh8aVsyNTUmdV0pXmVbbysrXSxjPShpW2Y+Pj4yNF08PDI0fGlbcz4+PjE2JjI1NV08PDE2fGlbdT4+PjgmMjU1XTw8OHxpWzI1NSZhXSleZVtvKytdLGQ9KGlbcz4+PjI0XTw8MjR8aVt1Pj4+MTYmMjU1XTw8MTZ8aVthPj4+OCYyNTVdPDw4fGlbMjU1JmZdKV5lW28rK10sbD0oaVt1Pj4+MjRdPDwyNHxpW2E+Pj4xNiYyNTVdPDwxNnxpW2Y+Pj44JjI1NV08PDh8aVsyNTUmc10pXmVbbysrXSxbcihoKSxyKGMpLHIoZCkscihsKV19LGUuQUVTPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2VbXCJhZXMtMTI4LWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xOTItZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTI1Ni1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTI4LWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTkyLWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMjU2LWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGUuYWVzMTI4PWVbXCJhZXMtMTI4LWNiY1wiXSxlLmFlczE5Mj1lW1wiYWVzLTE5Mi1jYmNcIl0sZS5hZXMyNTY9ZVtcImFlcy0yNTYtY2JjXCJdLGVbXCJhZXMtMTI4LWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn0sZVtcImFlcy0xOTItZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxlW1wiYWVzLTI1Ni1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGg7ci0tOyl7aWYoZT10LnJlYWRVSW50OChyKSwyNTUhPT1lKXtlKyssdC53cml0ZVVJbnQ4KGUscik7YnJlYWt9dC53cml0ZVVJbnQ4KDAscil9fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KTtyZXR1cm4gbih0Ll9wcmV2KSxlfXZhciBvPXIoNjcpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIpe2Zvcig7ZS5fY2FjaGUubGVuZ3RoPHIubGVuZ3RoOyllLl9jYWNoZT10LmNvbmNhdChbZS5fY2FjaGUsaShlKV0pO3ZhciBuPWUuX2NhY2hlLnNsaWNlKDAsci5sZW5ndGgpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShyLmxlbmd0aCksbyhyLG4pfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT1cInN0cmluZ1wiPT10eXBlb2YgdCx0aGlzLmhhc2hNb2RlP3RoaXNbdF09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9dmFyIGk9cigzMSkuVHJhbnNmb3JtLG89cigyKSxhPXIoNTIpLlN0cmluZ0RlY29kZXI7dC5leHBvcnRzPW4sbyhuLGkpLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LHIsbil7XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQscikpO3ZhciBpPXRoaXMuX3VwZGF0ZSh0KTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihuJiYoaT10aGlzLl90b1N0cmluZyhpLG4pKSxpKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3ZhciBuO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh0KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHQpKX1jYXRjaCh0KXtuPXR9ZmluYWxseXtyKG4pfX0sbi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0aGlzLnB1c2godGhpcy5fZmluYWwoKSl9Y2F0Y2godCl7ZT10fWZpbmFsbHl7dChlKX19LG4ucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX2ZpbmFsKCl8fG5ldyBlKFwiXCIpO3JldHVybiB0JiYocj10aGlzLl90b1N0cmluZyhyLHQsITApKSxyfSxuLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBhKGUpLHRoaXMuX2VuY29kaW5nPWUpLHRoaXMuX2VuY29kaW5nIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzXCIpO3ZhciBuPXRoaXMuX2RlY29kZXIud3JpdGUodCk7cmV0dXJuIHImJihuKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxufX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9dC5leHBvcnRzPXIsci5lcXVhbD1mdW5jdGlvbih0LGUscil7aWYodCE9ZSl0aHJvdyBuZXcgRXJyb3Iocnx8XCJBc3NlcnRpb24gZmFpbGVkOiBcIit0K1wiICE9IFwiK2UpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWU7bi5iYXNlPXIoNTA4KSxuLnNob3J0PXIoNTExKSxuLm1vbnQ9cig1MTApLG4uZWR3YXJkcz1yKDUwOSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uYmlnbnVtPXIoMTgpLG4uZGVmaW5lPXIoNTMwKS5kZWZpbmUsbi5iYXNlPXIoNjgpLG4uY29uc3RhbnRzPXIoMjE1KSxuLmRlY29kZXJzPXIoNTM0KSxuLmVuY29kZXJzPXIoNTM2KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQpe3ZhciBlLHI7cmV0dXJuIGU9dD5mfHx0PDA/KHI9TWF0aC5hYnModCklZix0PDA/Zi1yOnIpOnR9ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO3QrKyl0W2VdPTA7cmV0dXJuITF9ZnVuY3Rpb24gaSgpe3RoaXMuU0JPWD1bXSx0aGlzLklOVl9TQk9YPVtdLHRoaXMuU1VCX01JWD1bW10sW10sW10sW11dLHRoaXMuSU5WX1NVQl9NSVg9W1tdLFtdLFtdLFtdXSx0aGlzLmluaXQoKSx0aGlzLlJDT049WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzQscj1uZXcgQXJyYXkoZSksbj0tMTsrK248ZTspcltuXT10LnJlYWRVSW50MzJCRSg0Km4pO3JldHVybiByfWZ1bmN0aW9uIGEodCl7dGhpcy5fa2V5PW8odCksdGhpcy5fZG9SZXNldCgpfXZhciBmPU1hdGgucG93KDIsMzIpO2kucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG8sYSxmLHMsdTtmb3IodD1mdW5jdGlvbigpe3ZhciB0LHI7Zm9yKHI9W10sZT10PTA7dDwyNTY7ZT0rK3QpZTwxMjg/ci5wdXNoKGU8PDEpOnIucHVzaChlPDwxXjI4Myk7cmV0dXJuIHJ9KCksaT0wLHM9MCxlPXU9MDt1PDI1NjtlPSsrdSlyPXNeczw8MV5zPDwyXnM8PDNeczw8NCxyPXI+Pj44XjI1NSZyXjk5LHRoaXMuU0JPWFtpXT1yLHRoaXMuSU5WX1NCT1hbcl09aSxvPXRbaV0sYT10W29dLGY9dFthXSxuPTI1Nyp0W3JdXjE2ODQzMDA4KnIsdGhpcy5TVUJfTUlYWzBdW2ldPW48PDI0fG4+Pj44LHRoaXMuU1VCX01JWFsxXVtpXT1uPDwxNnxuPj4+MTYsdGhpcy5TVUJfTUlYWzJdW2ldPW48PDh8bj4+PjI0LHRoaXMuU1VCX01JWFszXVtpXT1uLG49MTY4NDMwMDkqZl42NTUzNyphXjI1NypvXjE2ODQzMDA4KmksdGhpcy5JTlZfU1VCX01JWFswXVtyXT1uPDwyNHxuPj4+OCx0aGlzLklOVl9TVUJfTUlYWzFdW3JdPW48PDE2fG4+Pj4xNix0aGlzLklOVl9TVUJfTUlYWzJdW3JdPW48PDh8bj4+PjI0LHRoaXMuSU5WX1NVQl9NSVhbM11bcl09biwwPT09aT9pPXM9MTooaT1vXnRbdFt0W2Zeb11dXSxzXj10W3Rbc11dKTtyZXR1cm4hMH07dmFyIHM9bmV3IGk7YS5ibG9ja1NpemU9MTYsYS5wcm90b3R5cGUuYmxvY2tTaXplPWEuYmxvY2tTaXplLGEua2V5U2l6ZT0zMixhLnByb3RvdHlwZS5rZXlTaXplPWEua2V5U2l6ZSxhLnByb3RvdHlwZS5fZG9SZXNldD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksbztmb3Iocj10aGlzLl9rZXksZT1yLmxlbmd0aCx0aGlzLl9uUm91bmRzPWUrNixpPTQqKHRoaXMuX25Sb3VuZHMrMSksdGhpcy5fa2V5U2NoZWR1bGU9W10sbj0wO248aTtuKyspdGhpcy5fa2V5U2NoZWR1bGVbbl09bjxlP3Jbbl06KG89dGhpcy5fa2V5U2NoZWR1bGVbbi0xXSxuJWU9PT0wPyhvPW88PDh8bz4+PjI0LG89cy5TQk9YW28+Pj4yNF08PDI0fHMuU0JPWFtvPj4+MTYmMjU1XTw8MTZ8cy5TQk9YW28+Pj44JjI1NV08PDh8cy5TQk9YWzI1NSZvXSxvXj1zLlJDT05bbi9lfDBdPDwyNCk6ZT42JiZuJWU9PT00P289cy5TQk9YW28+Pj4yNF08PDI0fHMuU0JPWFtvPj4+MTYmMjU1XTw8MTZ8cy5TQk9YW28+Pj44JjI1NV08PDh8cy5TQk9YWzI1NSZvXTp2b2lkIDAsdGhpcy5fa2V5U2NoZWR1bGVbbi1lXV5vKTtmb3IodGhpcy5faW52S2V5U2NoZWR1bGU9W10sdD0wO3Q8aTt0Kyspbj1pLXQsbz10aGlzLl9rZXlTY2hlZHVsZVtuLSh0JTQ/MDo0KV0sdGhpcy5faW52S2V5U2NoZWR1bGVbdF09dDw0fHxuPD00P286cy5JTlZfU1VCX01JWFswXVtzLlNCT1hbbz4+PjI0XV1ecy5JTlZfU1VCX01JWFsxXVtzLlNCT1hbbz4+PjE2JjI1NV1dXnMuSU5WX1NVQl9NSVhbMl1bcy5TQk9YW28+Pj44JjI1NV1dXnMuSU5WX1NVQl9NSVhbM11bcy5TQk9YWzI1NSZvXV07cmV0dXJuITB9LGEucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPXRoaXMuX2RvQ3J5cHRCbG9jayhlLHRoaXMuX2tleVNjaGVkdWxlLHMuU1VCX01JWCxzLlNCT1gpLG49bmV3IHQoMTYpO3JldHVybiBuLndyaXRlVUludDMyQkUoclswXSwwKSxuLndyaXRlVUludDMyQkUoclsxXSw0KSxuLndyaXRlVUludDMyQkUoclsyXSw4KSxuLndyaXRlVUludDMyQkUoclszXSwxMiksbn0sYS5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKGUpe2U9byhuZXcgdChlKSk7dmFyIHI9W2VbM10sZVsxXV07ZVsxXT1yWzBdLGVbM109clsxXTt2YXIgbj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9pbnZLZXlTY2hlZHVsZSxzLklOVl9TVUJfTUlYLHMuSU5WX1NCT1gpLGk9bmV3IHQoMTYpO3JldHVybiBpLndyaXRlVUludDMyQkUoblswXSwwKSxpLndyaXRlVUludDMyQkUoblszXSw0KSxpLndyaXRlVUludDMyQkUoblsyXSw4KSxpLndyaXRlVUludDMyQkUoblsxXSwxMiksaX0sYS5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtuKHRoaXMuX2tleVNjaGVkdWxlKSxuKHRoaXMuX2ludktleVNjaGVkdWxlKSxuKHRoaXMuX2tleSl9LGEucHJvdG90eXBlLl9kb0NyeXB0QmxvY2s9ZnVuY3Rpb24odCxlLG4saSl7dmFyIG8sYSxmLHMsdSxoLGMsZCxsO2E9dFswXV5lWzBdLGY9dFsxXV5lWzFdLHM9dFsyXV5lWzJdLHU9dFszXV5lWzNdLG89NDtmb3IodmFyIHA9MTtwPHRoaXMuX25Sb3VuZHM7cCsrKWg9blswXVthPj4+MjRdXm5bMV1bZj4+PjE2JjI1NV1eblsyXVtzPj4+OCYyNTVdXm5bM11bMjU1JnVdXmVbbysrXSxjPW5bMF1bZj4+PjI0XV5uWzFdW3M+Pj4xNiYyNTVdXm5bMl1bdT4+PjgmMjU1XV5uWzNdWzI1NSZhXV5lW28rK10sZD1uWzBdW3M+Pj4yNF1eblsxXVt1Pj4+MTYmMjU1XV5uWzJdW2E+Pj44JjI1NV1eblszXVsyNTUmZl1eZVtvKytdLGw9blswXVt1Pj4+MjRdXm5bMV1bYT4+PjE2JjI1NV1eblsyXVtmPj4+OCYyNTVdXm5bM11bMjU1JnNdXmVbbysrXSxhPWgsZj1jLHM9ZCx1PWw7cmV0dXJuIGg9KGlbYT4+PjI0XTw8MjR8aVtmPj4+MTYmMjU1XTw8MTZ8aVtzPj4+OCYyNTVdPDw4fGlbMjU1JnVdKV5lW28rK10sYz0oaVtmPj4+MjRdPDwyNHxpW3M+Pj4xNiYyNTVdPDwxNnxpW3U+Pj44JjI1NV08PDh8aVsyNTUmYV0pXmVbbysrXSxkPShpW3M+Pj4yNF08PDI0fGlbdT4+PjE2JjI1NV08PDE2fGlbYT4+PjgmMjU1XTw8OHxpWzI1NSZmXSleZVtvKytdLGw9KGlbdT4+PjI0XTw8MjR8aVthPj4+MTYmMjU1XTw8MTZ8aVtmPj4+OCYyNTVdPDw4fGlbMjU1JnNdKV5lW28rK10sW3IoaCkscihjKSxyKGQpLHIobCldfSxlLkFFUz1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoO3ItLTspe2lmKGU9dC5yZWFkVUludDgociksMjU1IT09ZSl7ZSsrLHQud3JpdGVVSW50OChlLHIpO2JyZWFrfXQud3JpdGVVSW50OCgwLHIpfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldik7cmV0dXJuIG4odC5fcHJldiksZX12YXIgbz1yKDY5KTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLGkoZSldKTt2YXIgbj1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLG8ocixuKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9XCJzdHJpbmdcIj09dHlwZW9mIHQsdGhpcy5oYXNoTW9kZT90aGlzW3RdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXZhciBpPXIoMzEpLlRyYW5zZm9ybSxvPXIoMiksYT1yKDUyKS5TdHJpbmdEZWNvZGVyO3QuZXhwb3J0cz1uLG8obixpKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKTt2YXIgaT10aGlzLl91cGRhdGUodCk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoobiYmKGk9dGhpcy5fdG9TdHJpbmcoaSxuKSksaSl9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodCk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh0KSl9Y2F0Y2godCl7bj10fWZpbmFsbHl7cihuKX19LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dGhpcy5wdXNoKHRoaXMuX2ZpbmFsKCkpfWNhdGNoKHQpe2U9dH1maW5hbGx5e3QoZSl9fSxuLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9maW5hbCgpfHxuZXcgZShcIlwiKTtyZXR1cm4gdCYmKHI9dGhpcy5fdG9TdHJpbmcocix0LCEwKSkscn0sbi5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgYShlKSx0aGlzLl9lbmNvZGluZz1lKSx0aGlzLl9lbmNvZGluZyE9PWUpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc3dpdGNoIGVuY29kaW5nc1wiKTt2YXIgbj10aGlzLl9kZWNvZGVyLndyaXRlKHQpO3JldHVybiByJiYobis9dGhpcy5fZGVjb2Rlci5lbmQoKSksbn19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZTtuLmJhc2U9cig1NDUpLG4uc2hvcnQ9cig1NDgpLG4ubW9udD1yKDU0Nyksbi5lZHdhcmRzPXIoNTQ2KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0W2U+PjVdfD0xMjg8PGUlMzIsdFsoZSs2ND4+Pjk8PDQpKzE0XT1lO2Zvcih2YXIgcj0xNzMyNTg0MTkzLG49LTI3MTczMzg3OSxpPS0xNzMyNTg0MTk0LGg9MjcxNzMzODc4LGM9MDtjPHQubGVuZ3RoO2MrPTE2KXt2YXIgZD1yLGw9bixwPWksYj1oO3I9byhyLG4saSxoLHRbYyswXSw3LC02ODA4NzY5MzYpLGg9byhoLHIsbixpLHRbYysxXSwxMiwtMzg5NTY0NTg2KSxpPW8oaSxoLHIsbix0W2MrMl0sMTcsNjA2MTA1ODE5KSxuPW8obixpLGgscix0W2MrM10sMjIsLTEwNDQ1MjUzMzApLHI9byhyLG4saSxoLHRbYys0XSw3LC0xNzY0MTg4OTcpLGg9byhoLHIsbixpLHRbYys1XSwxMiwxMjAwMDgwNDI2KSxpPW8oaSxoLHIsbix0W2MrNl0sMTcsLTE0NzMyMzEzNDEpLG49byhuLGksaCxyLHRbYys3XSwyMiwtNDU3MDU5ODMpLHI9byhyLG4saSxoLHRbYys4XSw3LDE3NzAwMzU0MTYpLGg9byhoLHIsbixpLHRbYys5XSwxMiwtMTk1ODQxNDQxNyksaT1vKGksaCxyLG4sdFtjKzEwXSwxNywtNDIwNjMpLG49byhuLGksaCxyLHRbYysxMV0sMjIsLTE5OTA0MDQxNjIpLHI9byhyLG4saSxoLHRbYysxMl0sNywxODA0NjAzNjgyKSxoPW8oaCxyLG4saSx0W2MrMTNdLDEyLC00MDM0MTEwMSksaT1vKGksaCxyLG4sdFtjKzE0XSwxNywtMTUwMjAwMjI5MCksbj1vKG4saSxoLHIsdFtjKzE1XSwyMiwxMjM2NTM1MzI5KSxyPWEocixuLGksaCx0W2MrMV0sNSwtMTY1Nzk2NTEwKSxoPWEoaCxyLG4saSx0W2MrNl0sOSwtMTA2OTUwMTYzMiksaT1hKGksaCxyLG4sdFtjKzExXSwxNCw2NDM3MTc3MTMpLG49YShuLGksaCxyLHRbYyswXSwyMCwtMzczODk3MzAyKSxyPWEocixuLGksaCx0W2MrNV0sNSwtNzAxNTU4NjkxKSxoPWEoaCxyLG4saSx0W2MrMTBdLDksMzgwMTYwODMpLGk9YShpLGgscixuLHRbYysxNV0sMTQsLTY2MDQ3ODMzNSksbj1hKG4saSxoLHIsdFtjKzRdLDIwLC00MDU1Mzc4NDgpLHI9YShyLG4saSxoLHRbYys5XSw1LDU2ODQ0NjQzOCksaD1hKGgscixuLGksdFtjKzE0XSw5LC0xMDE5ODAzNjkwKSxpPWEoaSxoLHIsbix0W2MrM10sMTQsLTE4NzM2Mzk2MSksbj1hKG4saSxoLHIsdFtjKzhdLDIwLDExNjM1MzE1MDEpLHI9YShyLG4saSxoLHRbYysxM10sNSwtMTQ0NDY4MTQ2NyksaD1hKGgscixuLGksdFtjKzJdLDksLTUxNDAzNzg0KSxpPWEoaSxoLHIsbix0W2MrN10sMTQsMTczNTMyODQ3Myksbj1hKG4saSxoLHIsdFtjKzEyXSwyMCwtMTkyNjYwNzczNCkscj1mKHIsbixpLGgsdFtjKzVdLDQsLTM3ODU1OCksaD1mKGgscixuLGksdFtjKzhdLDExLC0yMDIyNTc0NDYzKSxpPWYoaSxoLHIsbix0W2MrMTFdLDE2LDE4MzkwMzA1NjIpLG49ZihuLGksaCxyLHRbYysxNF0sMjMsLTM1MzA5NTU2KSxyPWYocixuLGksaCx0W2MrMV0sNCwtMTUzMDk5MjA2MCksaD1mKGgscixuLGksdFtjKzRdLDExLDEyNzI4OTMzNTMpLGk9ZihpLGgscixuLHRbYys3XSwxNiwtMTU1NDk3NjMyKSxuPWYobixpLGgscix0W2MrMTBdLDIzLC0xMDk0NzMwNjQwKSxyPWYocixuLGksaCx0W2MrMTNdLDQsNjgxMjc5MTc0KSxoPWYoaCxyLG4saSx0W2MrMF0sMTEsLTM1ODUzNzIyMiksaT1mKGksaCxyLG4sdFtjKzNdLDE2LC03MjI1MjE5NzkpLG49ZihuLGksaCxyLHRbYys2XSwyMyw3NjAyOTE4OSkscj1mKHIsbixpLGgsdFtjKzldLDQsLTY0MDM2NDQ4NyksaD1mKGgscixuLGksdFtjKzEyXSwxMSwtNDIxODE1ODM1KSxpPWYoaSxoLHIsbix0W2MrMTVdLDE2LDUzMDc0MjUyMCksbj1mKG4saSxoLHIsdFtjKzJdLDIzLC05OTUzMzg2NTEpLHI9cyhyLG4saSxoLHRbYyswXSw2LC0xOTg2MzA4NDQpLGg9cyhoLHIsbixpLHRbYys3XSwxMCwxMTI2ODkxNDE1KSxpPXMoaSxoLHIsbix0W2MrMTRdLDE1LC0xNDE2MzU0OTA1KSxuPXMobixpLGgscix0W2MrNV0sMjEsLTU3NDM0MDU1KSxyPXMocixuLGksaCx0W2MrMTJdLDYsMTcwMDQ4NTU3MSksaD1zKGgscixuLGksdFtjKzNdLDEwLC0xODk0OTg2NjA2KSxpPXMoaSxoLHIsbix0W2MrMTBdLDE1LC0xMDUxNTIzKSxuPXMobixpLGgscix0W2MrMV0sMjEsLTIwNTQ5MjI3OTkpLHI9cyhyLG4saSxoLHRbYys4XSw2LDE4NzMzMTMzNTkpLGg9cyhoLHIsbixpLHRbYysxNV0sMTAsLTMwNjExNzQ0KSxpPXMoaSxoLHIsbix0W2MrNl0sMTUsLTE1NjAxOTgzODApLG49cyhuLGksaCxyLHRbYysxM10sMjEsMTMwOTE1MTY0OSkscj1zKHIsbixpLGgsdFtjKzRdLDYsLTE0NTUyMzA3MCksaD1zKGgscixuLGksdFtjKzExXSwxMCwtMTEyMDIxMDM3OSksaT1zKGksaCxyLG4sdFtjKzJdLDE1LDcxODc4NzI1OSksbj1zKG4saSxoLHIsdFtjKzldLDIxLC0zNDM0ODU1NTEpLHI9dShyLGQpLG49dShuLGwpLGk9dShpLHApLGg9dShoLGIpfXJldHVybiBBcnJheShyLG4saSxoKX1mdW5jdGlvbiBpKHQsZSxyLG4saSxvKXtyZXR1cm4gdShoKHUodShlLHQpLHUobixvKSksaSkscil9ZnVuY3Rpb24gbyh0LGUscixuLG8sYSxmKXtyZXR1cm4gaShlJnJ8fmUmbix0LGUsbyxhLGYpfWZ1bmN0aW9uIGEodCxlLHIsbixvLGEsZil7cmV0dXJuIGkoZSZufHImfm4sdCxlLG8sYSxmKX1mdW5jdGlvbiBmKHQsZSxyLG4sbyxhLGYpe3JldHVybiBpKGVecl5uLHQsZSxvLGEsZil9ZnVuY3Rpb24gcyh0LGUscixuLG8sYSxmKXtyZXR1cm4gaShyXihlfH5uKSx0LGUsbyxhLGYpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj0oNjU1MzUmdCkrKDY1NTM1JmUpLG49KHQ+PjE2KSsoZT4+MTYpKyhyPj4xNik7cmV0dXJuIG48PDE2fDY1NTM1JnJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0PDxlfHQ+Pj4zMi1lfXZhciBjPXIoNTY1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGMuaGFzaCh0LG4sMTYpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5iaWdudW09cig3MCksbi5kZWZpbmU9cig1ODApLmRlZmluZSxuLmJhc2U9cig3MSksbi5jb25zdGFudHM9cigyMzUpLG4uZGVjb2RlcnM9cig1ODQpLG4uZW5jb2RlcnM9cig1ODYpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7dmFyIGUscjtyZXR1cm4gZT10PmZ8fHQ8MD8ocj1NYXRoLmFicyh0KSVmLHQ8MD9mLXI6cik6dH1mdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7dCsrKXRbZV09MDtyZXR1cm4hMX1mdW5jdGlvbiBpKCl7dGhpcy5TQk9YPVtdLHRoaXMuSU5WX1NCT1g9W10sdGhpcy5TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5JTlZfU1VCX01JWD1bW10sW10sW10sW11dLHRoaXMuaW5pdCgpLHRoaXMuUkNPTj1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5sZW5ndGgvNCxyPW5ldyBBcnJheShlKSxuPS0xOysrbjxlOylyW25dPXQucmVhZFVJbnQzMkJFKDQqbik7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXt0aGlzLl9rZXk9byh0KSx0aGlzLl9kb1Jlc2V0KCl9dmFyIGY9TWF0aC5wb3coMiwzMik7aS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksbyxhLGYscyx1O2Zvcih0PWZ1bmN0aW9uKCl7dmFyIHQscjtmb3Iocj1bXSxlPXQ9MDt0PDI1NjtlPSsrdCllPDEyOD9yLnB1c2goZTw8MSk6ci5wdXNoKGU8PDFeMjgzKTtyZXR1cm4gcn0oKSxpPTAscz0wLGU9dT0wO3U8MjU2O2U9Kyt1KXI9c15zPDwxXnM8PDJeczw8M15zPDw0LHI9cj4+PjheMjU1JnJeOTksdGhpcy5TQk9YW2ldPXIsdGhpcy5JTlZfU0JPWFtyXT1pLG89dFtpXSxhPXRbb10sZj10W2FdLG49MjU3KnRbcl1eMTY4NDMwMDgqcix0aGlzLlNVQl9NSVhbMF1baV09bjw8MjR8bj4+PjgsdGhpcy5TVUJfTUlYWzFdW2ldPW48PDE2fG4+Pj4xNix0aGlzLlNVQl9NSVhbMl1baV09bjw8OHxuPj4+MjQsdGhpcy5TVUJfTUlYWzNdW2ldPW4sbj0xNjg0MzAwOSpmXjY1NTM3KmFeMjU3Km9eMTY4NDMwMDgqaSx0aGlzLklOVl9TVUJfTUlYWzBdW3JdPW48PDI0fG4+Pj44LHRoaXMuSU5WX1NVQl9NSVhbMV1bcl09bjw8MTZ8bj4+PjE2LHRoaXMuSU5WX1NVQl9NSVhbMl1bcl09bjw8OHxuPj4+MjQsdGhpcy5JTlZfU1VCX01JWFszXVtyXT1uLDA9PT1pP2k9cz0xOihpPW9edFt0W3RbZl5vXV1dLHNePXRbdFtzXV0pO3JldHVybiEwfTt2YXIgcz1uZXcgaTthLmJsb2NrU2l6ZT0xNixhLnByb3RvdHlwZS5ibG9ja1NpemU9YS5ibG9ja1NpemUsYS5rZXlTaXplPTMyLGEucHJvdG90eXBlLmtleVNpemU9YS5rZXlTaXplLGEucHJvdG90eXBlLl9kb1Jlc2V0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvO2ZvcihyPXRoaXMuX2tleSxlPXIubGVuZ3RoLHRoaXMuX25Sb3VuZHM9ZSs2LGk9NCoodGhpcy5fblJvdW5kcysxKSx0aGlzLl9rZXlTY2hlZHVsZT1bXSxuPTA7bjxpO24rKyl0aGlzLl9rZXlTY2hlZHVsZVtuXT1uPGU/cltuXToobz10aGlzLl9rZXlTY2hlZHVsZVtuLTFdLG4lZT09PTA/KG89bzw8OHxvPj4+MjQsbz1zLlNCT1hbbz4+PjI0XTw8MjR8cy5TQk9YW28+Pj4xNiYyNTVdPDwxNnxzLlNCT1hbbz4+PjgmMjU1XTw8OHxzLlNCT1hbMjU1Jm9dLG9ePXMuUkNPTltuL2V8MF08PDI0KTplPjYmJm4lZT09PTQ/bz1zLlNCT1hbbz4+PjI0XTw8MjR8cy5TQk9YW28+Pj4xNiYyNTVdPDwxNnxzLlNCT1hbbz4+PjgmMjU1XTw8OHxzLlNCT1hbMjU1Jm9dOnZvaWQgMCx0aGlzLl9rZXlTY2hlZHVsZVtuLWVdXm8pO2Zvcih0aGlzLl9pbnZLZXlTY2hlZHVsZT1bXSx0PTA7dDxpO3QrKyluPWktdCxvPXRoaXMuX2tleVNjaGVkdWxlW24tKHQlND8wOjQpXSx0aGlzLl9pbnZLZXlTY2hlZHVsZVt0XT10PDR8fG48PTQ/bzpzLklOVl9TVUJfTUlYWzBdW3MuU0JPWFtvPj4+MjRdXV5zLklOVl9TVUJfTUlYWzFdW3MuU0JPWFtvPj4+MTYmMjU1XV1ecy5JTlZfU1VCX01JWFsyXVtzLlNCT1hbbz4+PjgmMjU1XV1ecy5JTlZfU1VCX01JWFszXVtzLlNCT1hbMjU1Jm9dXTtyZXR1cm4hMH0sYS5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKGUpe2U9byhuZXcgdChlKSk7dmFyIHI9dGhpcy5fZG9DcnlwdEJsb2NrKGUsdGhpcy5fa2V5U2NoZWR1bGUscy5TVUJfTUlYLHMuU0JPWCksbj1uZXcgdCgxNik7cmV0dXJuIG4ud3JpdGVVSW50MzJCRShyWzBdLDApLG4ud3JpdGVVSW50MzJCRShyWzFdLDQpLG4ud3JpdGVVSW50MzJCRShyWzJdLDgpLG4ud3JpdGVVSW50MzJCRShyWzNdLDEyKSxufSxhLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oZSl7ZT1vKG5ldyB0KGUpKTt2YXIgcj1bZVszXSxlWzFdXTtlWzFdPXJbMF0sZVszXT1yWzFdO3ZhciBuPXRoaXMuX2RvQ3J5cHRCbG9jayhlLHRoaXMuX2ludktleVNjaGVkdWxlLHMuSU5WX1NVQl9NSVgscy5JTlZfU0JPWCksaT1uZXcgdCgxNik7cmV0dXJuIGkud3JpdGVVSW50MzJCRShuWzBdLDApLGkud3JpdGVVSW50MzJCRShuWzNdLDQpLGkud3JpdGVVSW50MzJCRShuWzJdLDgpLGkud3JpdGVVSW50MzJCRShuWzFdLDEyKSxpfSxhLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe24odGhpcy5fa2V5U2NoZWR1bGUpLG4odGhpcy5faW52S2V5U2NoZWR1bGUpLG4odGhpcy5fa2V5KX0sYS5wcm90b3R5cGUuX2RvQ3J5cHRCbG9jaz1mdW5jdGlvbih0LGUsbixpKXt2YXIgbyxhLGYscyx1LGgsYyxkLGw7YT10WzBdXmVbMF0sZj10WzFdXmVbMV0scz10WzJdXmVbMl0sdT10WzNdXmVbM10sbz00O2Zvcih2YXIgcD0xO3A8dGhpcy5fblJvdW5kcztwKyspaD1uWzBdW2E+Pj4yNF1eblsxXVtmPj4+MTYmMjU1XV5uWzJdW3M+Pj44JjI1NV1eblszXVsyNTUmdV1eZVtvKytdLGM9blswXVtmPj4+MjRdXm5bMV1bcz4+PjE2JjI1NV1eblsyXVt1Pj4+OCYyNTVdXm5bM11bMjU1JmFdXmVbbysrXSxkPW5bMF1bcz4+PjI0XV5uWzFdW3U+Pj4xNiYyNTVdXm5bMl1bYT4+PjgmMjU1XV5uWzNdWzI1NSZmXV5lW28rK10sbD1uWzBdW3U+Pj4yNF1eblsxXVthPj4+MTYmMjU1XV5uWzJdW2Y+Pj44JjI1NV1eblszXVsyNTUmc11eZVtvKytdLGE9aCxmPWMscz1kLHU9bDtyZXR1cm4gaD0oaVthPj4+MjRdPDwyNHxpW2Y+Pj4xNiYyNTVdPDwxNnxpW3M+Pj44JjI1NV08PDh8aVsyNTUmdV0pXmVbbysrXSxjPShpW2Y+Pj4yNF08PDI0fGlbcz4+PjE2JjI1NV08PDE2fGlbdT4+PjgmMjU1XTw8OHxpWzI1NSZhXSleZVtvKytdLGQ9KGlbcz4+PjI0XTw8MjR8aVt1Pj4+MTYmMjU1XTw8MTZ8aVthPj4+OCYyNTVdPDw4fGlbMjU1JmZdKV5lW28rK10sbD0oaVt1Pj4+MjRdPDwyNHxpW2E+Pj4xNiYyNTVdPDwxNnxpW2Y+Pj44JjI1NV08PDh8aVsyNTUmc10pXmVbbysrXSxbcihoKSxyKGMpLHIoZCkscihsKV19LGUuQUVTPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGg7ci0tOyl7aWYoZT10LnJlYWRVSW50OChyKSwyNTUhPT1lKXtlKyssdC53cml0ZVVJbnQ4KGUscik7YnJlYWt9dC53cml0ZVVJbnQ4KDAscil9fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KTtyZXR1cm4gbih0Ll9wcmV2KSxlfXZhciBvPXIoNzIpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIpe2Zvcig7ZS5fY2FjaGUubGVuZ3RoPHIubGVuZ3RoOyllLl9jYWNoZT10LmNvbmNhdChbZS5fY2FjaGUsaShlKV0pO3ZhciBuPWUuX2NhY2hlLnNsaWNlKDAsci5sZW5ndGgpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShyLmxlbmd0aCksbyhyLG4pfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT1cInN0cmluZ1wiPT10eXBlb2YgdCx0aGlzLmhhc2hNb2RlP3RoaXNbdF09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9dmFyIGk9cigzMSkuVHJhbnNmb3JtLG89cigyKSxhPXIoNTIpLlN0cmluZ0RlY29kZXI7dC5leHBvcnRzPW4sbyhuLGkpLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LHIsbil7XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQscikpO3ZhciBpPXRoaXMuX3VwZGF0ZSh0KTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihuJiYoaT10aGlzLl90b1N0cmluZyhpLG4pKSxpKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3ZhciBuO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh0KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHQpKX1jYXRjaCh0KXtuPXR9ZmluYWxseXtyKG4pfX0sbi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0aGlzLnB1c2godGhpcy5fZmluYWwoKSl9Y2F0Y2godCl7ZT10fWZpbmFsbHl7dChlKX19LG4ucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX2ZpbmFsKCl8fG5ldyBlKFwiXCIpO3JldHVybiB0JiYocj10aGlzLl90b1N0cmluZyhyLHQsITApKSxyfSxuLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBhKGUpLHRoaXMuX2VuY29kaW5nPWUpLHRoaXMuX2VuY29kaW5nIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzXCIpO3ZhciBuPXRoaXMuX2RlY29kZXIud3JpdGUodCk7cmV0dXJuIHImJihuKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxufX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH1mdW5jdGlvbiBuKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9ZnVuY3Rpb24gaSh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdH1mdW5jdGlvbiBvKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBhKHQpe3JldHVybiB2b2lkIDA9PT10fXQuZXhwb3J0cz1yLHIuRXZlbnRFbWl0dGVyPXIsci5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsci5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDAsci5kZWZhdWx0TWF4TGlzdGVuZXJzPTEwLHIucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbih0KXtpZighaSh0KXx8dDwwfHxpc05hTih0KSl0aHJvdyBUeXBlRXJyb3IoXCJuIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXJcIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz10LHRoaXN9LHIucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24odCl7dmFyIGUscixpLGYscyx1O2lmKHRoaXMuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz17fSksXCJlcnJvclwiPT09dCYmKCF0aGlzLl9ldmVudHMuZXJyb3J8fG8odGhpcy5fZXZlbnRzLmVycm9yKSYmIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKXtpZihlPWFyZ3VtZW50c1sxXSxlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgZTt2YXIgaD1uZXcgRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuICgnK2UrXCIpXCIpO3Rocm93IGguY29udGV4dD1lLGh9aWYocj10aGlzLl9ldmVudHNbdF0sYShyKSlyZXR1cm4hMTtpZihuKHIpKXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6ci5jYWxsKHRoaXMpO2JyZWFrO2Nhc2UgMjpyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0pO2JyZWFrO2Nhc2UgMzpyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTticmVhaztkZWZhdWx0OmY9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHIuYXBwbHkodGhpcyxmKX1lbHNlIGlmKG8ocikpZm9yKGY9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHU9ci5zbGljZSgpLGk9dS5sZW5ndGgscz0wO3M8aTtzKyspdVtzXS5hcHBseSh0aGlzLGYpO3JldHVybiEwfSxyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciBpO2lmKCFuKGUpKXRocm93IFR5cGVFcnJvcihcImxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvblwiKTtyZXR1cm4gdGhpcy5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPXt9KSx0aGlzLl9ldmVudHMubmV3TGlzdGVuZXImJnRoaXMuZW1pdChcIm5ld0xpc3RlbmVyXCIsdCxuKGUubGlzdGVuZXIpP2UubGlzdGVuZXI6ZSksdGhpcy5fZXZlbnRzW3RdP28odGhpcy5fZXZlbnRzW3RdKT90aGlzLl9ldmVudHNbdF0ucHVzaChlKTp0aGlzLl9ldmVudHNbdF09W3RoaXMuX2V2ZW50c1t0XSxlXTp0aGlzLl9ldmVudHNbdF09ZSxvKHRoaXMuX2V2ZW50c1t0XSkmJiF0aGlzLl9ldmVudHNbdF0ud2FybmVkJiYoaT1hKHRoaXMuX21heExpc3RlbmVycyk/ci5kZWZhdWx0TWF4TGlzdGVuZXJzOnRoaXMuX21heExpc3RlbmVycyxpJiZpPjAmJnRoaXMuX2V2ZW50c1t0XS5sZW5ndGg+aSYmKHRoaXMuX2V2ZW50c1t0XS53YXJuZWQ9ITAsY29uc29sZS5lcnJvcihcIihub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuXCIsdGhpcy5fZXZlbnRzW3RdLmxlbmd0aCksXCJmdW5jdGlvblwiPT10eXBlb2YgY29uc29sZS50cmFjZSYmY29uc29sZS50cmFjZSgpKSksdGhpc30sci5wcm90b3R5cGUub249ci5wcm90b3R5cGUuYWRkTGlzdGVuZXIsci5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUxpc3RlbmVyKHQsciksaXx8KGk9ITAsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfWlmKCFuKGUpKXRocm93IFR5cGVFcnJvcihcImxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvblwiKTt2YXIgaT0hMTtyZXR1cm4gci5saXN0ZW5lcj1lLHRoaXMub24odCxyKSx0aGlzfSxyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxmO2lmKCFuKGUpKXRocm93IFR5cGVFcnJvcihcImxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvblwiKTtpZighdGhpcy5fZXZlbnRzfHwhdGhpcy5fZXZlbnRzW3RdKXJldHVybiB0aGlzO2lmKHI9dGhpcy5fZXZlbnRzW3RdLGE9ci5sZW5ndGgsaT0tMSxyPT09ZXx8bihyLmxpc3RlbmVyKSYmci5saXN0ZW5lcj09PWUpZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsdCxlKTtlbHNlIGlmKG8ocikpe2ZvcihmPWE7Zi0tID4wOylpZihyW2ZdPT09ZXx8cltmXS5saXN0ZW5lciYmcltmXS5saXN0ZW5lcj09PWUpe2k9ZjticmVha31pZihpPDApcmV0dXJuIHRoaXM7MT09PXIubGVuZ3RoPyhyLmxlbmd0aD0wLGRlbGV0ZSB0aGlzLl9ldmVudHNbdF0pOnIuc3BsaWNlKGksMSksdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lclwiLHQsZSl9cmV0dXJuIHRoaXN9LHIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbih0KXt2YXIgZSxyO2lmKCF0aGlzLl9ldmVudHMpcmV0dXJuIHRoaXM7aWYoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fZXZlbnRzPXt9OnRoaXMuX2V2ZW50c1t0XSYmZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoZSBpbiB0aGlzLl9ldmVudHMpXCJyZW1vdmVMaXN0ZW5lclwiIT09ZSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoZSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwicmVtb3ZlTGlzdGVuZXJcIiksdGhpcy5fZXZlbnRzPXt9LHRoaXN9aWYocj10aGlzLl9ldmVudHNbdF0sbihyKSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQscik7ZWxzZSBpZihyKWZvcig7ci5sZW5ndGg7KXRoaXMucmVtb3ZlTGlzdGVuZXIodCxyW3IubGVuZ3RoLTFdKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSx0aGlzfSxyLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHNbdF0/bih0aGlzLl9ldmVudHNbdF0pP1t0aGlzLl9ldmVudHNbdF1dOnRoaXMuX2V2ZW50c1t0XS5zbGljZSgpOltdfSxyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2V2ZW50cyl7dmFyIGU9dGhpcy5fZXZlbnRzW3RdO2lmKG4oZSkpcmV0dXJuIDE7aWYoZSlyZXR1cm4gZS5sZW5ndGh9cmV0dXJuIDB9LHIubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxpc3RlbmVyQ291bnQoZSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17bmV3SW52YWxpZEFzbjFFcnJvcjpmdW5jdGlvbih0KXt2YXIgZT1uZXcgRXJyb3I7cmV0dXJuIGUubmFtZT1cIkludmFsaWRBc24xRXJyb3JcIixlLm1lc3NhZ2U9dHx8XCJcIixlfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtFT0M6MCxCb29sZWFuOjEsSW50ZWdlcjoyLEJpdFN0cmluZzozLE9jdGV0U3RyaW5nOjQsTnVsbDo1LE9JRDo2LE9iamVjdERlc2NyaXB0b3I6NyxFeHRlcm5hbDo4LFJlYWw6OSxFbnVtZXJhdGlvbjoxMCxQRFY6MTEsVXRmOFN0cmluZzoxMixSZWxhdGl2ZU9JRDoxMyxTZXF1ZW5jZToxNixTZXQ6MTcsTnVtZXJpY1N0cmluZzoxOCxQcmludGFibGVTdHJpbmc6MTksVDYxU3RyaW5nOjIwLFZpZGVvdGV4U3RyaW5nOjIxLElBNVN0cmluZzoyMixVVENUaW1lOjIzLEdlbmVyYWxpemVkVGltZToyNCxHcmFwaGljU3RyaW5nOjI1LFZpc2libGVTdHJpbmc6MjYsR2VuZXJhbFN0cmluZzoyOCxVbml2ZXJzYWxTdHJpbmc6MjksQ2hhcmFjdGVyU3RyaW5nOjMwLEJNUFN0cmluZzozMSxDb25zdHJ1Y3RvcjozMixDb250ZXh0OjEyOH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoNjIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1yKDkzKSxzPXIoOTEpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtuKHRoaXMsZSk7dmFyIHI9aSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5jYWxsKHRoaXMpKTtyZXR1cm4gci5oYXNoPWYuY3JlYXRlSGFzaCh0KSxyfXJldHVybiBvKGUsdCksYShlLFt7a2V5Olwid3JpdGVcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmhhc2gudXBkYXRlKHQpfX0se2tleTpcImdldERpZ2VzdFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaC5kaWdlc3QoKX19XSxbe2tleTpcImdldExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBmLmNyZWF0ZUhhc2godCkuZGlnZXN0KCkubGVuZ3RofX1dKSxlfShzKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDI2MSksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtuKHRoaXMsdCl9cmV0dXJuIGkodCxudWxsLFt7a2V5OlwiZ2V0Q2xhc3NGcm9tVHlwZUlkXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUil0aHJvdyBuZXcgbyhcIlR5cGUgXCIrZStcIiBpcyBub3Qgc3VwcG9ydGVkXCIpO3ZhciByPSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgYSxmPXQucmVnaXN0ZXJlZFR5cGVzW1N5bWJvbC5pdGVyYXRvcl0oKTshKHI9KGE9Zi5uZXh0KCkpLmRvbmUpO3I9ITApe3ZhciBzPWEudmFsdWU7aWYoZT09PXMudHlwZUlkKXJldHVybiBzLkNsYXNzfX1jYXRjaCh0KXtuPSEwLGk9dH1maW5hbGx5e3RyeXshciYmZi5yZXR1cm4mJmYucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fXRocm93IG5ldyBvKFwiVHlwZSBcIitlK1wiIGlzIG5vdCBzdXBwb3J0ZWRcIil9fSx7a2V5OlwicmVnaXN0ZXJUeXBlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dC5yZWdpc3RlcmVkVHlwZXMucHVzaCh7dHlwZUlkOmUuVFlQRV9JRCxDbGFzczplfSl9fV0pLHR9KCk7YS5yZWdpc3RlcmVkVHlwZXM9W10sdC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3IodGhpcyx0KX1yZXR1cm4gbih0LG51bGwsW3trZXk6XCJkZWNvZGVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LnJlcGxhY2UoL1xcLS9nLFwiK1wiKS5yZXBsYWNlKC9fL2csXCIvXCIpO3JldHVybiBuZXcgZShyLFwiYmFzZTY0XCIpfX0se2tleTpcImVuY29kZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKFwiYmFzZTY0XCIpLnJlcGxhY2UoLz0vZyxcIlwiKS5yZXBsYWNlKC9cXCsvZyxcIi1cIikucmVwbGFjZSgvXFwvL2csXCJfXCIpfX1dKSx0fSgpO3QuZXhwb3J0cz1pfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz0hcigxNjQpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxMSksaT1yKDQ3KSxvPXIoMTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0aGlzKSxyPW8oZS5sZW5ndGgpLGE9YXJndW1lbnRzLmxlbmd0aCxmPWkoYT4xP2FyZ3VtZW50c1sxXTp2b2lkIDAscikscz1hPjI/YXJndW1lbnRzWzJdOnZvaWQgMCx1PXZvaWQgMD09PXM/cjppKHMscik7dT5mOyllW2YrK109dDtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDkpLGk9cigzNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlIGluIHQ/bi5mKHQsZSxpKDAscikpOnRbZV09cn19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cig0KS5kb2N1bWVudCxvPW4oaSkmJm4oaS5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG8/aS5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9XCJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2ZcIi5zcGxpdChcIixcIil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDcpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS8uLzt0cnl7XCIvLi9cIlt0XShlKX1jYXRjaChyKXt0cnl7cmV0dXJuIGVbbl09ITEsIVwiLy4vXCJbdF0oZSl9Y2F0Y2godCl7fX1yZXR1cm4hMH19LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cig0KS5kb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMTMyKS5zZXQ7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxhPWUuY29uc3RydWN0b3I7cmV0dXJuIGEhPT1yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYobz1hLnByb3RvdHlwZSkhPT1yLnByb3RvdHlwZSYmbihvKSYmaSYmaSh0LG8pLHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig1NiksaT1yKDcpKFwiaXRlcmF0b3JcIiksbz1BcnJheS5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10JiYobi5BcnJheT09PXR8fG9baV09PT10KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIzKTt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJBcnJheVwiPT1uKHQpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNDIpLGk9cigzNyksbz1yKDU3KSxhPXt9O3IoMTQpKGEscig3KShcIml0ZXJhdG9yXCIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3QucHJvdG90eXBlPW4oYSx7bmV4dDppKDEscil9KSxvKHQsZStcIiBJdGVyYXRvclwiKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQxKSxpPXIoMCksbz1yKDE1KSxhPXIoMTQpLGY9cigxMikscz1yKDU2KSx1PXIoMTI3KSxoPXIoNTcpLGM9cigyMSksZD1yKDcpKFwiaXRlcmF0b3JcIiksbD0hKFtdLmtleXMmJlwibmV4dFwiaW5bXS5rZXlzKCkpLHA9XCJAQGl0ZXJhdG9yXCIsYj1cImtleXNcIix2PVwidmFsdWVzXCIseT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbSxnLHcsXyl7dShyLGUsbSk7dmFyIE0sUyxFLEE9ZnVuY3Rpb24odCl7aWYoIWwmJnQgaW4gQilyZXR1cm4gQlt0XTtzd2l0Y2godCl7Y2FzZSBiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLHQpfTtjYXNlIHY6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLHQpfX0saz1lK1wiIEl0ZXJhdG9yXCIseD1nPT12LEk9ITEsQj10LnByb3RvdHlwZSxPPUJbZF18fEJbcF18fGcmJkJbZ10sUj1PfHxBKGcpLFA9Zz94P0EoXCJlbnRyaWVzXCIpOlI6dm9pZCAwLFQ9XCJBcnJheVwiPT1lP0IuZW50cmllc3x8TzpPO2lmKFQmJihFPWMoVC5jYWxsKG5ldyB0KSksRSE9PU9iamVjdC5wcm90b3R5cGUmJihoKEUsaywhMCksbnx8ZihFLGQpfHxhKEUsZCx5KSkpLHgmJk8mJk8ubmFtZSE9PXYmJihJPSEwLFI9ZnVuY3Rpb24oKXtyZXR1cm4gTy5jYWxsKHRoaXMpfSksbiYmIV98fCFsJiYhSSYmQltkXXx8YShCLGQsUiksc1tlXT1SLHNba109eSxnKWlmKE09e3ZhbHVlczp4P1I6QSh2KSxrZXlzOnc/UjpBKGIpLGVudHJpZXM6UH0sXylmb3IoUyBpbiBNKVMgaW4gQnx8byhCLFMsTVtTXSk7ZWxzZSBpKGkuUCtpLkYqKGx8fEkpLGUsTSk7cmV0dXJuIE19fSxmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguZXhwbTE7dC5leHBvcnRzPSFyfHxyKDEwKT4yMjAyNS40NjU3OTQ4MDY3MTh8fHIoMTApPDIyMDI1LjQ2NTc5NDgwNjcxOHx8cigtMmUtMTcpIT0tMmUtMTc/ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KT90OnQ+LTFlLTYmJnQ8MWUtNj90K3QqdC8yOk1hdGguZXhwKHQpLTF9OnJ9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KXx8dCE9dD90OnQ8MD8tMToxfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1yKDEzOSkuc2V0LG89bi5NdXRhdGlvbk9ic2VydmVyfHxuLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsYT1uLnByb2Nlc3MsZj1uLlByb21pc2Uscz1cInByb2Nlc3NcIj09cigyMykoYSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLHU9ZnVuY3Rpb24oKXt2YXIgbixpO2ZvcihzJiYobj1hLmRvbWFpbikmJm4uZXhpdCgpO3Q7KXtpPXQuZm4sdD10Lm5leHQ7dHJ5e2koKX1jYXRjaChuKXt0aHJvdyB0P3IoKTplPXZvaWQgMCxufX1lPXZvaWQgMCxuJiZuLmVudGVyKCl9O2lmKHMpcj1mdW5jdGlvbigpe2EubmV4dFRpY2sodSl9O2Vsc2UgaWYobyl7dmFyIGg9ITAsYz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtuZXcgbyh1KS5vYnNlcnZlKGMse2NoYXJhY3RlckRhdGE6ITB9KSxyPWZ1bmN0aW9uKCl7Yy5kYXRhPWg9IWh9fWVsc2UgaWYoZiYmZi5yZXNvbHZlKXt2YXIgZD1mLnJlc29sdmUoKTtyPWZ1bmN0aW9uKCl7ZC50aGVuKHUpfX1lbHNlIHI9ZnVuY3Rpb24oKXtpLmNhbGwobix1KX07cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXtmbjpuLG5leHQ6dm9pZCAwfTtlJiYoZS5uZXh0PWkpLHR8fCh0PWkscigpKSxlPWl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDMpLG89ZnVuY3Rpb24odCxlKXtpZihpKHQpLCFuKGUpJiZudWxsIT09ZSl0aHJvdyBUeXBlRXJyb3IoZStcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIil9O3QuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KFwiX19wcm90b19fXCJpbnt9P2Z1bmN0aW9uKHQsZSxuKXt0cnl7bj1yKDMzKShGdW5jdGlvbi5jYWxsLHIoMjApLmYoT2JqZWN0LnByb3RvdHlwZSxcIl9fcHJvdG9fX1wiKS5zZXQsMiksbih0LFtdKSxlPSEodCBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaCh0KXtlPSEwfXJldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBvKHQsciksZT90Ll9fcHJvdG9fXz1yOm4odCxyKSx0fX0oe30sITEpOnZvaWQgMCksY2hlY2s6b319LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDg3KShcImtleXNcIiksaT1yKDQ4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF18fChuW3RdPWkodCkpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMyksaT1yKDEzKSxvPXIoNykoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGE9bih0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09YXx8dm9pZCAwPT0ocj1uKGEpW29dKT9lOmkocil9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzOCksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG8sYSxmPVN0cmluZyhpKGUpKSxzPW4ociksdT1mLmxlbmd0aDtyZXR1cm4gczwwfHxzPj11P3Q/XCJcIjp2b2lkIDA6KG89Zi5jaGFyQ29kZUF0KHMpLG88NTUyOTZ8fG8+NTYzMTl8fHMrMT09PXV8fChhPWYuY2hhckNvZGVBdChzKzEpKTw1NjMyMHx8YT41NzM0Mz90P2YuY2hhckF0KHMpOm86dD9mLnNsaWNlKHMscysyKTooby01NTI5Njw8MTApKyhhLTU2MzIwKSs2NTUzNil9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODMpLGk9cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUpKXRocm93IFR5cGVFcnJvcihcIlN0cmluZyNcIityK1wiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtyZXR1cm4gU3RyaW5nKGkodCkpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMzgpLGk9cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyhpKHRoaXMpKSxyPVwiXCIsbz1uKHQpO2lmKG88MHx8bz09MS8wKXRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtmb3IoO28+MDsobz4+Pj0xKSYmKGUrPWUpKTEmbyYmKHIrPWUpO3JldHVybiByfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9XCJcXHRcXG5cXHZcXGZcXHIgwqDhmoDhoI7igIDigIHigILigIPigITigIXigIbigIfigIjigInigIrigK/igZ/jgIBcXHUyMDI4XFx1MjAyOVxcdWZlZmZcIn0sZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxhPXIoMzMpLGY9cig4Mikscz1yKDEyMyksdT1yKDEyMCksaD1yKDQpLGM9aC5wcm9jZXNzLGQ9aC5zZXRJbW1lZGlhdGUsbD1oLmNsZWFySW1tZWRpYXRlLHA9aC5NZXNzYWdlQ2hhbm5lbCxiPTAsdj17fSx5PVwib25yZWFkeXN0YXRlY2hhbmdlXCIsbT1mdW5jdGlvbigpe3ZhciB0PSt0aGlzO2lmKHYuaGFzT3duUHJvcGVydHkodCkpe3ZhciBlPXZbdF07ZGVsZXRlIHZbdF0sZSgpfX0sZz1mdW5jdGlvbih0KXttLmNhbGwodC5kYXRhKX07ZCYmbHx8KGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MTthcmd1bWVudHMubGVuZ3RoPnI7KWUucHVzaChhcmd1bWVudHNbcisrXSk7cmV0dXJuIHZbKytiXT1mdW5jdGlvbigpe2YoXCJmdW5jdGlvblwiPT10eXBlb2YgdD90OkZ1bmN0aW9uKHQpLGUpfSxuKGIpLGJ9LGw9ZnVuY3Rpb24odCl7ZGVsZXRlIHZbdF19LFwicHJvY2Vzc1wiPT1yKDIzKShjKT9uPWZ1bmN0aW9uKHQpe2MubmV4dFRpY2soYShtLHQsMSkpfTpwPyhpPW5ldyBwLG89aS5wb3J0MixpLnBvcnQxLm9ubWVzc2FnZT1nLG49YShvLnBvc3RNZXNzYWdlLG8sMSkpOmguYWRkRXZlbnRMaXN0ZW5lciYmXCJmdW5jdGlvblwiPT10eXBlb2YgcG9zdE1lc3NhZ2UmJiFoLmltcG9ydFNjcmlwdHM/KG49ZnVuY3Rpb24odCl7aC5wb3N0TWVzc2FnZSh0K1wiXCIsXCIqXCIpfSxoLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsZywhMSkpOm49eSBpbiB1KFwic2NyaXB0XCIpP2Z1bmN0aW9uKHQpe3MuYXBwZW5kQ2hpbGQodShcInNjcmlwdFwiKSlbeV09ZnVuY3Rpb24oKXtzLnJlbW92ZUNoaWxkKHRoaXMpLG0uY2FsbCh0KX19OmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoYShtLHQsMSksMCl9KSx0LmV4cG9ydHM9e3NldDpkLGNsZWFyOmx9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0KSxpPXIoOCksbz1yKDQxKSxhPXIoODgpLGY9cigxNCkscz1yKDQ1KSx1PXIoNSksaD1yKDQwKSxjPXIoMzgpLGQ9cigxMCksbD1yKDQzKS5mLHA9cig5KS5mLGI9cigxMTgpLHY9cig1NykseT1cIkFycmF5QnVmZmVyXCIsbT1cIkRhdGFWaWV3XCIsZz1cInByb3RvdHlwZVwiLHc9XCJXcm9uZyBsZW5ndGghXCIsXz1cIldyb25nIGluZGV4IVwiLE09blt5XSxTPW5bbV0sRT1uLk1hdGgsQT1uLlJhbmdlRXJyb3Isaz1uLkluZmluaXR5LHg9TSxJPUUuYWJzLEI9RS5wb3csTz1FLmZsb29yLFI9RS5sb2csUD1FLkxOMixUPVwiYnVmZmVyXCIsaj1cImJ5dGVMZW5ndGhcIixDPVwiYnl0ZU9mZnNldFwiLE49aT9cIl9iXCI6VCxMPWk/XCJfbFwiOmosVT1pP1wiX29cIjpDLHo9ZnVuY3Rpb24odCxlLHIpe1xudmFyIG4saSxvLGE9QXJyYXkociksZj04KnItZS0xLHM9KDE8PGYpLTEsdT1zPj4xLGg9MjM9PT1lP0IoMiwtMjQpLUIoMiwtNzcpOjAsYz0wLGQ9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PUkodCksdCE9dHx8dD09PWs/KGk9dCE9dD8xOjAsbj1zKToobj1PKFIodCkvUCksdCoobz1CKDIsLW4pKTwxJiYobi0tLG8qPTIpLHQrPW4rdT49MT9oL286aCpCKDIsMS11KSx0Km8+PTImJihuKyssby89Miksbit1Pj1zPyhpPTAsbj1zKTpuK3U+PTE/KGk9KHQqby0xKSpCKDIsZSksbis9dSk6KGk9dCpCKDIsdS0xKSpCKDIsZSksbj0wKSk7ZT49ODthW2MrK109MjU1JmksaS89MjU2LGUtPTgpO2ZvcihuPW48PGV8aSxmKz1lO2Y+MDthW2MrK109MjU1Jm4sbi89MjU2LGYtPTgpO3JldHVybiBhWy0tY118PTEyOCpkLGF9LEQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9OCpyLWUtMSxvPSgxPDxpKS0xLGE9bz4+MSxmPWktNyxzPXItMSx1PXRbcy0tXSxoPTEyNyZ1O2Zvcih1Pj49NztmPjA7aD0yNTYqaCt0W3NdLHMtLSxmLT04KTtmb3Iobj1oJigxPDwtZiktMSxoPj49LWYsZis9ZTtmPjA7bj0yNTYqbit0W3NdLHMtLSxmLT04KTtpZigwPT09aCloPTEtYTtlbHNle2lmKGg9PT1vKXJldHVybiBuP05hTjp1Py1rOms7bis9QigyLGUpLGgtPWF9cmV0dXJuKHU/LTE6MSkqbipCKDIsaC1lKX0scT1mdW5jdGlvbih0KXtyZXR1cm4gdFszXTw8MjR8dFsyXTw8MTZ8dFsxXTw8OHx0WzBdfSxGPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdF19LEs9ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1XX0sRz1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTUsdD4+MTYmMjU1LHQ+PjI0JjI1NV19LFY9ZnVuY3Rpb24odCl7cmV0dXJuIHoodCw1Miw4KX0sSD1mdW5jdGlvbih0KXtyZXR1cm4geih0LDIzLDQpfSxYPWZ1bmN0aW9uKHQsZSxyKXtwKHRbZ10sZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbcl19fSl9LFk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9K3Isbz1jKGkpO2lmKGkhPW98fG88MHx8bytlPnRbTF0pdGhyb3cgQShfKTt2YXIgYT10W05dLl9iLGY9byt0W1VdLHM9YS5zbGljZShmLGYrZSk7cmV0dXJuIG4/czpzLnJldmVyc2UoKX0sVz1mdW5jdGlvbih0LGUscixuLGksbyl7dmFyIGE9K3IsZj1jKGEpO2lmKGEhPWZ8fGY8MHx8ZitlPnRbTF0pdGhyb3cgQShfKTtmb3IodmFyIHM9dFtOXS5fYix1PWYrdFtVXSxoPW4oK2kpLGQ9MDtkPGU7ZCsrKXNbdStkXT1oW28/ZDplLWQtMV19LFo9ZnVuY3Rpb24odCxlKXtoKHQsTSx5KTt2YXIgcj0rZSxuPWQocik7aWYociE9bil0aHJvdyBBKHcpO3JldHVybiBufTtpZihhLkFCVil7aWYoIXUoZnVuY3Rpb24oKXtuZXcgTX0pfHwhdShmdW5jdGlvbigpe25ldyBNKC41KX0pKXtNPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeChaKHRoaXMsdCkpfTtmb3IodmFyIEosJD1NW2ddPXhbZ10sUT1sKHgpLHR0PTA7US5sZW5ndGg+dHQ7KShKPVFbdHQrK10paW4gTXx8ZihNLEoseFtKXSk7b3x8KCQuY29uc3RydWN0b3I9TSl9dmFyIGV0PW5ldyBTKG5ldyBNKDIpKSxydD1TW2ddLnNldEludDg7ZXQuc2V0SW50OCgwLDIxNDc0ODM2NDgpLGV0LnNldEludDgoMSwyMTQ3NDgzNjQ5KSwhZXQuZ2V0SW50OCgwKSYmZXQuZ2V0SW50OCgxKXx8cyhTW2ddLHtzZXRJbnQ4OmZ1bmN0aW9uKHQsZSl7cnQuY2FsbCh0aGlzLHQsZTw8MjQ+PjI0KX0sc2V0VWludDg6ZnVuY3Rpb24odCxlKXtydC5jYWxsKHRoaXMsdCxlPDwyND4+MjQpfX0sITApfWVsc2UgTT1mdW5jdGlvbih0KXt2YXIgZT1aKHRoaXMsdCk7dGhpcy5fYj1iLmNhbGwoQXJyYXkoZSksMCksdGhpc1tMXT1lfSxTPWZ1bmN0aW9uKHQsZSxyKXtoKHRoaXMsUyxtKSxoKHQsTSxtKTt2YXIgbj10W0xdLGk9YyhlKTtpZihpPDB8fGk+bil0aHJvdyBBKFwiV3Jvbmcgb2Zmc2V0IVwiKTtpZihyPXZvaWQgMD09PXI/bi1pOmQociksaStyPm4pdGhyb3cgQSh3KTt0aGlzW05dPXQsdGhpc1tVXT1pLHRoaXNbTF09cn0saSYmKFgoTSxqLFwiX2xcIiksWChTLFQsXCJfYlwiKSxYKFMsaixcIl9sXCIpLFgoUyxDLFwiX29cIikpLHMoU1tnXSx7Z2V0SW50ODpmdW5jdGlvbih0KXtyZXR1cm4gWSh0aGlzLDEsdClbMF08PDI0Pj4yNH0sZ2V0VWludDg6ZnVuY3Rpb24odCl7cmV0dXJuIFkodGhpcywxLHQpWzBdfSxnZXRJbnQxNjpmdW5jdGlvbih0KXt2YXIgZT1ZKHRoaXMsMix0LGFyZ3VtZW50c1sxXSk7cmV0dXJuKGVbMV08PDh8ZVswXSk8PDE2Pj4xNn0sZ2V0VWludDE2OmZ1bmN0aW9uKHQpe3ZhciBlPVkodGhpcywyLHQsYXJndW1lbnRzWzFdKTtyZXR1cm4gZVsxXTw8OHxlWzBdfSxnZXRJbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gcShZKHRoaXMsNCx0LGFyZ3VtZW50c1sxXSkpfSxnZXRVaW50MzI6ZnVuY3Rpb24odCl7cmV0dXJuIHEoWSh0aGlzLDQsdCxhcmd1bWVudHNbMV0pKT4+PjB9LGdldEZsb2F0MzI6ZnVuY3Rpb24odCl7cmV0dXJuIEQoWSh0aGlzLDQsdCxhcmd1bWVudHNbMV0pLDIzLDQpfSxnZXRGbG9hdDY0OmZ1bmN0aW9uKHQpe3JldHVybiBEKFkodGhpcyw4LHQsYXJndW1lbnRzWzFdKSw1Miw4KX0sc2V0SW50ODpmdW5jdGlvbih0LGUpe1codGhpcywxLHQsRixlKX0sc2V0VWludDg6ZnVuY3Rpb24odCxlKXtXKHRoaXMsMSx0LEYsZSl9LHNldEludDE2OmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDIsdCxLLGUsYXJndW1lbnRzWzJdKX0sc2V0VWludDE2OmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDIsdCxLLGUsYXJndW1lbnRzWzJdKX0sc2V0SW50MzI6ZnVuY3Rpb24odCxlKXtXKHRoaXMsNCx0LEcsZSxhcmd1bWVudHNbMl0pfSxzZXRVaW50MzI6ZnVuY3Rpb24odCxlKXtXKHRoaXMsNCx0LEcsZSxhcmd1bWVudHNbMl0pfSxzZXRGbG9hdDMyOmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDQsdCxILGUsYXJndW1lbnRzWzJdKX0sc2V0RmxvYXQ2NDpmdW5jdGlvbih0LGUpe1codGhpcyw4LHQsVixlLGFyZ3VtZW50c1syXSl9fSk7dihNLHkpLHYoUyxtKSxmKFNbZ10sYS5WSUVXLCEwKSxlW3ldPU0sZVttXT1TfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPXIoMzIpLG89cig0MSksYT1yKDE4OSksZj1yKDkpLmY7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkuU3ltYm9sfHwoaS5TeW1ib2w9bz97fTpuLlN5bWJvbHx8e30pO1wiX1wiPT10LmNoYXJBdCgwKXx8dCBpbiBlfHxmKGUsdCx7dmFsdWU6YS5mKHQpfSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2NCksaT1yKDcpKFwiaXRlcmF0b3JcIiksbz1yKDU2KTt0LmV4cG9ydHM9cigzMikuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24odCl7aWYodm9pZCAwIT10KXJldHVybiB0W2ldfHx0W1wiQEBpdGVyYXRvclwiXXx8b1tuKHQpXX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDU0KSxpPXIoMTc3KSxvPXIoNTYpLGE9cigxNyk7dC5leHBvcnRzPXIoMTI4KShBcnJheSxcIkFycmF5XCIsZnVuY3Rpb24odCxlKXt0aGlzLl90PWEodCksdGhpcy5faT0wLHRoaXMuX2s9ZX0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90LGU9dGhpcy5fayxyPXRoaXMuX2krKztyZXR1cm4hdHx8cj49dC5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLGkoMSkpOlwia2V5c1wiPT1lP2koMCxyKTpcInZhbHVlc1wiPT1lP2koMCx0W3JdKTppKDAsW3IsdFtyXV0pfSxcInZhbHVlc1wiKSxvLkFyZ3VtZW50cz1vLkFycmF5LG4oXCJrZXlzXCIpLG4oXCJ2YWx1ZXNcIiksbihcImVudHJpZXNcIil9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoMTk5KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UudXRpbHM9cig1MDUpLGUuQ2lwaGVyPXIoNTAyKSxlLkRFUz1yKDUwMyksZS5DQkM9cig1MDEpLGUuRURFPXIoNTA0KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixuLG8pe2UuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQsXCJiaW5hcnlcIikpLHImJiFlLmlzQnVmZmVyKHIpJiYocj1uZXcgZShyLFwiYmluYXJ5XCIpKSxuLz04LG89b3x8MDtmb3IodmFyIGEsZixzPTAsdT0wLGg9bmV3IGUobiksYz1uZXcgZShvKSxkPTAsbD1bXTs7KXtpZihkKys+MCYmbC5wdXNoKGEpLGwucHVzaCh0KSxyJiZsLnB1c2gociksYT1pKGUuY29uY2F0KGwpKSxsPVtdLGY9MCxuPjApZm9yKDs7KXtpZigwPT09bilicmVhaztpZihmPT09YS5sZW5ndGgpYnJlYWs7aFtzKytdPWFbZl0sbi0tLGYrK31pZihvPjAmJmYhPT1hLmxlbmd0aClmb3IoOzspe2lmKDA9PT1vKWJyZWFrO2lmKGY9PT1hLmxlbmd0aClicmVhaztjW3UrK109YVtmXSxvLS0sZisrfWlmKDA9PT1uJiYwPT09bylicmVha31mb3IoZj0wO2Y8YS5sZW5ndGg7ZisrKWFbZl09MDtyZXR1cm57a2V5OmgsaXY6Y319dmFyIGk9cigxMDUpO3QuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlW1wiYWVzLTEyOC1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTkyLWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTEyOC1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTI1Ni1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlLmFlczEyOD1lW1wiYWVzLTEyOC1jYmNcIl0sZS5hZXMxOTI9ZVtcImFlcy0xOTItY2JjXCJdLGUuYWVzMjU2PWVbXCJhZXMtMjU2LWNiY1wiXSxlW1wiYWVzLTEyOC1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMTkyLWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn0sZVtcImFlcy0yNTYtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixuLG8pe2UuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQsXCJiaW5hcnlcIikpLHImJiFlLmlzQnVmZmVyKHIpJiYocj1uZXcgZShyLFwiYmluYXJ5XCIpKSxuLz04LG89b3x8MDtmb3IodmFyIGEsZixzPTAsdT0wLGg9bmV3IGUobiksYz1uZXcgZShvKSxkPTAsbD1bXTs7KXtpZihkKys+MCYmbC5wdXNoKGEpLGwucHVzaCh0KSxyJiZsLnB1c2gociksYT1pKGUuY29uY2F0KGwpKSxsPVtdLGY9MCxuPjApZm9yKDs7KXtpZigwPT09bilicmVhaztpZihmPT09YS5sZW5ndGgpYnJlYWs7aFtzKytdPWFbZl0sbi0tLGYrK31pZihvPjAmJmYhPT1hLmxlbmd0aClmb3IoOzspe2lmKDA9PT1vKWJyZWFrO2lmKGY9PT1hLmxlbmd0aClicmVhaztjW3UrK109YVtmXSxvLS0sZisrfWlmKDA9PT1uJiYwPT09bylicmVha31mb3IoZj0wO2Y8YS5sZW5ndGg7ZisrKWFbZl09MDtyZXR1cm57a2V5OmgsaXY6Y319dmFyIGk9cigxMDUpO3QuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscil7YS5jYWxsKHRoaXMpLHQ9dC50b0xvd2VyQ2FzZSgpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgZShyKSk7dmFyIG49XCJzaGE1MTJcIj09PXR8fFwic2hhMzg0XCI9PT10PzEyODo2NDt0aGlzLl9hbGc9dCx0aGlzLl9rZXk9cixyLmxlbmd0aD5uP3I9aSh0KS51cGRhdGUocikuZGlnZXN0KCk6ci5sZW5ndGg8biYmKHI9ZS5jb25jYXQoW3IsZl0sbikpO2Zvcih2YXIgbz10aGlzLl9pcGFkPW5ldyBlKG4pLHM9dGhpcy5fb3BhZD1uZXcgZShuKSx1PTA7dTxuO3UrKylvW3VdPTU0XnJbdV0sc1t1XT05Ml5yW3VdO3RoaXMuX2hhc2g9aSh0KS51cGRhdGUobyl9dmFyIGk9cig1OSksbz1yKDIpLGE9cigzMSkuVHJhbnNmb3JtLGY9bmV3IGUoMTI4KTtmLmZpbGwoMCksbyhuLGEpLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSh0LGUpLHRoaXN9LG4ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2hhc2gudXBkYXRlKHQpLHIoKX0sbi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKSx0KCl9LG4ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBpKHRoaXMuX2FsZykudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShlKS5kaWdlc3QodCl9LHQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgbih0LGUpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIG8uaXNCTih0KT90Oih0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCx2b2lkKG51bGwhPT10JiYoXCJsZVwiIT09ZSYmXCJiZVwiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8XCJiZVwiKSkpKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MCxpPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGk7bysrKXt2YXIgYT10LmNoYXJDb2RlQXQobyktNDg7bjw8PTQsbnw9YT49NDkmJmE8PTU0P2EtNDkrMTA6YT49MTcmJmE8PTIyP2EtMTcrMTA6MTUmYX1yZXR1cm4gbn1mdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaT0wLG89TWF0aC5taW4odC5sZW5ndGgsciksYT1lO2E8bzthKyspe3ZhciBmPXQuY2hhckNvZGVBdChhKS00ODtpKj1uLGkrPWY+PTQ5P2YtNDkrMTA6Zj49MTc/Zi0xNysxMDpmfXJldHVybiBpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0LmJpdExlbmd0aCgpKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXIvMjZ8MCxpPXIlMjY7ZVtyXT0odC53b3Jkc1tuXSYxPDxpKT4+Pml9cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLG89MHxlLndvcmRzWzBdLGE9aSpvLGY9NjcxMDg4NjMmYSxzPWEvNjcxMDg4NjR8MDtyLndvcmRzWzBdPWY7Zm9yKHZhciB1PTE7dTxuO3UrKyl7Zm9yKHZhciBoPXM+Pj4yNixjPTY3MTA4ODYzJnMsZD1NYXRoLm1pbih1LGUubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCx1LXQubGVuZ3RoKzEpO2w8PWQ7bCsrKXt2YXIgcD11LWx8MDtpPTB8dC53b3Jkc1twXSxvPTB8ZS53b3Jkc1tsXSxhPWkqbytjLGgrPWEvNjcxMDg4NjR8MCxjPTY3MTA4ODYzJmF9ci53b3Jkc1t1XT0wfGMscz0wfGh9cmV0dXJuIDAhPT1zP3Iud29yZHNbdV09MHxzOnIubGVuZ3RoLS0sci5zdHJpcCgpfWZ1bmN0aW9uIGgodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxvPTA7bzxyLmxlbmd0aC0xO28rKyl7dmFyIGE9aTtpPTA7Zm9yKHZhciBmPTY3MTA4ODYzJm4scz1NYXRoLm1pbihvLGUubGVuZ3RoLTEpLHU9TWF0aC5tYXgoMCxvLXQubGVuZ3RoKzEpO3U8PXM7dSsrKXt2YXIgaD1vLXUsYz0wfHQud29yZHNbaF0sZD0wfGUud29yZHNbdV0sbD1jKmQscD02NzEwODg2MyZsO2E9YSsobC82NzEwODg2NHwwKXwwLHA9cCtmfDAsZj02NzEwODg2MyZwLGE9YSsocD4+PjI2KXwwLGkrPWE+Pj4yNixhJj02NzEwODg2M31yLndvcmRzW29dPWYsbj1hLGE9aX1yZXR1cm4gMCE9PW4/ci53b3Jkc1tvXT1uOnIubGVuZ3RoLS0sci5zdHJpcCgpfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPW5ldyBkO3JldHVybiBuLm11bHAodCxlLHIpfWZ1bmN0aW9uIGQodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiBsKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBvKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBvKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBwKCl7bC5jYWxsKHRoaXMsXCJrMjU2XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiKX1mdW5jdGlvbiBiKCl7bC5jYWxsKHRoaXMsXCJwMjI0XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMVwiKX1mdW5jdGlvbiB2KCl7bC5jYWxsKHRoaXMsXCJwMTkyXCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZlwiKX1mdW5jdGlvbiB5KCl7bC5jYWxsKHRoaXMsXCIyNTUxOVwiLFwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiKX1mdW5jdGlvbiBtKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgZT1vLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksXCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDFcIiksdGhpcy5tPXQsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGcodCl7bS5jYWxsKHRoaXMsdCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9PTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IG8oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9XCJvYmplY3RcIj09dHlwZW9mIHQ/dC5leHBvcnRzPW86ZS5CTj1vLG8uQk49byxvLndvcmRTaXplPTI2O3ZhciB3O3RyeXt3PXIoMSkuQnVmZmVyfWNhdGNoKHQpe31vLmlzQk49ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvfHxudWxsIT09dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3Iud29yZFNpemU9PT1vLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHQud29yZHMpfSxvLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKT4wP3Q6ZX0sby5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk8MD90OmV9LG8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdE51bWJlcih0LGUscik7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUscik7XCJoZXhcIj09PWUmJihlPTE2KSxuKGU9PT0oMHxlKSYmZT49MiYmZTw9MzYpLHQ9dC50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZyxcIlwiKTt2YXIgaT0wO1wiLVwiPT09dFswXSYmaSsrLDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGkpOnRoaXMuX3BhcnNlQmFzZSh0LGUsaSksXCItXCI9PT10WzBdJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHQsZSxyKXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0Lmxlbmd0aCksdC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgbyxhLGY9MDtpZihcImJlXCI9PT1yKWZvcihpPXQubGVuZ3RoLTEsbz0wO2k+PTA7aS09MylhPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO2Vsc2UgaWYoXCJsZVwiPT09cilmb3IoaT0wLG89MDtpPHQubGVuZ3RoO2krPTMpYT10W2ldfHRbaSsxXTw8OHx0W2krMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24odCxlKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPTA7dmFyIG4saSxvPTA7Zm9yKHI9dC5sZW5ndGgtNixuPTA7cj49ZTtyLT02KWk9YSh0LHIscis2KSx0aGlzLndvcmRzW25dfD1pPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LW8mNDE5NDMwMyxvKz0yNCxvPj0yNiYmKG8tPTI2LG4rKyk7cis2IT09ZSYmKGk9YSh0LGUscis2KSx0aGlzLndvcmRzW25dfD1pPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LW8mNDE5NDMwMyksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGk9MTtpPD02NzEwODg2MztpKj1lKW4rKztuLS0saT1pL2V8MDtmb3IodmFyIG89dC5sZW5ndGgtcixhPW8lbixzPU1hdGgubWluKG8sby1hKStyLHU9MCxoPXI7aDxzO2grPW4pdT1mKHQsaCxoK24sZSksdGhpcy5pbXVsbihpKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KTtpZigwIT09YSl7dmFyIGM9MTtmb3IodT1mKHQsaCx0Lmxlbmd0aCxlKSxoPTA7aDxhO2grKyljKj1lO3RoaXMuaW11bG4oYyksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSl9fSxvLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBvKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0sby5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxvLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD9cIjxCTi1SOiBcIjpcIjxCTjogXCIpK3RoaXMudG9TdHJpbmcoMTYpK1wiPlwifTt2YXIgXz1bXCJcIixcIjBcIixcIjAwXCIsXCIwMDBcIixcIjAwMDBcIixcIjAwMDAwXCIsXCIwMDAwMDBcIixcIjAwMDAwMDBcIixcIjAwMDAwMDAwXCIsXCIwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIl0sTT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxTPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO28ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dD10fHwxMCxlPTB8ZXx8MTt2YXIgcjtpZigxNj09PXR8fFwiaGV4XCI9PT10KXtyPVwiXCI7Zm9yKHZhciBpPTAsbz0wLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9dGhpcy53b3Jkc1thXSxzPSgxNjc3NzIxNSYoZjw8aXxvKSkudG9TdHJpbmcoMTYpO289Zj4+PjI0LWkmMTY3NzcyMTUscj0wIT09b3x8YSE9PXRoaXMubGVuZ3RoLTE/X1s2LXMubGVuZ3RoXStzK3I6cytyLGkrPTIsaT49MjYmJihpLT0yNixhLS0pfWZvcigwIT09byYmKHI9by50b1N0cmluZygxNikrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIHU9TVt0XSxoPVNbdF07cj1cIlwiO3ZhciBjPXRoaXMuY2xvbmUoKTtmb3IoYy5uZWdhdGl2ZT0wOyFjLmlzWmVybygpOyl7dmFyIGQ9Yy5tb2RuKGgpLnRvU3RyaW5nKHQpO2M9Yy5pZGl2bihoKSxyPWMuaXNaZXJvKCk/ZCtyOl9bdS1kLmxlbmd0aF0rZCtyfWZvcih0aGlzLmlzWmVybygpJiYocj1cIjBcIityKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1uKCExLFwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNlwiKX0sby5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/dCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3QrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLFwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzXCIpLDAhPT10aGlzLm5lZ2F0aXZlPy10OnR9LG8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sby5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcInVuZGVmaW5lZFwiIT10eXBlb2YgdyksdGhpcy50b0FycmF5TGlrZSh3LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5ieXRlTGVuZ3RoKCksbz1yfHxNYXRoLm1heCgxLGkpO24oaTw9byxcImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGhcIiksbihvPjAsXCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDBcIiksdGhpcy5zdHJpcCgpO3ZhciBhLGYscz1cImxlXCI9PT1lLHU9bmV3IHQobyksaD10aGlzLmNsb25lKCk7aWYocyl7Zm9yKGY9MDshaC5pc1plcm8oKTtmKyspYT1oLmFuZGxuKDI1NSksaC5pdXNocm4oOCksdVtmXT1hO2Zvcig7ZjxvO2YrKyl1W2ZdPTB9ZWxzZXtmb3IoZj0wO2Y8by1pO2YrKyl1W2ZdPTA7Zm9yKGY9MDshaC5pc1plcm8oKTtmKyspYT1oLmFuZGxuKDI1NSksaC5pdXNocm4oOCksdVtvLWYtMV09YX1yZXR1cm4gdX0sTWF0aC5jbHozMj9vLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTpvLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0sby5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09PSgxJmUpJiZyKysscn0sby5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxlPXRoaXMuX2NvdW50Qml0cyh0KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2V9LG8ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbZV0pO2lmKHQrPXIsMjYhPT1yKWJyZWFrfXJldHVybiB0fSxvLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxvLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXN0bih0LTEpP3RoaXMubm90bih0KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LG8ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LG8ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMud29yZHNbZV09dGhpcy53b3Jkc1tlXXx0LndvcmRzW2VdO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0sby5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0sby5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0sby5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LG8ucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LG8ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LG8ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih0KX0sby5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0sby5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHQpOnQuY2xvbmUoKS5pdXhvcih0aGlzKX0sby5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxvLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIHI9dC8yNnwwLGk9dCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksZT90aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3ZhciByLG47dGhpcy5sZW5ndGg+dC5sZW5ndGg/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGk9MCxvPTA7bzxuLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKSsoMHxuLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtmb3IoOzAhPT1pJiZvPHIubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odC5uZWdhdGl2ZT0wLGU9dGhpcy5zdWIodCksdC5uZWdhdGl2ZV49MSxlKTowPT09dC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxlPXQuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxlKTp0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh0KTp0LmNsb25lKCkuaWFkZCh0aGlzKX0sby5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0KXtpZigwIT09dC5uZWdhdGl2ZSl7dC5uZWdhdGl2ZT0wO3ZhciBlPXRoaXMuaWFkZCh0KTtyZXR1cm4gdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHI9dGhpcy5jbXAodCk7aWYoMD09PXIpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3ZhciBuLGk7cj4wPyhuPXRoaXMsaT10KToobj10LGk9dGhpcyk7Zm9yKHZhciBvPTAsYT0wO2E8aS5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSktKDB8aS53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtmb3IoOzAhPT1vJiZhPG4ubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7aWYoMD09PW8mJmE8bi5sZW5ndGgmJm4hPT10aGlzKWZvcig7YTxuLmxlbmd0aDthKyspdGhpcy53b3Jkc1thXT1uLndvcmRzW2FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxhKSxuIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgRT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGE9dC53b3JkcyxmPWUud29yZHMscz1yLndvcmRzLHU9MCxoPTB8YVswXSxjPTgxOTEmaCxkPWg+Pj4xMyxsPTB8YVsxXSxwPTgxOTEmbCxiPWw+Pj4xMyx2PTB8YVsyXSx5PTgxOTEmdixtPXY+Pj4xMyxnPTB8YVszXSx3PTgxOTEmZyxfPWc+Pj4xMyxNPTB8YVs0XSxTPTgxOTEmTSxFPU0+Pj4xMyxBPTB8YVs1XSxrPTgxOTEmQSx4PUE+Pj4xMyxJPTB8YVs2XSxCPTgxOTEmSSxPPUk+Pj4xMyxSPTB8YVs3XSxQPTgxOTEmUixUPVI+Pj4xMyxqPTB8YVs4XSxDPTgxOTEmaixOPWo+Pj4xMyxMPTB8YVs5XSxVPTgxOTEmTCx6PUw+Pj4xMyxEPTB8ZlswXSxxPTgxOTEmRCxGPUQ+Pj4xMyxLPTB8ZlsxXSxHPTgxOTEmSyxWPUs+Pj4xMyxIPTB8ZlsyXSxYPTgxOTEmSCxZPUg+Pj4xMyxXPTB8ZlszXSxaPTgxOTEmVyxKPVc+Pj4xMywkPTB8Zls0XSxRPTgxOTEmJCx0dD0kPj4+MTMsZXQ9MHxmWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfGZbNl0sb3Q9ODE5MSZpdCxhdD1pdD4+PjEzLGZ0PTB8Zls3XSxzdD04MTkxJmZ0LHV0PWZ0Pj4+MTMsaHQ9MHxmWzhdLGN0PTgxOTEmaHQsZHQ9aHQ+Pj4xMyxsdD0wfGZbOV0scHQ9ODE5MSZsdCxidD1sdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5LG49TWF0aC5pbXVsKGMscSksaT1NYXRoLmltdWwoYyxGKSxpPWkrTWF0aC5pbXVsKGQscSl8MCxvPU1hdGguaW11bChkLEYpO3ZhciB2dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwocCxxKSxpPU1hdGguaW11bChwLEYpLGk9aStNYXRoLmltdWwoYixxKXwwLG89TWF0aC5pbXVsKGIsRiksbj1uK01hdGguaW11bChjLEcpfDAsaT1pK01hdGguaW11bChjLFYpfDAsaT1pK01hdGguaW11bChkLEcpfDAsbz1vK01hdGguaW11bChkLFYpfDA7dmFyIHl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bCh5LHEpLGk9TWF0aC5pbXVsKHksRiksaT1pK01hdGguaW11bChtLHEpfDAsbz1NYXRoLmltdWwobSxGKSxuPW4rTWF0aC5pbXVsKHAsRyl8MCxpPWkrTWF0aC5pbXVsKHAsVil8MCxpPWkrTWF0aC5pbXVsKGIsRyl8MCxvPW8rTWF0aC5pbXVsKGIsVil8MCxuPW4rTWF0aC5pbXVsKGMsWCl8MCxpPWkrTWF0aC5pbXVsKGMsWSl8MCxpPWkrTWF0aC5pbXVsKGQsWCl8MCxvPW8rTWF0aC5pbXVsKGQsWSl8MDt2YXIgbXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHcscSksaT1NYXRoLmltdWwodyxGKSxpPWkrTWF0aC5pbXVsKF8scSl8MCxvPU1hdGguaW11bChfLEYpLG49bitNYXRoLmltdWwoeSxHKXwwLGk9aStNYXRoLmltdWwoeSxWKXwwLGk9aStNYXRoLmltdWwobSxHKXwwLG89bytNYXRoLmltdWwobSxWKXwwLG49bitNYXRoLmltdWwocCxYKXwwLGk9aStNYXRoLmltdWwocCxZKXwwLGk9aStNYXRoLmltdWwoYixYKXwwLG89bytNYXRoLmltdWwoYixZKXwwLG49bitNYXRoLmltdWwoYyxaKXwwLGk9aStNYXRoLmltdWwoYyxKKXwwLGk9aStNYXRoLmltdWwoZCxaKXwwLG89bytNYXRoLmltdWwoZCxKKXwwO3ZhciBndD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoZ3Q+Pj4yNil8MCxndCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUyxxKSxpPU1hdGguaW11bChTLEYpLGk9aStNYXRoLmltdWwoRSxxKXwwLG89TWF0aC5pbXVsKEUsRiksbj1uK01hdGguaW11bCh3LEcpfDAsaT1pK01hdGguaW11bCh3LFYpfDAsaT1pK01hdGguaW11bChfLEcpfDAsbz1vK01hdGguaW11bChfLFYpfDAsbj1uK01hdGguaW11bCh5LFgpfDAsaT1pK01hdGguaW11bCh5LFkpfDAsaT1pK01hdGguaW11bChtLFgpfDAsbz1vK01hdGguaW11bChtLFkpfDAsbj1uK01hdGguaW11bChwLFopfDAsaT1pK01hdGguaW11bChwLEopfDAsaT1pK01hdGguaW11bChiLFopfDAsbz1vK01hdGguaW11bChiLEopfDAsbj1uK01hdGguaW11bChjLFEpfDAsaT1pK01hdGguaW11bChjLHR0KXwwLGk9aStNYXRoLmltdWwoZCxRKXwwLG89bytNYXRoLmltdWwoZCx0dCl8MDt2YXIgd3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGsscSksaT1NYXRoLmltdWwoayxGKSxpPWkrTWF0aC5pbXVsKHgscSl8MCxvPU1hdGguaW11bCh4LEYpLG49bitNYXRoLmltdWwoUyxHKXwwLGk9aStNYXRoLmltdWwoUyxWKXwwLGk9aStNYXRoLmltdWwoRSxHKXwwLG89bytNYXRoLmltdWwoRSxWKXwwLG49bitNYXRoLmltdWwodyxYKXwwLGk9aStNYXRoLmltdWwodyxZKXwwLGk9aStNYXRoLmltdWwoXyxYKXwwLG89bytNYXRoLmltdWwoXyxZKXwwLG49bitNYXRoLmltdWwoeSxaKXwwLGk9aStNYXRoLmltdWwoeSxKKXwwLGk9aStNYXRoLmltdWwobSxaKXwwLG89bytNYXRoLmltdWwobSxKKXwwLG49bitNYXRoLmltdWwocCxRKXwwLGk9aStNYXRoLmltdWwocCx0dCl8MCxpPWkrTWF0aC5pbXVsKGIsUSl8MCxvPW8rTWF0aC5pbXVsKGIsdHQpfDAsbj1uK01hdGguaW11bChjLHJ0KXwwLGk9aStNYXRoLmltdWwoYyxudCl8MCxpPWkrTWF0aC5pbXVsKGQscnQpfDAsbz1vK01hdGguaW11bChkLG50KXwwO3ZhciBfdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixxKSxpPU1hdGguaW11bChCLEYpLGk9aStNYXRoLmltdWwoTyxxKXwwLG89TWF0aC5pbXVsKE8sRiksbj1uK01hdGguaW11bChrLEcpfDAsaT1pK01hdGguaW11bChrLFYpfDAsaT1pK01hdGguaW11bCh4LEcpfDAsbz1vK01hdGguaW11bCh4LFYpfDAsbj1uK01hdGguaW11bChTLFgpfDAsaT1pK01hdGguaW11bChTLFkpfDAsaT1pK01hdGguaW11bChFLFgpfDAsbz1vK01hdGguaW11bChFLFkpfDAsbj1uK01hdGguaW11bCh3LFopfDAsaT1pK01hdGguaW11bCh3LEopfDAsaT1pK01hdGguaW11bChfLFopfDAsbz1vK01hdGguaW11bChfLEopfDAsbj1uK01hdGguaW11bCh5LFEpfDAsaT1pK01hdGguaW11bCh5LHR0KXwwLGk9aStNYXRoLmltdWwobSxRKXwwLG89bytNYXRoLmltdWwobSx0dCl8MCxuPW4rTWF0aC5pbXVsKHAscnQpfDAsaT1pK01hdGguaW11bChwLG50KXwwLGk9aStNYXRoLmltdWwoYixydCl8MCxvPW8rTWF0aC5pbXVsKGIsbnQpfDAsbj1uK01hdGguaW11bChjLG90KXwwLGk9aStNYXRoLmltdWwoYyxhdCl8MCxpPWkrTWF0aC5pbXVsKGQsb3QpfDAsbz1vK01hdGguaW11bChkLGF0KXwwO3ZhciBNdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUCxxKSxpPU1hdGguaW11bChQLEYpLGk9aStNYXRoLmltdWwoVCxxKXwwLG89TWF0aC5pbXVsKFQsRiksbj1uK01hdGguaW11bChCLEcpfDAsaT1pK01hdGguaW11bChCLFYpfDAsaT1pK01hdGguaW11bChPLEcpfDAsbz1vK01hdGguaW11bChPLFYpfDAsbj1uK01hdGguaW11bChrLFgpfDAsaT1pK01hdGguaW11bChrLFkpfDAsaT1pK01hdGguaW11bCh4LFgpfDAsbz1vK01hdGguaW11bCh4LFkpfDAsbj1uK01hdGguaW11bChTLFopfDAsaT1pK01hdGguaW11bChTLEopfDAsaT1pK01hdGguaW11bChFLFopfDAsbz1vK01hdGguaW11bChFLEopfDAsbj1uK01hdGguaW11bCh3LFEpfDAsaT1pK01hdGguaW11bCh3LHR0KXwwLGk9aStNYXRoLmltdWwoXyxRKXwwLG89bytNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKHkscnQpfDAsaT1pK01hdGguaW11bCh5LG50KXwwLGk9aStNYXRoLmltdWwobSxydCl8MCxvPW8rTWF0aC5pbXVsKG0sbnQpfDAsbj1uK01hdGguaW11bChwLG90KXwwLGk9aStNYXRoLmltdWwocCxhdCl8MCxpPWkrTWF0aC5pbXVsKGIsb3QpfDAsbz1vK01hdGguaW11bChiLGF0KXwwLG49bitNYXRoLmltdWwoYyxzdCl8MCxpPWkrTWF0aC5pbXVsKGMsdXQpfDAsaT1pK01hdGguaW11bChkLHN0KXwwLG89bytNYXRoLmltdWwoZCx1dCl8MDt2YXIgU3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMscSksaT1NYXRoLmltdWwoQyxGKSxpPWkrTWF0aC5pbXVsKE4scSl8MCxvPU1hdGguaW11bChOLEYpLG49bitNYXRoLmltdWwoUCxHKXwwLGk9aStNYXRoLmltdWwoUCxWKXwwLGk9aStNYXRoLmltdWwoVCxHKXwwLG89bytNYXRoLmltdWwoVCxWKXwwLG49bitNYXRoLmltdWwoQixYKXwwLGk9aStNYXRoLmltdWwoQixZKXwwLGk9aStNYXRoLmltdWwoTyxYKXwwLG89bytNYXRoLmltdWwoTyxZKXwwLG49bitNYXRoLmltdWwoayxaKXwwLGk9aStNYXRoLmltdWwoayxKKXwwLGk9aStNYXRoLmltdWwoeCxaKXwwLG89bytNYXRoLmltdWwoeCxKKXwwLG49bitNYXRoLmltdWwoUyxRKXwwLGk9aStNYXRoLmltdWwoUyx0dCl8MCxpPWkrTWF0aC5pbXVsKEUsUSl8MCxvPW8rTWF0aC5pbXVsKEUsdHQpfDAsbj1uK01hdGguaW11bCh3LHJ0KXwwLGk9aStNYXRoLmltdWwodyxudCl8MCxpPWkrTWF0aC5pbXVsKF8scnQpfDAsbz1vK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwoeSxvdCl8MCxpPWkrTWF0aC5pbXVsKHksYXQpfDAsaT1pK01hdGguaW11bChtLG90KXwwLG89bytNYXRoLmltdWwobSxhdCl8MCxuPW4rTWF0aC5pbXVsKHAsc3QpfDAsaT1pK01hdGguaW11bChwLHV0KXwwLGk9aStNYXRoLmltdWwoYixzdCl8MCxvPW8rTWF0aC5pbXVsKGIsdXQpfDAsbj1uK01hdGguaW11bChjLGN0KXwwLGk9aStNYXRoLmltdWwoYyxkdCl8MCxpPWkrTWF0aC5pbXVsKGQsY3QpfDAsbz1vK01hdGguaW11bChkLGR0KXwwO3ZhciBFdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxxKSxpPU1hdGguaW11bChVLEYpLGk9aStNYXRoLmltdWwoeixxKXwwLG89TWF0aC5pbXVsKHosRiksbj1uK01hdGguaW11bChDLEcpfDAsaT1pK01hdGguaW11bChDLFYpfDAsaT1pK01hdGguaW11bChOLEcpfDAsbz1vK01hdGguaW11bChOLFYpfDAsbj1uK01hdGguaW11bChQLFgpfDAsaT1pK01hdGguaW11bChQLFkpfDAsaT1pK01hdGguaW11bChULFgpfDAsbz1vK01hdGguaW11bChULFkpfDAsbj1uK01hdGguaW11bChCLFopfDAsaT1pK01hdGguaW11bChCLEopfDAsaT1pK01hdGguaW11bChPLFopfDAsbz1vK01hdGguaW11bChPLEopfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT1pK01hdGguaW11bChrLHR0KXwwLGk9aStNYXRoLmltdWwoeCxRKXwwLG89bytNYXRoLmltdWwoeCx0dCl8MCxuPW4rTWF0aC5pbXVsKFMscnQpfDAsaT1pK01hdGguaW11bChTLG50KXwwLGk9aStNYXRoLmltdWwoRSxydCl8MCxvPW8rTWF0aC5pbXVsKEUsbnQpfDAsbj1uK01hdGguaW11bCh3LG90KXwwLGk9aStNYXRoLmltdWwodyxhdCl8MCxpPWkrTWF0aC5pbXVsKF8sb3QpfDAsbz1vK01hdGguaW11bChfLGF0KXwwLG49bitNYXRoLmltdWwoeSxzdCl8MCxpPWkrTWF0aC5pbXVsKHksdXQpfDAsaT1pK01hdGguaW11bChtLHN0KXwwLG89bytNYXRoLmltdWwobSx1dCl8MCxuPW4rTWF0aC5pbXVsKHAsY3QpfDAsaT1pK01hdGguaW11bChwLGR0KXwwLGk9aStNYXRoLmltdWwoYixjdCl8MCxvPW8rTWF0aC5pbXVsKGIsZHQpfDAsbj1uK01hdGguaW11bChjLHB0KXwwLGk9aStNYXRoLmltdWwoYyxidCl8MCxpPWkrTWF0aC5pbXVsKGQscHQpfDAsbz1vK01hdGguaW11bChkLGJ0KXwwO3ZhciBBdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxHKSxpPU1hdGguaW11bChVLFYpLGk9aStNYXRoLmltdWwoeixHKXwwLG89TWF0aC5pbXVsKHosViksbj1uK01hdGguaW11bChDLFgpfDAsaT1pK01hdGguaW11bChDLFkpfDAsaT1pK01hdGguaW11bChOLFgpfDAsbz1vK01hdGguaW11bChOLFkpfDAsbj1uK01hdGguaW11bChQLFopfDAsaT1pK01hdGguaW11bChQLEopfDAsaT1pK01hdGguaW11bChULFopfDAsbz1vK01hdGguaW11bChULEopfDAsbj1uK01hdGguaW11bChCLFEpfDAsaT1pK01hdGguaW11bChCLHR0KXwwLGk9aStNYXRoLmltdWwoTyxRKXwwLG89bytNYXRoLmltdWwoTyx0dCl8MCxuPW4rTWF0aC5pbXVsKGsscnQpfDAsaT1pK01hdGguaW11bChrLG50KXwwLGk9aStNYXRoLmltdWwoeCxydCl8MCxvPW8rTWF0aC5pbXVsKHgsbnQpfDAsbj1uK01hdGguaW11bChTLG90KXwwLGk9aStNYXRoLmltdWwoUyxhdCl8MCxpPWkrTWF0aC5pbXVsKEUsb3QpfDAsbz1vK01hdGguaW11bChFLGF0KXwwLG49bitNYXRoLmltdWwodyxzdCl8MCxpPWkrTWF0aC5pbXVsKHcsdXQpfDAsaT1pK01hdGguaW11bChfLHN0KXwwLG89bytNYXRoLmltdWwoXyx1dCl8MCxuPW4rTWF0aC5pbXVsKHksY3QpfDAsaT1pK01hdGguaW11bCh5LGR0KXwwLGk9aStNYXRoLmltdWwobSxjdCl8MCxvPW8rTWF0aC5pbXVsKG0sZHQpfDAsbj1uK01hdGguaW11bChwLHB0KXwwLGk9aStNYXRoLmltdWwocCxidCl8MCxpPWkrTWF0aC5pbXVsKGIscHQpfDAsbz1vK01hdGguaW11bChiLGJ0KXwwO3ZhciBrdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxYKSxpPU1hdGguaW11bChVLFkpLGk9aStNYXRoLmltdWwoeixYKXwwLG89TWF0aC5pbXVsKHosWSksbj1uK01hdGguaW11bChDLFopfDAsaT1pK01hdGguaW11bChDLEopfDAsaT1pK01hdGguaW11bChOLFopfDAsbz1vK01hdGguaW11bChOLEopfDAsbj1uK01hdGguaW11bChQLFEpfDAsaT1pK01hdGguaW11bChQLHR0KXwwLGk9aStNYXRoLmltdWwoVCxRKXwwLG89bytNYXRoLmltdWwoVCx0dCl8MCxuPW4rTWF0aC5pbXVsKEIscnQpfDAsaT1pK01hdGguaW11bChCLG50KXwwLGk9aStNYXRoLmltdWwoTyxydCl8MCxvPW8rTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChrLG90KXwwLGk9aStNYXRoLmltdWwoayxhdCl8MCxpPWkrTWF0aC5pbXVsKHgsb3QpfDAsbz1vK01hdGguaW11bCh4LGF0KXwwLG49bitNYXRoLmltdWwoUyxzdCl8MCxpPWkrTWF0aC5pbXVsKFMsdXQpfDAsaT1pK01hdGguaW11bChFLHN0KXwwLG89bytNYXRoLmltdWwoRSx1dCl8MCxuPW4rTWF0aC5pbXVsKHcsY3QpfDAsaT1pK01hdGguaW11bCh3LGR0KXwwLGk9aStNYXRoLmltdWwoXyxjdCl8MCxvPW8rTWF0aC5pbXVsKF8sZHQpfDAsbj1uK01hdGguaW11bCh5LHB0KXwwLGk9aStNYXRoLmltdWwoeSxidCl8MCxpPWkrTWF0aC5pbXVsKG0scHQpfDAsbz1vK01hdGguaW11bChtLGJ0KXwwO3ZhciB4dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxaKSxpPU1hdGguaW11bChVLEopLGk9aStNYXRoLmltdWwoeixaKXwwLG89TWF0aC5pbXVsKHosSiksbj1uK01hdGguaW11bChDLFEpfDAsaT1pK01hdGguaW11bChDLHR0KXwwLGk9aStNYXRoLmltdWwoTixRKXwwLG89bytNYXRoLmltdWwoTix0dCl8MCxuPW4rTWF0aC5pbXVsKFAscnQpfDAsaT1pK01hdGguaW11bChQLG50KXwwLGk9aStNYXRoLmltdWwoVCxydCl8MCxvPW8rTWF0aC5pbXVsKFQsbnQpfDAsbj1uK01hdGguaW11bChCLG90KXwwLGk9aStNYXRoLmltdWwoQixhdCl8MCxpPWkrTWF0aC5pbXVsKE8sb3QpfDAsbz1vK01hdGguaW11bChPLGF0KXwwLG49bitNYXRoLmltdWwoayxzdCl8MCxpPWkrTWF0aC5pbXVsKGssdXQpfDAsaT1pK01hdGguaW11bCh4LHN0KXwwLG89bytNYXRoLmltdWwoeCx1dCl8MCxuPW4rTWF0aC5pbXVsKFMsY3QpfDAsaT1pK01hdGguaW11bChTLGR0KXwwLGk9aStNYXRoLmltdWwoRSxjdCl8MCxvPW8rTWF0aC5pbXVsKEUsZHQpfDAsbj1uK01hdGguaW11bCh3LHB0KXwwLGk9aStNYXRoLmltdWwodyxidCl8MCxpPWkrTWF0aC5pbXVsKF8scHQpfDAsbz1vK01hdGguaW11bChfLGJ0KXwwO3ZhciBJdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxRKSxpPU1hdGguaW11bChVLHR0KSxpPWkrTWF0aC5pbXVsKHosUSl8MCxvPU1hdGguaW11bCh6LHR0KSxuPW4rTWF0aC5pbXVsKEMscnQpfDAsaT1pK01hdGguaW11bChDLG50KXwwLGk9aStNYXRoLmltdWwoTixydCl8MCxvPW8rTWF0aC5pbXVsKE4sbnQpfDAsbj1uK01hdGguaW11bChQLG90KXwwLGk9aStNYXRoLmltdWwoUCxhdCl8MCxpPWkrTWF0aC5pbXVsKFQsb3QpfDAsbz1vK01hdGguaW11bChULGF0KXwwLG49bitNYXRoLmltdWwoQixzdCl8MCxpPWkrTWF0aC5pbXVsKEIsdXQpfDAsaT1pK01hdGguaW11bChPLHN0KXwwLG89bytNYXRoLmltdWwoTyx1dCl8MCxuPW4rTWF0aC5pbXVsKGssY3QpfDAsaT1pK01hdGguaW11bChrLGR0KXwwLGk9aStNYXRoLmltdWwoeCxjdCl8MCxvPW8rTWF0aC5pbXVsKHgsZHQpfDAsbj1uK01hdGguaW11bChTLHB0KXwwLGk9aStNYXRoLmltdWwoUyxidCl8MCxpPWkrTWF0aC5pbXVsKEUscHQpfDAsbz1vK01hdGguaW11bChFLGJ0KXwwO3ZhciBCdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQnQ+Pj4yNil8MCxCdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxydCksaT1NYXRoLmltdWwoVSxudCksaT1pK01hdGguaW11bCh6LHJ0KXwwLG89TWF0aC5pbXVsKHosbnQpLG49bitNYXRoLmltdWwoQyxvdCl8MCxpPWkrTWF0aC5pbXVsKEMsYXQpfDAsaT1pK01hdGguaW11bChOLG90KXwwLG89bytNYXRoLmltdWwoTixhdCl8MCxuPW4rTWF0aC5pbXVsKFAsc3QpfDAsaT1pK01hdGguaW11bChQLHV0KXwwLGk9aStNYXRoLmltdWwoVCxzdCl8MCxvPW8rTWF0aC5pbXVsKFQsdXQpfDAsbj1uK01hdGguaW11bChCLGN0KXwwLGk9aStNYXRoLmltdWwoQixkdCl8MCxpPWkrTWF0aC5pbXVsKE8sY3QpfDAsbz1vK01hdGguaW11bChPLGR0KXwwLG49bitNYXRoLmltdWwoayxwdCl8MCxpPWkrTWF0aC5pbXVsKGssYnQpfDAsaT1pK01hdGguaW11bCh4LHB0KXwwLG89bytNYXRoLmltdWwoeCxidCl8MDt2YXIgT3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsb3QpLGk9TWF0aC5pbXVsKFUsYXQpLGk9aStNYXRoLmltdWwoeixvdCl8MCxvPU1hdGguaW11bCh6LGF0KSxuPW4rTWF0aC5pbXVsKEMsc3QpfDAsaT1pK01hdGguaW11bChDLHV0KXwwLGk9aStNYXRoLmltdWwoTixzdCl8MCxvPW8rTWF0aC5pbXVsKE4sdXQpfDAsbj1uK01hdGguaW11bChQLGN0KXwwLGk9aStNYXRoLmltdWwoUCxkdCl8MCxpPWkrTWF0aC5pbXVsKFQsY3QpfDAsbz1vK01hdGguaW11bChULGR0KXwwLG49bitNYXRoLmltdWwoQixwdCl8MCxpPWkrTWF0aC5pbXVsKEIsYnQpfDAsaT1pK01hdGguaW11bChPLHB0KXwwLG89bytNYXRoLmltdWwoTyxidCl8MDt2YXIgUnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFJ0Pj4+MjYpfDAsUnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsc3QpLGk9TWF0aC5pbXVsKFUsdXQpLGk9aStNYXRoLmltdWwoeixzdCl8MCxvPU1hdGguaW11bCh6LHV0KSxuPW4rTWF0aC5pbXVsKEMsY3QpfDAsaT1pK01hdGguaW11bChDLGR0KXwwLGk9aStNYXRoLmltdWwoTixjdCl8MCxvPW8rTWF0aC5pbXVsKE4sZHQpfDAsbj1uK01hdGguaW11bChQLHB0KXwwLGk9aStNYXRoLmltdWwoUCxidCl8MCxpPWkrTWF0aC5pbXVsKFQscHQpfDAsbz1vK01hdGguaW11bChULGJ0KXwwO3ZhciBQdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUHQ+Pj4yNil8MCxQdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxjdCksaT1NYXRoLmltdWwoVSxkdCksaT1pK01hdGguaW11bCh6LGN0KXwwLG89TWF0aC5pbXVsKHosZHQpLG49bitNYXRoLmltdWwoQyxwdCl8MCxpPWkrTWF0aC5pbXVsKEMsYnQpfDAsaT1pK01hdGguaW11bChOLHB0KXwwLG89bytNYXRoLmltdWwoTixidCl8MDt2YXIgVHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscHQpLGk9TWF0aC5pbXVsKFUsYnQpLGk9aStNYXRoLmltdWwoeixwdCl8MCxvPU1hdGguaW11bCh6LGJ0KTt2YXIganQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3JldHVybiB1PShvKyhpPj4+MTMpfDApKyhqdD4+PjI2KXwwLGp0Jj02NzEwODg2MyxzWzBdPXZ0LHNbMV09eXQsc1syXT1tdCxzWzNdPWd0LHNbNF09d3Qsc1s1XT1fdCxzWzZdPU10LHNbN109U3Qsc1s4XT1FdCxzWzldPUF0LHNbMTBdPWt0LHNbMTFdPXh0LHNbMTJdPUl0LHNbMTNdPUJ0LHNbMTRdPU90LHNbMTVdPVJ0LHNbMTZdPVB0LHNbMTddPVR0LHNbMThdPWp0LDAhPT11JiYoc1sxOV09dSxyLmxlbmd0aCsrKSxyfTtNYXRoLmltdWx8fChFPXUpLG8ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmxlbmd0aCt0Lmxlbmd0aDtyZXR1cm4gcj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP0UodGhpcyx0LGUpOm48NjM/dSh0aGlzLHQsZSk6bjwxMDI0P2godGhpcyx0LGUpOmModGhpcyx0LGUpfSxkLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj1vLnByb3RvdHlwZS5fY291bnRCaXRzKHQpLTEsbj0wO248dDtuKyspZVtuXT10aGlzLnJldkJpbihuLHIsdCk7cmV0dXJuIGV9LGQucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbih0LGUscil7aWYoMD09PXR8fHQ9PT1yLTEpcmV0dXJuIHQ7Zm9yKHZhciBuPTAsaT0wO2k8ZTtpKyspbnw9KDEmdCk8PGUtaS0xLHQ+Pj0xO3JldHVybiBufSxkLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXtmb3IodmFyIGE9MDthPG87YSsrKW5bYV09ZVt0W2FdXSxpW2FdPXJbdFthXV19LGQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUscixuLGksbyl7dGhpcy5wZXJtdXRlKG8sdCxlLHIsbixpKTtmb3IodmFyIGE9MTthPGk7YTw8PTEpZm9yKHZhciBmPWE8PDEscz1NYXRoLmNvcygyKk1hdGguUEkvZiksdT1NYXRoLnNpbigyKk1hdGguUEkvZiksaD0wO2g8aTtoKz1mKWZvcih2YXIgYz1zLGQ9dSxsPTA7bDxhO2wrKyl7dmFyIHA9cltoK2xdLGI9bltoK2xdLHY9cltoK2wrYV0seT1uW2grbCthXSxtPWMqdi1kKnk7eT1jKnkrZCp2LHY9bSxyW2grbF09cCt2LG5baCtsXT1iK3kscltoK2wrYV09cC12LG5baCtsK2FdPWIteSxcbmwhPT1mJiYobT1zKmMtdSpkLGQ9cypkK3UqYyxjPW0pfX0sZC5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGQucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGQucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGQucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBvPTAsYT0wO2E8ZTthKyspbys9MHx0W2FdLHJbMiphXT04MTkxJm8sbz4+Pj0xMyxyWzIqYSsxXT04MTkxJm8sbz4+Pj0xMztmb3IoYT0yKmU7YTxpOysrYSlyW2FdPTA7bigwPT09byksbigwPT09KG8mLTgxOTIpKX0sZC5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09MDtyZXR1cm4gZX0sZC5wcm90b3R5cGUubXVscD1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKHQubGVuZ3RoLGUubGVuZ3RoKSxpPXRoaXMubWFrZVJCVChuKSxvPXRoaXMuc3R1YihuKSxhPW5ldyBBcnJheShuKSxmPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxoPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSxkPXIud29yZHM7ZC5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IodC53b3Jkcyx0Lmxlbmd0aCxhLG4pLHRoaXMuY29udmVydDEzYihlLndvcmRzLGUubGVuZ3RoLHUsbiksdGhpcy50cmFuc2Zvcm0oYSxvLGYscyxuLGkpLHRoaXMudHJhbnNmb3JtKHUsbyxoLGMsbixpKTtmb3IodmFyIGw9MDtsPG47bCsrKXt2YXIgcD1mW2xdKmhbbF0tc1tsXSpjW2xdO3NbbF09ZltsXSpjW2xdK3NbbF0qaFtsXSxmW2xdPXB9cmV0dXJuIHRoaXMuY29uanVnYXRlKGYscyxuKSx0aGlzLnRyYW5zZm9ybShmLHMsZCxvLG4saSksdGhpcy5jb25qdWdhdGUoZCxvLG4pLHRoaXMubm9ybWFsaXplMTNiKGQsbiksci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGgsci5zdHJpcCgpfSxvLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSx0aGlzLm11bFRvKHQsZSl9LG8ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSxjKHRoaXMsdCxlKX0sby5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHQsdGhpcyl9LG8ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCk7Zm9yKHZhciBlPTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSp0LG89KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPW8+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJm99cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tyXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0sby5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxvLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxvLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCl7dmFyIGU9cyh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBvKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZSxyPXQlMjYsaT0odC1yKS8yNixvPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIGE9MDtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLndvcmRzW2VdJm8scz0oMHx0aGlzLndvcmRzW2VdKS1mPDxyO3RoaXMud29yZHNbZV09c3xhLGE9Zj4+PjI2LXJ9YSYmKHRoaXMud29yZHNbZV09YSx0aGlzLmxlbmd0aCsrKX1pZigwIT09aSl7Zm9yKGU9dGhpcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLndvcmRzW2UraV09dGhpcy53b3Jkc1tlXTtmb3IoZT0wO2U8aTtlKyspdGhpcy53b3Jkc1tlXT0wO3RoaXMubGVuZ3RoKz1pfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih0KX0sby5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHQsZSxyKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgaTtpPWU/KGUtZSUyNikvMjY6MDt2YXIgbz10JTI2LGE9TWF0aC5taW4oKHQtbykvMjYsdGhpcy5sZW5ndGgpLGY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5vPDxvLHM9cjtpZihpLT1hLGk9TWF0aC5tYXgoMCxpKSxzKXtmb3IodmFyIHU9MDt1PGE7dSsrKXMud29yZHNbdV09dGhpcy53b3Jkc1t1XTtzLmxlbmd0aD1hfWlmKDA9PT1hKTtlbHNlIGlmKHRoaXMubGVuZ3RoPmEpZm9yKHRoaXMubGVuZ3RoLT1hLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl0aGlzLndvcmRzW3VdPXRoaXMud29yZHNbdSthXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBoPTA7Zm9yKHU9dGhpcy5sZW5ndGgtMTt1Pj0wJiYoMCE9PWh8fHU+PWkpO3UtLSl7dmFyIGM9MHx0aGlzLndvcmRzW3VdO3RoaXMud29yZHNbdV09aDw8MjYtb3xjPj4+byxoPWMmZn1yZXR1cm4gcyYmMCE9PWgmJihzLndvcmRzW3MubGVuZ3RoKytdPWgpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxvLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LG8ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LG8ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxvLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiExO3ZhciBvPXRoaXMud29yZHNbcl07cmV0dXJuISEobyZpKX0sby5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLFwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzXCIpLHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzO2lmKDAhPT1lJiZyKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxvLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gbihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LG8ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxvLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LG8ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sby5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sby5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LG8ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksbz10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChvKTt2YXIgYSxmPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7YT0oMHx0aGlzLndvcmRzW2krcl0pK2Y7dmFyIHM9KDB8dC53b3Jkc1tpXSkqZTthLT02NzEwODg2MyZzLGY9KGE+PjI2KS0ocy82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYX1mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspYT0oMHx0aGlzLndvcmRzW2krcl0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYTtpZigwPT09ZilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKGY9PT0tMSksZj0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylhPS0oMHx0aGlzLndvcmRzW2ldKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZhO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoLXQubGVuZ3RoLG49dGhpcy5jbG9uZSgpLGk9dCxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSxmPXRoaXMuX2NvdW50Qml0cyhhKTtyPTI2LWYsMCE9PXImJihpPWkudXNobG4ociksbi5pdXNobG4ociksYT0wfGkud29yZHNbaS5sZW5ndGgtMV0pO3ZhciBzLHU9bi5sZW5ndGgtaS5sZW5ndGg7aWYoXCJtb2RcIiE9PWUpe3M9bmV3IG8obnVsbCkscy5sZW5ndGg9dSsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGg9MDtoPHMubGVuZ3RoO2grKylzLndvcmRzW2hdPTB9dmFyIGM9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsdSk7MD09PWMubmVnYXRpdmUmJihuPWMscyYmKHMud29yZHNbdV09MSkpO2Zvcih2YXIgZD11LTE7ZD49MDtkLS0pe3ZhciBsPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgrZF0pKygwfG4ud29yZHNbaS5sZW5ndGgrZC0xXSk7Zm9yKGw9TWF0aC5taW4obC9hfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksbCxkKTswIT09bi5uZWdhdGl2ZTspbC0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsZCksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2RdPWwpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLFwiZGl2XCIhPT1lJiYwIT09ciYmbi5pdXNocm4ocikse2RpdjpzfHxudWxsLG1vZDpufX0sby5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHQsZSxyKXtpZihuKCF0LmlzWmVybygpKSx0aGlzLmlzWmVybygpKXJldHVybntkaXY6bmV3IG8oMCksbW9kOm5ldyBvKDApfTt2YXIgaSxhLGY7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8oZj10aGlzLm5lZygpLmRpdm1vZCh0LGUpLFwibW9kXCIhPT1lJiYoaT1mLmRpdi5uZWcoKSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlhZGQodCkpLHtkaXY6aSxtb2Q6YX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8oZj10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLFwibW9kXCIhPT1lJiYoaT1mLmRpdi5uZWcoKSkse2RpdjppLG1vZDpmLm1vZH0pOjAhPT0odGhpcy5uZWdhdGl2ZSZ0Lm5lZ2F0aXZlKT8oZj10aGlzLm5lZygpLmRpdm1vZCh0Lm5lZygpLGUpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pc3ViKHQpKSx7ZGl2OmYuZGl2LG1vZDphfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgbygwKSxtb2Q6dGhpc306MT09PXQubGVuZ3RoP1wiZGl2XCI9PT1lP3tkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpudWxsfTpcIm1vZFwiPT09ZT97ZGl2Om51bGwsbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHQsZSl9LG8ucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcImRpdlwiLCExKS5kaXZ9LG8ucHJvdG90eXBlLm1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCExKS5tb2R9LG8ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMCkubW9kfSxvLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxvPXIuY21wKG4pO3JldHVybiBvPDB8fDE9PT1pJiYwPT09bz9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LG8ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sby5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxvLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgbygxKSxhPW5ldyBvKDApLGY9bmV3IG8oMCkscz1uZXcgbygxKSx1PTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKyt1O2Zvcih2YXIgaD1yLmNsb25lKCksYz1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGQ9MCxsPTE7MD09PShlLndvcmRzWzBdJmwpJiZkPDI2OysrZCxsPDw9MSk7aWYoZD4wKWZvcihlLml1c2hybihkKTtkLS0gPjA7KShpLmlzT2RkKCl8fGEuaXNPZGQoKSkmJihpLmlhZGQoaCksYS5pc3ViKGMpKSxpLml1c2hybigxKSxhLml1c2hybigxKTtmb3IodmFyIHA9MCxiPTE7MD09PShyLndvcmRzWzBdJmIpJiZwPDI2OysrcCxiPDw9MSk7aWYocD4wKWZvcihyLml1c2hybihwKTtwLS0gPjA7KShmLmlzT2RkKCl8fHMuaXNPZGQoKSkmJihmLmlhZGQoaCkscy5pc3ViKGMpKSxmLml1c2hybigxKSxzLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihmKSxhLmlzdWIocykpOihyLmlzdWIoZSksZi5pc3ViKGkpLHMuaXN1YihhKSl9cmV0dXJue2E6ZixiOnMsZ2NkOnIuaXVzaGxuKHUpfX0sby5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgbygxKSxhPW5ldyBvKDApLGY9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgcz0wLHU9MTswPT09KGUud29yZHNbMF0mdSkmJnM8MjY7KytzLHU8PD0xKTtpZihzPjApZm9yKGUuaXVzaHJuKHMpO3MtLSA+MDspaS5pc09kZCgpJiZpLmlhZGQoZiksaS5pdXNocm4oMSk7Zm9yKHZhciBoPTAsYz0xOzA9PT0oci53b3Jkc1swXSZjKSYmaDwyNjsrK2gsYzw8PTEpO2lmKGg+MClmb3Ioci5pdXNocm4oaCk7aC0tID4wOylhLmlzT2RkKCkmJmEuaWFkZChmKSxhLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihhKSk6KHIuaXN1YihlKSxhLmlzdWIoaSkpfXZhciBkO3JldHVybiBkPTA9PT1lLmNtcG4oMSk/aTphLGQuY21wbigwKTwwJiZkLmlhZGQodCksZH0sby5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBvPWU7ZT1yLHI9b31lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LG8ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LG8ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sby5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgbz1pLGE9cjswIT09byYmYTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPTB8dGhpcy53b3Jkc1thXTtmKz1vLG89Zj4+PjI2LGYmPTY3MTA4ODYzLHRoaXMud29yZHNbYV09Zn1yZXR1cm4gMCE9PW8mJih0aGlzLndvcmRzW2FdPW8sdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LG8ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24odCl7dmFyIGU9dDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmZSlyZXR1cm4gMTt0aGlzLnN0cmlwKCk7dmFyIHI7aWYodGhpcy5sZW5ndGg+MSlyPTE7ZWxzZXtlJiYodD0tdCksbih0PD02NzEwODg2MyxcIk51bWJlciBpcyB0b28gYmlnXCIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTtyPWk9PT10PzA6aTx0Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXI6cn0sby5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LG8ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfHQud29yZHNbcl07aWYobiE9PWkpe248aT9lPS0xOm4+aSYmKGU9MSk7YnJlYWt9fXJldHVybiBlfSxvLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXAodCl9LG8ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT49MH0sby5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT49MH0sby5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk9PT0tMX0sby5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sby5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sby5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxvLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG0odCl9LG8ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksbigwPT09dGhpcy5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sby5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LG8ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc3ViKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5tdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5pbXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LG8ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LG8ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LG8ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LG8ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LG8ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCYmIXQucmVkLFwicmVkUG93KG5vcm1hbE51bSlcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdCl9O3ZhciBBPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07bC5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBvKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0sbC5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG8gdGhpcy5zcGxpdChyLHRoaXMudG1wKSxyPXRoaXMuaW11bEsocikscj1yLmlhZGQodGhpcy50bXApLGU9ci5iaXRMZW5ndGgoKTt3aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnIuc3RyaXAoKSxyfSxsLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe3QuaXVzaHJuKHRoaXMubiwwLGUpfSxsLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbXVsKHRoaXMuayl9LGkocCxsKSxwLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj00MTk0MzAzLG49TWF0aC5taW4odC5sZW5ndGgsOSksaT0wO2k8bjtpKyspZS53b3Jkc1tpXT10LndvcmRzW2ldO2lmKGUubGVuZ3RoPW4sdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBvPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109byZyLGk9MTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPTB8dC53b3Jkc1tpXTt0LndvcmRzW2ktMTBdPShhJnIpPDw0fG8+Pj4yMixvPWF9bz4+Pj0yMix0LndvcmRzW2ktMTBdPW8sMD09PW8mJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0scC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKGIsbCksaSh2LGwpLGkoeSxsKSx5LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LG8uX3ByaW1lPWZ1bmN0aW9uIHQoZSl7aWYoQVtlXSlyZXR1cm4gQVtlXTt2YXIgdDtpZihcImsyNTZcIj09PWUpdD1uZXcgcDtlbHNlIGlmKFwicDIyNFwiPT09ZSl0PW5ldyBiO2Vsc2UgaWYoXCJwMTkyXCI9PT1lKXQ9bmV3IHY7ZWxzZXtpZihcInAyNTUxOVwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHByaW1lIFwiK2UpO3Q9bmV3IHl9cmV0dXJuIEFbZV09dCx0fSxtLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT09KHQubmVnYXRpdmV8ZS5uZWdhdGl2ZSksXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sbS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LG0ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sbS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sbS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxtLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgbygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxhPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylhKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIGY9bmV3IG8oMSkudG9SZWQodGhpcykscz1mLnJlZE5lZygpLHU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGg9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihoPW5ldyBvKDIqaCpoKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coaCx1KS5jbXAocyk7KWgucmVkSUFkZChzKTtmb3IodmFyIGM9dGhpcy5wb3coaCxpKSxkPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSksbD10aGlzLnBvdyh0LGkpLHA9YTswIT09bC5jbXAoZik7KXtmb3IodmFyIGI9bCx2PTA7MCE9PWIuY21wKGYpO3YrKyliPWIucmVkU3FyKCk7bih2PHApO3ZhciB5PXRoaXMucG93KGMsbmV3IG8oMSkuaXVzaGxuKHAtdi0xKSk7ZD1kLnJlZE11bCh5KSxjPXkucmVkU3FyKCksbD1sLnJlZE11bChjKSxwPXZ9cmV0dXJuIGR9LG0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0sbS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMSk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPTQsbj1uZXcgQXJyYXkoMTw8cik7blswXT1uZXcgbygxKS50b1JlZCh0aGlzKSxuWzFdPXQ7Zm9yKHZhciBpPTI7aTxuLmxlbmd0aDtpKyspbltpXT10aGlzLm11bChuW2ktMV0sdCk7dmFyIGE9blswXSxmPTAscz0wLHU9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXUmJih1PTI2KSxpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2Zvcih2YXIgaD1lLndvcmRzW2ldLGM9dS0xO2M+PTA7Yy0tKXt2YXIgZD1oPj5jJjE7YSE9PW5bMF0mJihhPXRoaXMuc3FyKGEpKSwwIT09ZHx8MCE9PWY/KGY8PD0xLGZ8PWQscysrLChzPT09cnx8MD09PWkmJjA9PT1jKSYmKGE9dGhpcy5tdWwoYSxuW2ZdKSxzPTAsZj0wKSk6cz0wfXU9MjZ9cmV0dXJuIGF9LG0ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LG0ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxvLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnKHQpfSxpKGcsbSksZy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxnLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksbz1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP289aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihvPWkuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtyZXR1cm4gZS5fZm9yY2VSZWQodGhpcyl9fShcInVuZGVmaW5lZFwiPT10eXBlb2YgdHx8dCx0aGlzKX0pLmNhbGwoZSxyKDkyKSh0KSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCxuKXt2YXIgaT1yKDE0OSksbz1yKDU3Nik7ZS5wYmtkZjI9ZnVuY3Rpb24odCxyLG4saSxhLGYpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJihmPWEsYT12b2lkIDApLG8obixpKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBmKXRocm93IG5ldyBFcnJvcihcIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMlwiKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZihudWxsLGUucGJrZGYyU3luYyh0LHIsbixpLGEpKX0pfTt2YXIgYTtpZih0LmJyb3dzZXIpYT1cInV0Zi04XCI7ZWxzZXt2YXIgZj1wYXJzZUludCh0LnZlcnNpb24uc3BsaXQoXCIuXCIpWzBdLnNsaWNlKDEpLDEwKTthPWY+PTY/XCJ1dGYtOFwiOlwiYmluYXJ5XCJ9ZS5wYmtkZjJTeW5jPWZ1bmN0aW9uKHQsZSxyLGYscyl7bi5pc0J1ZmZlcih0KXx8KHQ9bmV3IG4odCxhKSksbi5pc0J1ZmZlcihlKXx8KGU9bmV3IG4oZSxhKSksbyhyLGYpLHM9c3x8XCJzaGExXCI7dmFyIHUsaD0xLGM9bmV3IG4oZiksZD1uZXcgbihlLmxlbmd0aCs0KTtlLmNvcHkoZCwwLDAsZS5sZW5ndGgpO2Zvcih2YXIgbCxwLGI9MTtiPD1oO2IrKyl7ZC53cml0ZVVJbnQzMkJFKGIsZS5sZW5ndGgpO3ZhciB2PWkocyx0KS51cGRhdGUoZCkuZGlnZXN0KCk7dXx8KHU9di5sZW5ndGgscD1uZXcgbih1KSxoPU1hdGguY2VpbChmL3UpLGw9Zi0oaC0xKSp1KSx2LmNvcHkocCwwLDAsdSk7Zm9yKHZhciB5PTE7eTxyO3krKyl7dj1pKHMsdCkudXBkYXRlKHYpLmRpZ2VzdCgpO2Zvcih2YXIgbT0wO208dTttKyspcFttXV49dlttXX12YXIgZz0oYi0xKSp1LHc9Yj09PWg/bDp1O3AuY29weShjLGcsMCx3KX1yZXR1cm4gY319KS5jYWxsKGUscigyNikscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2VbXCJhZXMtMTI4LWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xOTItZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTI1Ni1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTI4LWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTkyLWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMjU2LWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGUuYWVzMTI4PWVbXCJhZXMtMTI4LWNiY1wiXSxlLmFlczE5Mj1lW1wiYWVzLTE5Mi1jYmNcIl0sZS5hZXMyNTY9ZVtcImFlcy0yNTYtY2JjXCJdLGVbXCJhZXMtMTI4LWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn0sZVtcImFlcy0xOTItZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxlW1wiYWVzLTI1Ni1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLG4sbyl7ZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxcImJpbmFyeVwiKSksciYmIWUuaXNCdWZmZXIocikmJihyPW5ldyBlKHIsXCJiaW5hcnlcIikpLG4vPTgsbz1vfHwwO2Zvcih2YXIgYSxmLHM9MCx1PTAsaD1uZXcgZShuKSxjPW5ldyBlKG8pLGQ9MCxsPVtdOzspe2lmKGQrKz4wJiZsLnB1c2goYSksbC5wdXNoKHQpLHImJmwucHVzaChyKSxhPWkoZS5jb25jYXQobCkpLGw9W10sZj0wLG4+MClmb3IoOzspe2lmKDA9PT1uKWJyZWFrO2lmKGY9PT1hLmxlbmd0aClicmVhaztoW3MrK109YVtmXSxuLS0sZisrfWlmKG8+MCYmZiE9PWEubGVuZ3RoKWZvcig7Oyl7aWYoMD09PW8pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2NbdSsrXT1hW2ZdLG8tLSxmKyt9aWYoMD09PW4mJjA9PT1vKWJyZWFrfWZvcihmPTA7ZjxhLmxlbmd0aDtmKyspYVtmXT0wO3JldHVybntrZXk6aCxpdjpjfX12YXIgaT1yKDEwNSk7dC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt0aGlzLmFmdGVyVHJhbnNmb3JtPWZ1bmN0aW9uKGUscil7cmV0dXJuIGkodCxlLHIpfSx0aGlzLm5lZWRUcmFuc2Zvcm09ITEsdGhpcy50cmFuc2Zvcm1pbmc9ITEsdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWNodW5rPW51bGwsdGhpcy53cml0ZWVuY29kaW5nPW51bGx9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49dC5fdHJhbnNmb3JtU3RhdGU7bi50cmFuc2Zvcm1pbmc9ITE7dmFyIGk9bi53cml0ZWNiO2lmKCFpKXJldHVybiB0LmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIm5vIHdyaXRlY2IgaW4gVHJhbnNmb3JtIGNsYXNzXCIpKTtuLndyaXRlY2h1bms9bnVsbCxuLndyaXRlY2I9bnVsbCxudWxsIT09ciYmdm9pZCAwIT09ciYmdC5wdXNoKHIpLGkoZSk7dmFyIG89dC5fcmVhZGFibGVTdGF0ZTtvLnJlYWRpbmc9ITEsKG8ubmVlZFJlYWRhYmxlfHxvLmxlbmd0aDxvLmhpZ2hXYXRlck1hcmspJiZ0Ll9yZWFkKG8uaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gbyh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG8odCk7Zi5jYWxsKHRoaXMsdCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9bmV3IG4odGhpcyk7dmFyIGU9dGhpczt0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsdCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPXQudHJhbnNmb3JtKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmZsdXNoJiYodGhpcy5fZmx1c2g9dC5mbHVzaCkpLHRoaXMub25jZShcInByZWZpbmlzaFwiLGZ1bmN0aW9uKCl7XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5fZmx1c2g/dGhpcy5fZmx1c2goZnVuY3Rpb24odCl7YShlLHQpfSk6YShlKX0pfWZ1bmN0aW9uIGEodCxlKXtpZihlKXJldHVybiB0LmVtaXQoXCJlcnJvclwiLGUpO3ZhciByPXQuX3dyaXRhYmxlU3RhdGUsbj10Ll90cmFuc2Zvcm1TdGF0ZTtpZihyLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDBcIik7aWYobi50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZ1wiKTtyZXR1cm4gdC5wdXNoKG51bGwpfXQuZXhwb3J0cz1vO3ZhciBmPXIoNTEpLHM9cig3Myk7cy5pbmhlcml0cz1yKDc0KSxzLmluaGVyaXRzKG8sZiksby5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLGYucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLHQsZSl9LG8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0sby5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihuLndyaXRlY2I9cixuLndyaXRlY2h1bms9dCxuLndyaXRlZW5jb2Rpbmc9ZSwhbi50cmFuc2Zvcm1pbmcpe3ZhciBpPXRoaXMuX3JlYWRhYmxlU3RhdGU7KG4ubmVlZFRyYW5zZm9ybXx8aS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX19LG8ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT1lLndyaXRlY2h1bmsmJmUud3JpdGVjYiYmIWUudHJhbnNmb3JtaW5nPyhlLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oZS53cml0ZWNodW5rLGUud3JpdGVlbmNvZGluZyxlLmFmdGVyVHJhbnNmb3JtKSk6ZS5uZWVkVHJhbnNmb3JtPSEwfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIGkoKXt9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5jaHVuaz10LHRoaXMuZW5jb2Rpbmc9ZSx0aGlzLmNhbGxiYWNrPXIsdGhpcy5uZXh0PW51bGx9ZnVuY3Rpb24gYSh0LGUpe1I9Unx8cig1MSksdD10fHx7fSx0aGlzLm9iamVjdE1vZGU9ISF0Lm9iamVjdE1vZGUsZSBpbnN0YW5jZW9mIFImJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXQud3JpdGFibGVPYmplY3RNb2RlKTt2YXIgbj10LmhpZ2hXYXRlck1hcmssaT10aGlzLm9iamVjdE1vZGU/MTY6MTYzODQ7dGhpcy5oaWdoV2F0ZXJNYXJrPW58fDA9PT1uP246aSx0aGlzLmhpZ2hXYXRlck1hcms9fn50aGlzLmhpZ2hXYXRlck1hcmssdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExO3ZhciBvPXQuZGVjb2RlU3RyaW5ncz09PSExO3RoaXMuZGVjb2RlU3RyaW5ncz0hbyx0aGlzLmRlZmF1bHRFbmNvZGluZz10LmRlZmF1bHRFbmNvZGluZ3x8XCJ1dGY4XCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbih0KXtiKGUsdCl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IFModGhpcyl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gUj1SfHxyKDUxKSx0aGlzIGluc3RhbmNlb2YgZnx8dGhpcyBpbnN0YW5jZW9mIFI/KHRoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IGEodCx0aGlzKSx0aGlzLndyaXRhYmxlPSEwLHQmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LndyaXRlJiYodGhpcy5fd3JpdGU9dC53cml0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC53cml0ZXYmJih0aGlzLl93cml0ZXY9dC53cml0ZXYpKSx2b2lkIHguY2FsbCh0aGlzKSk6bmV3IGYodCl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPW5ldyBFcnJvcihcIndyaXRlIGFmdGVyIGVuZFwiKTt0LmVtaXQoXCJlcnJvclwiLHIpLEUoZSxyKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPSEwLG89ITE7cmV0dXJuIG51bGw9PT1yP289bmV3IFR5cGVFcnJvcihcIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtXCIpOkIuaXNCdWZmZXIocil8fFwic3RyaW5nXCI9PXR5cGVvZiByfHx2b2lkIDA9PT1yfHxlLm9iamVjdE1vZGV8fChvPW5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rXCIpKSxvJiYodC5lbWl0KFwiZXJyb3JcIixvKSxFKG4sbyksaT0hMSksaX1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4gdC5vYmplY3RNb2RlfHx0LmRlY29kZVN0cmluZ3M9PT0hMXx8XCJzdHJpbmdcIiE9dHlwZW9mIGV8fChlPU8uZnJvbShlLHIpKSxlfWZ1bmN0aW9uIGModCxlLHIsbixpKXtyPWgoZSxyLG4pLEIuaXNCdWZmZXIocikmJihuPVwiYnVmZmVyXCIpO3ZhciBhPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoO2UubGVuZ3RoKz1hO3ZhciBmPWUubGVuZ3RoPGUuaGlnaFdhdGVyTWFyaztpZihmfHwoZS5uZWVkRHJhaW49ITApLGUud3JpdGluZ3x8ZS5jb3JrZWQpe3ZhciBzPWUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bmV3IG8ocixuLGkpLHM/cy5uZXh0PWUubGFzdEJ1ZmZlcmVkUmVxdWVzdDplLmJ1ZmZlcmVkUmVxdWVzdD1lLmxhc3RCdWZmZXJlZFJlcXVlc3QsZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIGQodCxlLCExLGEscixuLGkpO3JldHVybiBmfWZ1bmN0aW9uIGQodCxlLHIsbixpLG8sYSl7ZS53cml0ZWxlbj1uLGUud3JpdGVjYj1hLGUud3JpdGluZz0hMCxlLnN5bmM9ITAscj90Ll93cml0ZXYoaSxlLm9ud3JpdGUpOnQuX3dyaXRlKGksbyxlLm9ud3JpdGUpLGUuc3luYz0hMX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7LS1lLnBlbmRpbmdjYixyP0UoaSxuKTppKG4pLHQuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHQuZW1pdChcImVycm9yXCIsbil9ZnVuY3Rpb24gcCh0KXt0LndyaXRpbmc9ITEsdC53cml0ZWNiPW51bGwsdC5sZW5ndGgtPXQud3JpdGVsZW4sdC53cml0ZWxlbj0wfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10Ll93cml0YWJsZVN0YXRlLG49ci5zeW5jLGk9ci53cml0ZWNiO2lmKHAociksZSlsKHQscixuLGUsaSk7ZWxzZXt2YXIgbz1nKHIpO298fHIuY29ya2VkfHxyLmJ1ZmZlclByb2Nlc3Npbmd8fCFyLmJ1ZmZlcmVkUmVxdWVzdHx8bSh0LHIpLG4/QSh2LHQscixvLGkpOnYodCxyLG8saSl9fWZ1bmN0aW9uIHYodCxlLHIsbil7cnx8eSh0LGUpLGUucGVuZGluZ2NiLS0sbigpLF8odCxlKX1mdW5jdGlvbiB5KHQsZSl7MD09PWUubGVuZ3RoJiZlLm5lZWREcmFpbiYmKGUubmVlZERyYWluPSExLHQuZW1pdChcImRyYWluXCIpKX1mdW5jdGlvbiBtKHQsZSl7ZS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciByPWUuYnVmZmVyZWRSZXF1ZXN0O2lmKHQuX3dyaXRldiYmciYmci5uZXh0KXt2YXIgbj1lLmJ1ZmZlcmVkUmVxdWVzdENvdW50LGk9bmV3IEFycmF5KG4pLG89ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7by5lbnRyeT1yO2Zvcih2YXIgYT0wO3I7KWlbYV09cixyPXIubmV4dCxhKz0xO2QodCxlLCEwLGUubGVuZ3RoLGksXCJcIixvLmZpbmlzaCksZS5wZW5kaW5nY2IrKyxlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxvLm5leHQ/KGUuY29ya2VkUmVxdWVzdHNGcmVlPW8ubmV4dCxvLm5leHQ9bnVsbCk6ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IFMoZSl9ZWxzZXtmb3IoO3I7KXt2YXIgZj1yLmNodW5rLHM9ci5lbmNvZGluZyx1PXIuY2FsbGJhY2ssaD1lLm9iamVjdE1vZGU/MTpmLmxlbmd0aDtpZihkKHQsZSwhMSxoLGYscyx1KSxyPXIubmV4dCxlLndyaXRpbmcpYnJlYWt9bnVsbD09PXImJihlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9ZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wLGUuYnVmZmVyZWRSZXF1ZXN0PXIsZS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQuZW5kaW5nJiYwPT09dC5sZW5ndGgmJm51bGw9PT10LmJ1ZmZlcmVkUmVxdWVzdCYmIXQuZmluaXNoZWQmJiF0LndyaXRpbmd9ZnVuY3Rpb24gdyh0LGUpe2UucHJlZmluaXNoZWR8fChlLnByZWZpbmlzaGVkPSEwLHQuZW1pdChcInByZWZpbmlzaFwiKSl9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPWcoZSk7cmV0dXJuIHImJigwPT09ZS5wZW5kaW5nY2I/KHcodCxlKSxlLmZpbmlzaGVkPSEwLHQuZW1pdChcImZpbmlzaFwiKSk6dyh0LGUpKSxyfWZ1bmN0aW9uIE0odCxlLHIpe2UuZW5kaW5nPSEwLF8odCxlKSxyJiYoZS5maW5pc2hlZD9FKHIpOnQub25jZShcImZpbmlzaFwiLHIpKSxlLmVuZGVkPSEwLHQud3JpdGFibGU9ITF9ZnVuY3Rpb24gUyh0KXt2YXIgZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbihyKXt2YXIgbj1lLmVudHJ5O2ZvcihlLmVudHJ5PW51bGw7bjspe3ZhciBpPW4uY2FsbGJhY2s7dC5wZW5kaW5nY2ItLSxpKHIpLG49bi5uZXh0fXQuY29ya2VkUmVxdWVzdHNGcmVlP3QuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9ZTp0LmNvcmtlZFJlcXVlc3RzRnJlZT1lfX10LmV4cG9ydHM9Zjt2YXIgRT1yKDE1NyksQT0hZS5icm93c2VyJiZbXCJ2MC4xMFwiLFwidjAuOS5cIl0uaW5kZXhPZihlLnZlcnNpb24uc2xpY2UoMCw1KSk+LTE/bjpFO2YuV3JpdGFibGVTdGF0ZT1hO3ZhciBrPXIoNzMpO2suaW5oZXJpdHM9cig3NCk7dmFyIHgsST17ZGVwcmVjYXRlOnIoNTk4KX07IWZ1bmN0aW9uKCl7dHJ5e3g9cigzMSl9Y2F0Y2godCl7fWZpbmFsbHl7eHx8KHg9cigxMTApLkV2ZW50RW1pdHRlcil9fSgpO3ZhciBCPXIoMSkuQnVmZmVyLE89cigxNTYpO2suaW5oZXJpdHMoZix4KTt2YXIgUjthLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5idWZmZXJlZFJlcXVlc3QsZT1bXTt0OyllLnB1c2godCksdD10Lm5leHQ7cmV0dXJuIGV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSxcImJ1ZmZlclwiLHtnZXQ6SS5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sXCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLlwiKX0pfWNhdGNoKHQpe319KCk7dmFyIFI7Zi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZVwiKSl9LGYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl93cml0YWJsZVN0YXRlLG89ITE7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHI9ZSxlPW51bGwpLEIuaXNCdWZmZXIodCk/ZT1cImJ1ZmZlclwiOmV8fChlPW4uZGVmYXVsdEVuY29kaW5nKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiYocj1pKSxuLmVuZGVkP3ModGhpcyxyKTp1KHRoaXMsbix0LHIpJiYobi5wZW5kaW5nY2IrKyxvPWModGhpcyxuLHQsZSxyKSksb30sZi5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dyaXRhYmxlU3RhdGU7dC5jb3JrZWQrK30sZi5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fd3JpdGFibGVTdGF0ZTt0LmNvcmtlZCYmKHQuY29ya2VkLS0sdC53cml0aW5nfHx0LmNvcmtlZHx8dC5maW5pc2hlZHx8dC5idWZmZXJQcm9jZXNzaW5nfHwhdC5idWZmZXJlZFJlcXVlc3R8fG0odGhpcyx0KSl9LGYucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9dC50b0xvd2VyQ2FzZSgpKSwhKFtcImhleFwiLFwidXRmOFwiLFwidXRmLThcIixcImFzY2lpXCIsXCJiaW5hcnlcIixcImJhc2U2NFwiLFwidWNzMlwiLFwidWNzLTJcIixcInV0ZjE2bGVcIixcInV0Zi0xNmxlXCIsXCJyYXdcIl0uaW5kZXhPZigodCtcIlwiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3QpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz10LHRoaXN9LGYucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7cihuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIikpfSxmLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsZi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl93cml0YWJsZVN0YXRlO1wiZnVuY3Rpb25cIj09dHlwZW9mIHQ/KHI9dCx0PW51bGwsZT1udWxsKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksbnVsbCE9PXQmJnZvaWQgMCE9PXQmJnRoaXMud3JpdGUodCxlKSxuLmNvcmtlZCYmKG4uY29ya2VkPTEsdGhpcy51bmNvcmsoKSksbi5lbmRpbmd8fG4uZmluaXNoZWR8fE0odGhpcyxuLHIpfX0pLmNhbGwoZSxyKDI2KSxyKDE1OCkuc2V0SW1tZWRpYXRlKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0KXt2YXIgbj1yKDEpLGk9bi5CdWZmZXIsbz1uLlNsb3dCdWZmZXIsYT1uLmtNYXhMZW5ndGh8fDIxNDc0ODM2NDc7ZS5hbGxvYz1mdW5jdGlvbih0LGUscil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgaS5hbGxvYylyZXR1cm4gaS5hbGxvYyh0LGUscik7aWYoXCJudW1iZXJcIj09dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3Qgbm90IGJlIG51bWJlclwiKTtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZSBtdXN0IGJlIGEgbnVtYmVyXCIpO2lmKHQ+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNpemUgaXMgdG9vIGxhcmdlXCIpO3ZhciBuPXIsbz1lO3ZvaWQgMD09PW8mJihuPXZvaWQgMCxvPTApO3ZhciBmPW5ldyBpKHQpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBvKWZvcih2YXIgcz1uZXcgaShvLG4pLHU9cy5sZW5ndGgsaD0tMTsrK2g8dDspZltoXT1zW2gldV07ZWxzZSBmLmZpbGwobyk7cmV0dXJuIGZ9LGUuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgaS5hbGxvY1Vuc2FmZSlyZXR1cm4gaS5hbGxvY1Vuc2FmZSh0KTtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZSBtdXN0IGJlIGEgbnVtYmVyXCIpO2lmKHQ+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNpemUgaXMgdG9vIGxhcmdlXCIpO3JldHVybiBuZXcgaSh0KX0sZS5mcm9tPWZ1bmN0aW9uKGUscixuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmZyb20mJighdC5VaW50OEFycmF5fHxVaW50OEFycmF5LmZyb20hPT1pLmZyb20pKXJldHVybiBpLmZyb20oZSxyLG4pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBuZXcgaShlLHIpO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXt2YXIgbz1yO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBuZXcgaShlKTtcInVuZGVmaW5lZFwiPT10eXBlb2YgbyYmKG89MCk7dmFyIGE9bjtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSYmKGE9ZS5ieXRlTGVuZ3RoLW8pLG8+PWUuYnl0ZUxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHNcIik7aWYoYT5lLmJ5dGVMZW5ndGgtbyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHNcIik7cmV0dXJuIG5ldyBpKGUuc2xpY2UobyxvK2EpKX1pZihpLmlzQnVmZmVyKGUpKXt2YXIgZj1uZXcgaShlLmxlbmd0aCk7cmV0dXJuIGUuY29weShmLDAsMCxlLmxlbmd0aCksZn1pZihlKXtpZihBcnJheS5pc0FycmF5KGUpfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fFwibGVuZ3RoXCJpbiBlKXJldHVybiBuZXcgaShlKTtpZihcIkJ1ZmZlclwiPT09ZS50eXBlJiZBcnJheS5pc0FycmF5KGUuZGF0YSkpcmV0dXJuIG5ldyBpKGUuZGF0YSl9dGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC5cIil9LGUuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuYWxsb2NVbnNhZmVTbG93KXJldHVybiBpLmFsbG9jVW5zYWZlU2xvdyh0KTtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZSBtdXN0IGJlIGEgbnVtYmVyXCIpO2lmKHQ+PWEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzaXplIGlzIHRvbyBsYXJnZVwiKTtyZXR1cm4gbmV3IG8odCl9fSkuY2FsbChlLHIoMzkpKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJjYWxsYmFja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3ZhciBvLGEsZj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChmKXtjYXNlIDA6Y2FzZSAxOnJldHVybiBlLm5leHRUaWNrKHQpO2Nhc2UgMjpyZXR1cm4gZS5uZXh0VGljayhmdW5jdGlvbigpe3QuY2FsbChudWxsLHIpfSk7Y2FzZSAzOnJldHVybiBlLm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5jYWxsKG51bGwscixuKX0pO2Nhc2UgNDpyZXR1cm4gZS5uZXh0VGljayhmdW5jdGlvbigpe3QuY2FsbChudWxsLHIsbixpKX0pO2RlZmF1bHQ6Zm9yKG89bmV3IEFycmF5KGYtMSksYT0wO2E8by5sZW5ndGg7KW9bYSsrXT1hcmd1bWVudHNbYV07cmV0dXJuIGUubmV4dFRpY2soZnVuY3Rpb24oKXt0LmFwcGx5KG51bGwsbyl9KX19IWUudmVyc2lvbnx8MD09PWUudmVyc2lvbi5pbmRleE9mKFwidjAuXCIpfHwwPT09ZS52ZXJzaW9uLmluZGV4T2YoXCJ2MS5cIikmJjAhPT1lLnZlcnNpb24uaW5kZXhPZihcInYxLjguXCIpP3QuZXhwb3J0cz1yOnQuZXhwb3J0cz1lLm5leHRUaWNrO1xufSkuY2FsbChlLHIoMjYpKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGkodCxlKXt0aGlzLl9pZD10LHRoaXMuX2NsZWFyRm49ZX12YXIgbz1yKDI2KS5uZXh0VGljayxhPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSxmPUFycmF5LnByb3RvdHlwZS5zbGljZSxzPXt9LHU9MDtlLnNldFRpbWVvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoYS5jYWxsKHNldFRpbWVvdXQsd2luZG93LGFyZ3VtZW50cyksY2xlYXJUaW1lb3V0KX0sZS5zZXRJbnRlcnZhbD1mdW5jdGlvbigpe3JldHVybiBuZXcgaShhLmNhbGwoc2V0SW50ZXJ2YWwsd2luZG93LGFyZ3VtZW50cyksY2xlYXJJbnRlcnZhbCl9LGUuY2xlYXJUaW1lb3V0PWUuY2xlYXJJbnRlcnZhbD1mdW5jdGlvbih0KXt0LmNsb3NlKCl9LGkucHJvdG90eXBlLnVucmVmPWkucHJvdG90eXBlLnJlZj1mdW5jdGlvbigpe30saS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckZuLmNhbGwod2luZG93LHRoaXMuX2lkKX0sZS5lbnJvbGw9ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodC5faWRsZVRpbWVvdXRJZCksdC5faWRsZVRpbWVvdXQ9ZX0sZS51bmVucm9sbD1mdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodC5faWRsZVRpbWVvdXRJZCksdC5faWRsZVRpbWVvdXQ9LTF9LGUuX3VucmVmQWN0aXZlPWUuYWN0aXZlPWZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0Ll9pZGxlVGltZW91dElkKTt2YXIgZT10Ll9pZGxlVGltZW91dDtlPj0wJiYodC5faWRsZVRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5fb25UaW1lb3V0JiZ0Ll9vblRpbWVvdXQoKX0sZSkpfSxlLnNldEltbWVkaWF0ZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24odCl7dmFyIHI9dSsrLG49IShhcmd1bWVudHMubGVuZ3RoPDIpJiZmLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBzW3JdPSEwLG8oZnVuY3Rpb24oKXtzW3JdJiYobj90LmFwcGx5KG51bGwsbik6dC5jYWxsKG51bGwpLGUuY2xlYXJJbW1lZGlhdGUocikpfSkscn0sZS5jbGVhckltbWVkaWF0ZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246ZnVuY3Rpb24odCl7ZGVsZXRlIHNbdF19fSkuY2FsbChlLHIoMTU4KS5zZXRJbW1lZGlhdGUscigxNTgpLmNsZWFySW1tZWRpYXRlKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9cig2MiksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9cig2MiksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cigyNTcpLkJlcixhPTY1NTM3LGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpfXJldHVybiBpKHQsbnVsbCxbe2tleTpcIm1vZHVsdXNUb1BlbVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKDA9PT10WzBdKXRocm93IG5ldyBFcnJvcihcIk1vZHVsdXMgbWF5IG5vdCBzdGFydCB3aXRoIHplcm9cIik7MTI4JnRbMF0mJih0PWUuY29uY2F0KFtuZXcgZShbMF0pLHRdKSk7dmFyIHI9bmV3IG8uV3JpdGVyO3JldHVybiByLnN0YXJ0U2VxdWVuY2UoKSxyLndyaXRlQnVmZmVyKHQsMiksci53cml0ZUludChhKSxyLmVuZFNlcXVlbmNlKCksXCItLS0tLUJFR0lOIFJTQSBQVUJMSUMgS0VZLS0tLS1cXG5cIityLmJ1ZmZlci50b1N0cmluZyhcImJhc2U2NFwiKS5tYXRjaCgvLnsxLDY0fS9nKS5qb2luKFwiXFxuXCIpK1wiXFxuLS0tLS1FTkQgUlNBIFBVQkxJQyBLRVktLS0tLVxcblwifX0se2tleTpcIm1vZHVsdXNGcm9tUHJpdmF0ZUtleVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQucmVwbGFjZShcIi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS1cIixcIlwiKS5yZXBsYWNlKFwiLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS1cIixcIlwiKS5yZXBsYWNlKC9cXHMrfFxcblxccnxcXG58XFxyJC9nbSxcIlwiKSxuPW5ldyBlKHIsXCJiYXNlNjRcIiksaT1uZXcgby5SZWFkZXIobik7aS5yZWFkU2VxdWVuY2UoKSxpLnJlYWRTdHJpbmcoMiwhMCk7dmFyIGE9aS5yZWFkU3RyaW5nKDIsITApO3JldHVybiAwPT09YVswXT9hLnNsaWNlKDEpOmF9fV0pLHR9KCk7dC5leHBvcnRzPWZ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7cigyODEpLHQuZXhwb3J0cz1yKDE2MykuTnVtYmVyLmlzSW50ZWdlcn0sZnVuY3Rpb24odCxlKXt2YXIgcj10LmV4cG9ydHM9e3ZlcnNpb246XCIyLjQuMFwifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPXIpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sZnVuY3Rpb24odCxlKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0JiZcIk51bWJlclwiIT1uKHQpKXRocm93IFR5cGVFcnJvcihlKTtyZXR1cm4rdH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDExKSxpPXIoNDcpLG89cigxMCk7dC5leHBvcnRzPVtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0aGlzKSxhPW8oci5sZW5ndGgpLGY9aSh0LGEpLHM9aShlLGEpLHU9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsaD1NYXRoLm1pbigodm9pZCAwPT09dT9hOmkodSxhKSktcyxhLWYpLGM9MTtmb3IoczxmJiZmPHMraCYmKGM9LTEscys9aC0xLGYrPWgtMSk7aC0tID4wOylzIGluIHI/cltmXT1yW3NdOmRlbGV0ZSByW2ZdLGYrPWMscys9YztyZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtyZXR1cm4gbih0LCExLHIucHVzaCxyLGUpLHJ9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMyksaT1yKDExKSxvPXIoNjUpLGE9cigxMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYscyl7bihlKTt2YXIgdT1pKHQpLGg9byh1KSxjPWEodS5sZW5ndGgpLGQ9cz9jLTE6MCxsPXM/LTE6MTtpZihyPDIpZm9yKDs7KXtpZihkIGluIGgpe2Y9aFtkXSxkKz1sO2JyZWFrfWlmKGQrPWwscz9kPDA6Yzw9ZCl0aHJvdyBUeXBlRXJyb3IoXCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlXCIpfWZvcig7cz9kPj0wOmM+ZDtkKz1sKWQgaW4gaCYmKGY9ZShmLGhbZF0sZCx1KSk7cmV0dXJuIGZ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxMyksaT1yKDYpLG89cig4MiksYT1bXS5zbGljZSxmPXt9LHM9ZnVuY3Rpb24odCxlLHIpe2lmKCEoZSBpbiBmKSl7Zm9yKHZhciBuPVtdLGk9MDtpPGU7aSsrKW5baV09XCJhW1wiK2krXCJdXCI7ZltlXT1GdW5jdGlvbihcIkYsYVwiLFwicmV0dXJuIG5ldyBGKFwiK24uam9pbihcIixcIikrXCIpXCIpfXJldHVybiBmW2VdKHQscil9O3QuZXhwb3J0cz1GdW5jdGlvbi5iaW5kfHxmdW5jdGlvbih0KXt2YXIgZT1uKHRoaXMpLHI9YS5jYWxsKGFyZ3VtZW50cywxKSxmPWZ1bmN0aW9uKCl7dmFyIG49ci5jb25jYXQoYS5jYWxsKGFyZ3VtZW50cykpO3JldHVybiB0aGlzIGluc3RhbmNlb2YgZj9zKGUsbi5sZW5ndGgsbik6byhlLG4sdCl9O3JldHVybiBpKGUucHJvdG90eXBlKSYmKGYucHJvdG90eXBlPWUucHJvdG90eXBlKSxmfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOSkuZixpPXIoNDIpLG89cig0NSksYT1yKDMzKSxmPXIoNDApLHM9cigyNCksdT1yKDU1KSxoPXIoMTI4KSxjPXIoMTc3KSxkPXIoNDYpLGw9cig4KSxwPXIoMzYpLmZhc3RLZXksYj1sP1wiX3NcIjpcInNpemVcIix2PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1wKGUpO2lmKFwiRlwiIT09bilyZXR1cm4gdC5faVtuXTtmb3Iocj10Ll9mO3I7cj1yLm4paWYoci5rPT1lKXJldHVybiByfTt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxyLGgpe3ZhciBjPXQoZnVuY3Rpb24odCxuKXtmKHQsYyxlLFwiX2lcIiksdC5faT1pKG51bGwpLHQuX2Y9dm9pZCAwLHQuX2w9dm9pZCAwLHRbYl09MCx2b2lkIDAhPW4mJnUobixyLHRbaF0sdCl9KTtyZXR1cm4gbyhjLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPXQuX2kscj10Ll9mO3I7cj1yLm4pci5yPSEwLHIucCYmKHIucD1yLnAubj12b2lkIDApLGRlbGV0ZSBlW3IuaV07dC5fZj10Ll9sPXZvaWQgMCx0W2JdPTB9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dihlLHQpO2lmKHIpe3ZhciBuPXIubixpPXIucDtkZWxldGUgZS5faVtyLmldLHIucj0hMCxpJiYoaS5uPW4pLG4mJihuLnA9aSksZS5fZj09ciYmKGUuX2Y9biksZS5fbD09ciYmKGUuX2w9aSksZVtiXS0tfXJldHVybiEhcn0sZm9yRWFjaDpmdW5jdGlvbih0KXtmKHRoaXMsYyxcImZvckVhY2hcIik7Zm9yKHZhciBlLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO2U9ZT9lLm46dGhpcy5fZjspZm9yKHIoZS52LGUuayx0aGlzKTtlJiZlLnI7KWU9ZS5wfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISF2KHRoaXMsdCl9fSksbCYmbihjLnByb3RvdHlwZSxcInNpemVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHModGhpc1tiXSl9fSksY30sZGVmOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG89dih0LGUpO3JldHVybiBvP28udj1yOih0Ll9sPW89e2k6aT1wKGUsITApLGs6ZSx2OnIscDpuPXQuX2wsbjp2b2lkIDAscjohMX0sdC5fZnx8KHQuX2Y9byksbiYmKG4ubj1vKSx0W2JdKyssXCJGXCIhPT1pJiYodC5faVtpXT1vKSksdH0sZ2V0RW50cnk6dixzZXRTdHJvbmc6ZnVuY3Rpb24odCxlLHIpe2godCxlLGZ1bmN0aW9uKHQsZSl7dGhpcy5fdD10LHRoaXMuX2s9ZSx0aGlzLl9sPXZvaWQgMH0sZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPXQuX2sscj10Ll9sO3ImJnIucjspcj1yLnA7cmV0dXJuIHQuX3QmJih0Ll9sPXI9cj9yLm46dC5fdC5fZik/XCJrZXlzXCI9PWU/YygwLHIuayk6XCJ2YWx1ZXNcIj09ZT9jKDAsci52KTpjKDAsW3IuayxyLnZdKToodC5fdD12b2lkIDAsYygxKSl9LHI/XCJlbnRyaWVzXCI6XCJ2YWx1ZXNcIiwhciwhMCksZChlKX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2NCksaT1yKDE2OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2lmKG4odGhpcykhPXQpdGhyb3cgVHlwZUVycm9yKHQrXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7cmV0dXJuIGkodGhpcyl9fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNDUpLGk9cigzNikuZ2V0V2VhayxvPXIoMyksYT1yKDYpLGY9cig0MCkscz1yKDU1KSx1PXIoMjcpLGg9cigxMiksYz11KDUpLGQ9dSg2KSxsPTAscD1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbHx8KHQuX2w9bmV3IGIpfSxiPWZ1bmN0aW9uKCl7dGhpcy5hPVtdfSx2PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGModC5hLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZX0pfTtiLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXYodGhpcyx0KTtpZihlKXJldHVybiBlWzFdfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISF2KHRoaXMsdCl9LHNldDpmdW5jdGlvbih0LGUpe3ZhciByPXYodGhpcyx0KTtyP3JbMV09ZTp0aGlzLmEucHVzaChbdCxlXSl9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT1kKHRoaXMuYSxmdW5jdGlvbihlKXtyZXR1cm4gZVswXT09PXR9KTtyZXR1cm5+ZSYmdGhpcy5hLnNwbGljZShlLDEpLCEhfmV9fSx0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxyLG8pe3ZhciB1PXQoZnVuY3Rpb24odCxuKXtmKHQsdSxlLFwiX2lcIiksdC5faT1sKyssdC5fbD12b2lkIDAsdm9pZCAwIT1uJiZzKG4scix0W29dLHQpfSk7cmV0dXJuIG4odS5wcm90b3R5cGUse2RlbGV0ZTpmdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt2YXIgZT1pKHQpO3JldHVybiBlPT09ITA/cCh0aGlzKS5kZWxldGUodCk6ZSYmaChlLHRoaXMuX2kpJiZkZWxldGUgZVt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiExO3ZhciBlPWkodCk7cmV0dXJuIGU9PT0hMD9wKHRoaXMpLmhhcyh0KTplJiZoKGUsdGhpcy5faSl9fSksdX0sZGVmOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pKG8oZSksITApO3JldHVybiBuPT09ITA/cCh0KS5zZXQoZSxyKTpuW3QuX2ldPXIsdH0sdWZzdG9yZTpwfX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz0hcig4KSYmIXIoNSkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIoMTIwKShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFuKHQpJiZpc0Zpbml0ZSh0KSYmaSh0KT09PXR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dHJ5e3JldHVybiBpP2UobihyKVswXSxyWzFdKTplKHIpfWNhdGNoKGUpe3ZhciBvPXQucmV0dXJuO3Rocm93IHZvaWQgMCE9PW8mJm4oby5jYWxsKHQpKSxlfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3ZhbHVlOmUsZG9uZTohIXR9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9TWF0aC5sb2cxcHx8ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPi0xZS04JiZ0PDFlLTg/dC10KnQvMjpNYXRoLmxvZygxK3QpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNDQpLGk9cig4Niksbz1yKDY2KSxhPXIoMTEpLGY9cig2NSkscz1PYmplY3QuYXNzaWduO3QuZXhwb3J0cz0hc3x8cig1KShmdW5jdGlvbigpe3ZhciB0PXt9LGU9e30scj1TeW1ib2woKSxuPVwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIjtyZXR1cm4gdFtyXT03LG4uc3BsaXQoXCJcIikuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPXR9KSw3IT1zKHt9LHQpW3JdfHxPYmplY3Qua2V5cyhzKHt9LGUpKS5qb2luKFwiXCIpIT1ufSk/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9YSh0KSxzPWFyZ3VtZW50cy5sZW5ndGgsdT0xLGg9aS5mLGM9by5mO3M+dTspZm9yKHZhciBkLGw9Zihhcmd1bWVudHNbdSsrXSkscD1oP24obCkuY29uY2F0KGgobCkpOm4obCksYj1wLmxlbmd0aCx2PTA7Yj52OyljLmNhbGwobCxkPXBbdisrXSkmJihyW2RdPWxbZF0pO3JldHVybiByfTpzfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig5KSxpPXIoMyksbz1yKDQ0KTt0LmV4cG9ydHM9cig4KT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe2kodCk7Zm9yKHZhciByLGE9byhlKSxmPWEubGVuZ3RoLHM9MDtmPnM7KW4uZih0LHI9YVtzKytdLGVbcl0pO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTcpLGk9cig0MykuZixvPXt9LnRvU3RyaW5nLGE9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdLGY9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBpKHQpfWNhdGNoKHQpe3JldHVybiBhLnNsaWNlKCl9fTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gYSYmXCJbb2JqZWN0IFdpbmRvd11cIj09by5jYWxsKHQpP2YodCk6aShuKHQpKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEyKSxpPXIoMTcpLG89cig3OCkoITEpLGE9cigxMzMpKFwiSUVfUFJPVE9cIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsZj1pKHQpLHM9MCx1PVtdO2ZvcihyIGluIGYpciE9YSYmbihmLHIpJiZ1LnB1c2gocik7Zm9yKDtlLmxlbmd0aD5zOyluKGYscj1lW3MrK10pJiYofm8odSxyKXx8dS5wdXNoKHIpKTtyZXR1cm4gdX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ0KSxpPXIoMTcpLG89cig2NikuZjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcixhPWkoZSksZj1uKGEpLHM9Zi5sZW5ndGgsdT0wLGg9W107cz51OylvLmNhbGwoYSxyPWZbdSsrXSkmJmgucHVzaCh0P1tyLGFbcl1dOmFbcl0pO3JldHVybiBofX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQzKSxpPXIoODYpLG89cigzKSxhPXIoNCkuUmVmbGVjdDt0LmV4cG9ydHM9YSYmYS5vd25LZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1uLmYobyh0KSkscj1pLmY7cmV0dXJuIHI/ZS5jb25jYXQocih0KSk6ZX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLnBhcnNlRmxvYXQsaT1yKDU4KS50cmltO3QuZXhwb3J0cz0xL24ocigxMzgpK1wiLTBcIikhPT0tKDEvMCk/ZnVuY3Rpb24odCl7dmFyIGU9aShTdHJpbmcodCksMykscj1uKGUpO3JldHVybiAwPT09ciYmXCItXCI9PWUuY2hhckF0KDApPy0wOnJ9Om59LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLnBhcnNlSW50LGk9cig1OCkudHJpbSxvPXIoMTM4KSxhPS9eW1xcLStdPzBbeFhdLzt0LmV4cG9ydHM9OCE9PW4obytcIjA4XCIpfHwyMiE9PW4obytcIjB4MTZcIik/ZnVuY3Rpb24odCxlKXt2YXIgcj1pKFN0cmluZyh0KSwzKTtyZXR1cm4gbihyLGU+Pj4wfHwoYS50ZXN0KHIpPzE2OjEwKSl9Om59LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPU9iamVjdC5pc3x8ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWU/MCE9PXR8fDEvdD09PTEvZTp0IT10JiZlIT1lfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTApLGk9cigxMzcpLG89cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBmPVN0cmluZyhvKHQpKSxzPWYubGVuZ3RoLHU9dm9pZCAwPT09cj9cIiBcIjpTdHJpbmcociksaD1uKGUpO2lmKGg8PXN8fFwiXCI9PXUpcmV0dXJuIGY7dmFyIGM9aC1zLGQ9aS5jYWxsKHUsTWF0aC5jZWlsKGMvdS5sZW5ndGgpKTtyZXR1cm4gZC5sZW5ndGg+YyYmKGQ9ZC5zbGljZSgwLGMpKSxhP2QrZjpmK2R9fSxmdW5jdGlvbih0LGUscil7ZS5mPXIoNyl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDE3MSk7dC5leHBvcnRzPXIoNzkpKFwiTWFwXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPW4uZ2V0RW50cnkodGhpcyx0KTtyZXR1cm4gZSYmZS52fSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5kZWYodGhpcywwPT09dD8wOnQsZSl9fSxuLCEwKX0sZnVuY3Rpb24odCxlLHIpe3IoOCkmJlwiZ1wiIT0vLi9nLmZsYWdzJiZyKDkpLmYoUmVnRXhwLnByb3RvdHlwZSxcImZsYWdzXCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6cig4MSl9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTcxKTt0LmV4cG9ydHM9cig3OSkoXCJTZXRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4uZGVmKHRoaXMsdD0wPT09dD8wOnQsdCl9fSxuKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9cigyNykoMCksbz1yKDE1KSxhPXIoMzYpLGY9cigxNzkpLHM9cigxNzMpLHU9cig2KSxoPWEuZ2V0V2VhayxjPU9iamVjdC5pc0V4dGVuc2libGUsZD1zLnVmc3RvcmUsbD17fSxwPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sYj17Z2V0OmZ1bmN0aW9uKHQpe2lmKHUodCkpe3ZhciBlPWgodCk7cmV0dXJuIGU9PT0hMD9kKHRoaXMpLmdldCh0KTplP2VbdGhpcy5faV06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMuZGVmKHRoaXMsdCxlKX19LHY9dC5leHBvcnRzPXIoNzkpKFwiV2Vha01hcFwiLHAsYixzLCEwLCEwKTs3IT0obmV3IHYpLnNldCgoT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KShsKSw3KS5nZXQobCkmJihuPXMuZ2V0Q29uc3RydWN0b3IocCksZihuLnByb3RvdHlwZSxiKSxhLk5FRUQ9ITAsaShbXCJkZWxldGVcIixcImhhc1wiLFwiZ2V0XCIsXCJzZXRcIl0sZnVuY3Rpb24odCl7dmFyIGU9di5wcm90b3R5cGUscj1lW3RdO28oZSx0LGZ1bmN0aW9uKGUsaSl7aWYodShlKSYmIWMoZSkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyBuKTt2YXIgbz10aGlzLl9mW3RdKGUsaSk7cmV0dXJuXCJzZXRcIj09dD90aGlzOm99cmV0dXJuIHIuY2FsbCh0aGlzLGUsaSl9KX0pKX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3Rocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrdCtcIicuXCIpfXIua2V5cz1mdW5jdGlvbigpe3JldHVybltdfSxyLnJlc29sdmU9cix0LmV4cG9ydHM9cixyLmlkPTE5NH0sZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gaSh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7cih0aGlzLGUpO3ZhciBpPW4odGhpcyxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkuY2FsbCh0aGlzKSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwibWVzc2FnZVwiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTp2b2lkIDAhPT10P1N0cmluZyh0KTpcIlwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJuYW1lXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmkuY29uc3RydWN0b3IubmFtZX0pLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShpLGkuY29uc3RydWN0b3IpLGl9cmV0dXJuIGkoZSx0KSxlfShFcnJvcik7dC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxyKXtyKDQ4NiksdC5leHBvcnRzPXIoMTk3KS5OdW1iZXIuaXNJbnRlZ2VyfSxmdW5jdGlvbih0LGUpe3ZhciByPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNC4wXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9cil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIwMCksaT1yKDE5Nyksbz1yKDQ3OCksYT1yKDQ4MCksZj1cInByb3RvdHlwZVwiLHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGgsYyxkPXQmcy5GLGw9dCZzLkcscD10JnMuUyxiPXQmcy5QLHY9dCZzLkIseT10JnMuVyxtPWw/aTppW2VdfHwoaVtlXT17fSksZz1tW2ZdLHc9bD9uOnA/bltlXToobltlXXx8e30pW2ZdO2wmJihyPWUpO2Zvcih1IGluIHIpaD0hZCYmdyYmdm9pZCAwIT09d1t1XSxoJiZ1IGluIG18fChjPWg/d1t1XTpyW3VdLG1bdV09bCYmXCJmdW5jdGlvblwiIT10eXBlb2Ygd1t1XT9yW3VdOnYmJmg/byhjLG4pOnkmJndbdV09PWM/ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oZSxyLG4pe2lmKHRoaXMgaW5zdGFuY2VvZiB0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KGUpO2Nhc2UgMjpyZXR1cm4gbmV3IHQoZSxyKX1yZXR1cm4gbmV3IHQoZSxyLG4pfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIGVbZl09dFtmXSxlfShjKTpiJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjP28oRnVuY3Rpb24uY2FsbCxjKTpjLGImJigobS52aXJ0dWFsfHwobS52aXJ0dWFsPXt9KSlbdV09Yyx0JnMuUiYmZyYmIWdbdV0mJmEoZyx1LGMpKSl9O3MuRj0xLHMuRz0yLHMuUz00LHMuUD04LHMuQj0xNixzLlc9MzIscy5VPTY0LHMuUj0xMjgsdC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LGUpe3ZhciByPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPXIoNDczKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXsvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBuKHQsZSl7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKHRbaV0hPT1lW2ldKXtyPXRbaV0sbj1lW2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH1mdW5jdGlvbiBpKHQpe3JldHVybiBlLkJ1ZmZlciYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5CdWZmZXIuaXNCdWZmZXI/ZS5CdWZmZXIuaXNCdWZmZXIodCk6IShudWxsPT10fHwhdC5faXNCdWZmZXIpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBhKHQpe3JldHVybiFpKHQpJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5BcnJheUJ1ZmZlciYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcodCk6ISF0JiYodCBpbnN0YW5jZW9mIERhdGFWaWV3fHwhISh0LmJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpKSl9ZnVuY3Rpb24gZih0KXtpZih3LmlzRnVuY3Rpb24odCkpe2lmKFMpcmV0dXJuIHQubmFtZTt2YXIgZT10LnRvU3RyaW5nKCkscj1lLm1hdGNoKEEpO3JldHVybiByJiZyWzFdfX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/dC5sZW5ndGg8ZT90OnQuc2xpY2UoMCxlKTp0fWZ1bmN0aW9uIHUodCl7aWYoU3x8IXcuaXNGdW5jdGlvbih0KSlyZXR1cm4gdy5pbnNwZWN0KHQpO3ZhciBlPWYodCkscj1lP1wiOiBcIitlOlwiXCI7cmV0dXJuXCJbRnVuY3Rpb25cIityK1wiXVwifWZ1bmN0aW9uIGgodCl7cmV0dXJuIHModSh0LmFjdHVhbCksMTI4KStcIiBcIit0Lm9wZXJhdG9yK1wiIFwiK3ModSh0LmV4cGVjdGVkKSwxMjgpfWZ1bmN0aW9uIGModCxlLHIsbixpKXt0aHJvdyBuZXcgRS5Bc3NlcnRpb25FcnJvcih7bWVzc2FnZTpyLGFjdHVhbDp0LGV4cGVjdGVkOmUsb3BlcmF0b3I6bixzdGFja1N0YXJ0RnVuY3Rpb246aX0pfWZ1bmN0aW9uIGQodCxlKXt0fHxjKHQsITAsZSxcIj09XCIsRS5vayl9ZnVuY3Rpb24gbCh0LGUscixmKXtpZih0PT09ZSlyZXR1cm4hMDtpZihpKHQpJiZpKGUpKXJldHVybiAwPT09bih0LGUpO2lmKHcuaXNEYXRlKHQpJiZ3LmlzRGF0ZShlKSlyZXR1cm4gdC5nZXRUaW1lKCk9PT1lLmdldFRpbWUoKTtpZih3LmlzUmVnRXhwKHQpJiZ3LmlzUmVnRXhwKGUpKXJldHVybiB0LnNvdXJjZT09PWUuc291cmNlJiZ0Lmdsb2JhbD09PWUuZ2xvYmFsJiZ0Lm11bHRpbGluZT09PWUubXVsdGlsaW5lJiZ0Lmxhc3RJbmRleD09PWUubGFzdEluZGV4JiZ0Lmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2U7aWYobnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0fHxudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUpe2lmKGEodCkmJmEoZSkmJm8odCk9PT1vKGUpJiYhKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpKXJldHVybiAwPT09bihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKTtpZihpKHQpIT09aShlKSlyZXR1cm4hMTtmPWZ8fHthY3R1YWw6W10sZXhwZWN0ZWQ6W119O3ZhciBzPWYuYWN0dWFsLmluZGV4T2YodCk7cmV0dXJuIHMhPT0tMSYmcz09PWYuZXhwZWN0ZWQuaW5kZXhPZihlKXx8KGYuYWN0dWFsLnB1c2godCksZi5leHBlY3RlZC5wdXNoKGUpLGIodCxlLHIsZikpfXJldHVybiByP3Q9PT1lOnQ9PWV9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIltvYmplY3QgQXJndW1lbnRzXVwiPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gYih0LGUscixuKXtpZihudWxsPT09dHx8dm9pZCAwPT09dHx8bnVsbD09PWV8fHZvaWQgMD09PWUpcmV0dXJuITE7aWYody5pc1ByaW1pdGl2ZSh0KXx8dy5pc1ByaW1pdGl2ZShlKSlyZXR1cm4gdD09PWU7aWYociYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiExO3ZhciBpPXAodCksbz1wKGUpO2lmKGkmJiFvfHwhaSYmbylyZXR1cm4hMTtpZihpKXJldHVybiB0PU0uY2FsbCh0KSxlPU0uY2FsbChlKSxsKHQsZSxyKTt2YXIgYSxmLHM9ayh0KSx1PWsoZSk7aWYocy5sZW5ndGghPT11Lmxlbmd0aClyZXR1cm4hMTtmb3Iocy5zb3J0KCksdS5zb3J0KCksZj1zLmxlbmd0aC0xO2Y+PTA7Zi0tKWlmKHNbZl0hPT11W2ZdKXJldHVybiExO2ZvcihmPXMubGVuZ3RoLTE7Zj49MDtmLS0paWYoYT1zW2ZdLCFsKHRbYV0sZVthXSxyLG4pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHYodCxlLHIpe2wodCxlLCEwKSYmYyh0LGUscixcIm5vdERlZXBTdHJpY3RFcXVhbFwiLHYpfWZ1bmN0aW9uIHkodCxlKXtpZighdHx8IWUpcmV0dXJuITE7aWYoXCJbb2JqZWN0IFJlZ0V4cF1cIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBlLnRlc3QodCk7dHJ5e2lmKHQgaW5zdGFuY2VvZiBlKXJldHVybiEwfWNhdGNoKHQpe31yZXR1cm4hRXJyb3IuaXNQcm90b3R5cGVPZihlKSYmZS5jYWxsKHt9LHQpPT09ITB9ZnVuY3Rpb24gbSh0KXt2YXIgZTt0cnl7dCgpfWNhdGNoKHQpe2U9dH1yZXR1cm4gZX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJibG9ja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1wic3RyaW5nXCI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksaT1tKGUpLG49KHImJnIubmFtZT9cIiAoXCIrci5uYW1lK1wiKS5cIjpcIi5cIikrKG4/XCIgXCIrbjpcIi5cIiksdCYmIWkmJmMoaSxyLFwiTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb25cIituKTt2YXIgbz1cInN0cmluZ1wiPT10eXBlb2YgbixhPSF0JiZ3LmlzRXJyb3IoaSksZj0hdCYmaSYmIXI7aWYoKGEmJm8mJnkoaSxyKXx8ZikmJmMoaSxyLFwiR290IHVud2FudGVkIGV4Y2VwdGlvblwiK24pLHQmJmkmJnImJiF5KGkscil8fCF0JiZpKXRocm93IGl9dmFyIHc9cig2MDYpLF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxNPUFycmF5LnByb3RvdHlwZS5zbGljZSxTPWZ1bmN0aW9uKCl7cmV0dXJuXCJmb29cIj09PWZ1bmN0aW9uKCl7fS5uYW1lfSgpLEU9dC5leHBvcnRzPWQsQT0vXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO0UuQXNzZXJ0aW9uRXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5uYW1lPVwiQXNzZXJ0aW9uRXJyb3JcIix0aGlzLmFjdHVhbD10LmFjdHVhbCx0aGlzLmV4cGVjdGVkPXQuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj10Lm9wZXJhdG9yLHQubWVzc2FnZT8odGhpcy5tZXNzYWdlPXQubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9aCh0aGlzKSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITApO3ZhciBlPXQuc3RhY2tTdGFydEZ1bmN0aW9ufHxjO2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZSk7ZWxzZXt2YXIgcj1uZXcgRXJyb3I7aWYoci5zdGFjayl7dmFyIG49ci5zdGFjayxpPWYoZSksbz1uLmluZGV4T2YoXCJcXG5cIitpKTtpZihvPj0wKXt2YXIgYT1uLmluZGV4T2YoXCJcXG5cIixvKzEpO249bi5zdWJzdHJpbmcoYSsxKX10aGlzLnN0YWNrPW59fX0sdy5pbmhlcml0cyhFLkFzc2VydGlvbkVycm9yLEVycm9yKSxFLmZhaWw9YyxFLm9rPWQsRS5lcXVhbD1mdW5jdGlvbih0LGUscil7dCE9ZSYmYyh0LGUscixcIj09XCIsRS5lcXVhbCl9LEUubm90RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PWUmJmModCxlLHIsXCIhPVwiLEUubm90RXF1YWwpfSxFLmRlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7bCh0LGUsITEpfHxjKHQsZSxyLFwiZGVlcEVxdWFsXCIsRS5kZWVwRXF1YWwpfSxFLmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7bCh0LGUsITApfHxjKHQsZSxyLFwiZGVlcFN0cmljdEVxdWFsXCIsRS5kZWVwU3RyaWN0RXF1YWwpfSxFLm5vdERlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7bCh0LGUsITEpJiZjKHQsZSxyLFwibm90RGVlcEVxdWFsXCIsRS5ub3REZWVwRXF1YWwpfSxFLm5vdERlZXBTdHJpY3RFcXVhbD12LEUuc3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPT1lJiZjKHQsZSxyLFwiPT09XCIsRS5zdHJpY3RFcXVhbCl9LEUubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PT1lJiZjKHQsZSxyLFwiIT09XCIsRS5ub3RTdHJpY3RFcXVhbCl9LEUudGhyb3dzPWZ1bmN0aW9uKHQsZSxyKXtnKCEwLHQsZSxyKX0sRS5kb2VzTm90VGhyb3c9ZnVuY3Rpb24odCxlLHIpe2coITEsdCxlLHIpfSxFLmlmRXJyb3I9ZnVuY3Rpb24odCl7aWYodCl0aHJvdyB0fTt2YXIgaz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpXy5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gZX19KS5jYWxsKGUscigzOSkpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLGksZil7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQscixpKTthLmNhbGwodGhpcyksdGhpcy5fZmluSUQ9ZS5jb25jYXQoW2ksbmV3IGUoWzAsMCwwLDFdKV0pLGk9ZS5jb25jYXQoW2ksbmV3IGUoWzAsMCwwLDJdKV0pLHRoaXMuX2NpcGhlcj1uZXcgby5BRVMociksdGhpcy5fcHJldj1uZXcgZShpLmxlbmd0aCksdGhpcy5fY2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fc2VjQ2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fZGVjcnlwdD1mLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCxpLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT10O3ZhciB1PW5ldyBlKDQpO3UuZmlsbCgwKSx0aGlzLl9naGFzaD1uZXcgcyh0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHUpKSx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj0wO3QubGVuZ3RoIT09ZS5sZW5ndGgmJnIrKztmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGk9LTE7KytpPG47KXIrPXRbaV1eZVtpXTtyZXR1cm4gcn12YXIgbz1yKDk0KSxhPXIoOTcpLGY9cigyKSxzPXIoNDk3KSx1PXIoNjcpO2YobixhKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciByPTE2LXRoaXMuX2FsZW4lMTY7cjwxNiYmKHI9bmV3IGUociksci5maWxsKDApLHRoaXMuX2doYXNoLnVwZGF0ZShyKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBuPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQpO3JldHVybiB0aGlzLl9kZWNyeXB0P3RoaXMuX2doYXNoLnVwZGF0ZSh0KTp0aGlzLl9naGFzaC51cGRhdGUobiksdGhpcy5fbGVuKz10Lmxlbmd0aCxufSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIik7dmFyIHQ9dSh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0KXtpZihpKHQsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhXCIpfWVsc2UgdGhpcy5fYXV0aFRhZz10O3RoaXMuX2NpcGhlci5zY3J1YigpfSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2RlY3J5cHQmJmUuaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpcmV0dXJuIHRoaXMuX2F1dGhUYWc7dGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIik7dGhpcy5fYXV0aFRhZz10fSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTt0aGlzLl9naGFzaC51cGRhdGUodCksdGhpcy5fYWxlbis9dC5sZW5ndGh9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNjcpO2UuZW5jcnlwdD1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSx0Ll9wcmV2KTtyZXR1cm4gdC5fcHJldj10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHIpLHQuX3ByZXZ9LGUuZGVjcnlwdD1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByZXY7dC5fcHJldj1lO3ZhciBpPXQuX2NpcGhlci5kZWNyeXB0QmxvY2soZSk7cmV0dXJuIG4oaSxyKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbil7dmFyIG89ci5sZW5ndGgsYT1pKHIsZS5fY2FjaGUpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShvKSxlLl9wcmV2PXQuY29uY2F0KFtlLl9wcmV2LG4/cjphXSksYX12YXIgaT1yKDY3KTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyLGkpe2Zvcih2YXIgbyxhPW5ldyB0KFwiXCIpO3IubGVuZ3RoOyl7aWYoMD09PWUuX2NhY2hlLmxlbmd0aCYmKGUuX2NhY2hlPWUuX2NpcGhlci5lbmNyeXB0QmxvY2soZS5fcHJldiksZS5fcHJldj1uZXcgdChcIlwiKSksIShlLl9jYWNoZS5sZW5ndGg8PXIubGVuZ3RoKSl7YT10LmNvbmNhdChbYSxuKGUscixpKV0pO2JyZWFrfW89ZS5fY2FjaGUubGVuZ3RoLGE9dC5jb25jYXQoW2EsbihlLHIuc2xpY2UoMCxvKSxpKV0pLHI9ci5zbGljZShvKX1yZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCxlLHIpe2Zvcih2YXIgaSxvLGEsZj0tMSxzPTgsdT0wOysrZjxzOylpPXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldiksbz1lJjE8PDctZj8xMjg6MCxhPWlbMF1ebyx1Kz0oMTI4JmEpPj5mJTgsdC5fcHJldj1uKHQuX3ByZXYscj9vOmEpO3JldHVybiB1fWZ1bmN0aW9uIG4oZSxyKXt2YXIgbj1lLmxlbmd0aCxpPS0xLG89bmV3IHQoZS5sZW5ndGgpO2ZvcihlPXQuY29uY2F0KFtlLG5ldyB0KFtyXSldKTsrK2k8bjspb1tpXT1lW2ldPDwxfGVbaSsxXT4+NztyZXR1cm4gb31lLmVuY3J5cHQ9ZnVuY3Rpb24oZSxuLGkpe2Zvcih2YXIgbz1uLmxlbmd0aCxhPW5ldyB0KG8pLGY9LTE7KytmPG87KWFbZl09cihlLG5bZl0saSk7cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKGUscixuKXt2YXIgaT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLG89aVswXV5yO3JldHVybiBlLl9wcmV2PXQuY29uY2F0KFtlLl9wcmV2LnNsaWNlKDEpLG5ldyB0KFtuP3I6b10pXSksb31lLmVuY3J5cHQ9ZnVuY3Rpb24oZSxuLGkpe2Zvcih2YXIgbz1uLmxlbmd0aCxhPW5ldyB0KG8pLGY9LTE7KytmPG87KWFbZl09cihlLG5bZl0saSk7cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fY2lwaGVyLmVuY3J5cHRCbG9jayhlKX0sZS5kZWNyeXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NpcGhlci5kZWNyeXB0QmxvY2soZSl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQuX3ByZXY9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KSx0Ll9wcmV2fXZhciBpPXIoNjcpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIpe2Zvcig7ZS5fY2FjaGUubGVuZ3RoPHIubGVuZ3RoOyllLl9jYWNoZT10LmNvbmNhdChbZS5fY2FjaGUsbihlKV0pO3ZhciBvPWUuX2NhY2hlLnNsaWNlKDAsci5sZW5ndGgpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShyLmxlbmd0aCksaShyLG8pfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsYSxmKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KG8uY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IGkuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IGUoYS5sZW5ndGgpLHRoaXMuX2NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX3NlY0NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX2RlY3J5cHQ9ZixhLmNvcHkodGhpcy5fcHJldiksdm9pZCh0aGlzLl9tb2RlPXQpKTpuZXcgbih0LHIsYSl9dmFyIGk9cig5NCksbz1yKDk3KSxhPXIoMik7YShuLG8pLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQsdGhpcy5fZGVjcnlwdCl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCl7ZVtcIlJTQS1TSEEyMjRcIl09ZS5zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbj17c2lnbjpcInJzYVwiLGhhc2g6XCJzaGEyMjRcIixpZDpuZXcgdChcIjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjXCIsXCJoZXhcIil9LGVbXCJSU0EtU0hBMjU2XCJdPWUuc2hhMjU2V2l0aFJTQUVuY3J5cHRpb249e3NpZ246XCJyc2FcIixoYXNoOlwic2hhMjU2XCIsaWQ6bmV3IHQoXCIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMFwiLFwiaGV4XCIpfSxlW1wiUlNBLVNIQTM4NFwiXT1lLnNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uPXtzaWduOlwicnNhXCIsaGFzaDpcInNoYTM4NFwiLGlkOm5ldyB0KFwiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzBcIixcImhleFwiKX0sZVtcIlJTQS1TSEE1MTJcIl09ZS5zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbj17c2lnbjpcInJzYVwiLGhhc2g6XCJzaGE1MTJcIixpZDpuZXcgdChcIjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwXCIsXCJoZXhcIil9LGVbXCJSU0EtU0hBMVwiXT17c2lnbjpcInJzYVwiLGhhc2g6XCJzaGExXCIsaWQ6bmV3IHQoXCIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTRcIixcImhleFwiKX0sZVtcImVjZHNhLXdpdGgtU0hBMVwiXT17c2lnbjpcImVjZHNhXCIsaGFzaDpcInNoYTFcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlLkRTQT1lW1wiRFNBLVNIQTFcIl09ZVtcIkRTQS1TSEFcIl09e3NpZ246XCJkc2FcIixoYXNoOlwic2hhMVwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGVbXCJEU0EtU0hBMjI0XCJdPWVbXCJEU0EtV0lUSC1TSEEyMjRcIl09e3NpZ246XCJkc2FcIixoYXNoOlwic2hhMjI0XCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZVtcIkRTQS1TSEEyNTZcIl09ZVtcIkRTQS1XSVRILVNIQTI1NlwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJzaGEyNTZcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiRFNBLVNIQTM4NFwiXT1lW1wiRFNBLVdJVEgtU0hBMzg0XCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInNoYTM4NFwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGVbXCJEU0EtU0hBNTEyXCJdPWVbXCJEU0EtV0lUSC1TSEE1MTJcIl09e3NpZ246XCJkc2FcIixoYXNoOlwic2hhNTEyXCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZVtcIkRTQS1SSVBFTUQxNjBcIl09e3NpZ246XCJkc2FcIixoYXNoOlwicm1kMTYwXCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZVtcIlJTQS1SSVBFTUQxNjBcIl09ZS5yaXBlbWQxNjBXaXRoUlNBPXtzaWduOlwicnNhXCIsaGFzaDpcInJtZDE2MFwiLGlkOm5ldyB0KFwiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0XCIsXCJoZXhcIil9LGVbXCJSU0EtTUQ1XCJdPWUubWQ1V2l0aFJTQUVuY3J5cHRpb249e3NpZ246XCJyc2FcIixoYXNoOlwibWQ1XCIsaWQ6bmV3IHQoXCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTBcIixcImhleFwiKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2VbXCIxLjMuMTMyLjAuMTBcIl09XCJzZWNwMjU2azFcIixlW1wiMS4zLjEzMi4wLjMzXCJdPVwicDIyNFwiLGVbXCIxLjIuODQwLjEwMDQ1LjMuMS4xXCJdPVwicDE5MlwiLGVbXCIxLjIuODQwLjEwMDQ1LjMuMS43XCJdPVwicDI1NlwiLGVbXCIxLjMuMTMyLjAuMzRcIl09XCJwMzg0XCIsZVtcIjEuMy4xMzIuMC4zNVwiXT1cInA1MjFcIn0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3ZhciByO1wib2JqZWN0XCIhPXR5cGVvZiB0fHxlLmlzQnVmZmVyKHQpfHwocj10LnBhc3NwaHJhc2UsdD10LmtleSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQpKTt2YXIgbixhLHM9Zih0LHIpLHU9cy50YWcsaD1zLmRhdGE7c3dpdGNoKHUpe2Nhc2VcIlBVQkxJQyBLRVlcIjpzd2l0Y2goYT1vLlB1YmxpY0tleS5kZWNvZGUoaCxcImRlclwiKSxuPWEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKFwiLlwiKSl7Y2FzZVwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjpyZXR1cm4gby5SU0FQdWJsaWNLZXkuZGVjb2RlKGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLFwiZGVyXCIpO2Nhc2VcIjEuMi44NDAuMTAwNDUuMi4xXCI6cmV0dXJuIGEuc3ViamVjdFByaXZhdGVLZXk9YS5zdWJqZWN0UHVibGljS2V5LHt0eXBlOlwiZWNcIixkYXRhOmF9O2Nhc2VcIjEuMi44NDAuMTAwNDAuNC4xXCI6cmV0dXJuIGEuYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PW8uRFNBcGFyYW0uZGVjb2RlKGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLFwiZGVyXCIpLHt0eXBlOlwiZHNhXCIsZGF0YTphLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgaWQgXCIrbil9dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIit1KTtjYXNlXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIjpoPW8uRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKSxoPWkoaCxyKTtjYXNlXCJQUklWQVRFIEtFWVwiOnN3aXRjaChhPW8uUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKSxuPWEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKFwiLlwiKSl7Y2FzZVwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjpyZXR1cm4gby5SU0FQcml2YXRlS2V5LmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpO2Nhc2VcIjEuMi44NDAuMTAwNDUuMi4xXCI6cmV0dXJue2N1cnZlOmEuYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6by5FQ1ByaXZhdGVLZXkuZGVjb2RlKGEuc3ViamVjdFByaXZhdGVLZXksXCJkZXJcIikucHJpdmF0ZUtleX07Y2FzZVwiMS4yLjg0MC4xMDA0MC40LjFcIjpyZXR1cm4gYS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PW8uRFNBcGFyYW0uZGVjb2RlKGEuc3ViamVjdFByaXZhdGVLZXksXCJkZXJcIikse3R5cGU6XCJkc2FcIixwYXJhbXM6YS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IGlkIFwiK24pfXRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IHR5cGUgXCIrdSk7Y2FzZVwiUlNBIFBVQkxJQyBLRVlcIjpyZXR1cm4gby5SU0FQdWJsaWNLZXkuZGVjb2RlKGgsXCJkZXJcIik7Y2FzZVwiUlNBIFBSSVZBVEUgS0VZXCI6cmV0dXJuIG8uUlNBUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKTtjYXNlXCJEU0EgUFJJVkFURSBLRVlcIjpyZXR1cm57dHlwZTpcImRzYVwiLHBhcmFtczpvLkRTQVByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIil9O2Nhc2VcIkVDIFBSSVZBVEUgS0VZXCI6cmV0dXJuIGg9by5FQ1ByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIikse2N1cnZlOmgucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OmgucHJpdmF0ZUtleX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSB0eXBlIFwiK3UpfX1mdW5jdGlvbiBpKHQscil7dmFyIG49dC5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsaT1wYXJzZUludCh0LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksbz1hW3QuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbihcIi5cIildLGY9dC5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsaD10LnN1YmplY3RQcml2YXRlS2V5LGM9cGFyc2VJbnQoby5zcGxpdChcIi1cIilbMV0sMTApLzgsZD11LnBia2RmMlN5bmMocixuLGksYyksbD1zLmNyZWF0ZURlY2lwaGVyaXYobyxkLGYpLHA9W107cmV0dXJuIHAucHVzaChsLnVwZGF0ZShoKSkscC5wdXNoKGwuZmluYWwoKSksZS5jb25jYXQocCl9dmFyIG89cig1MjgpLGE9cig0NjYpLGY9cig1MjkpLHM9cigyMTkpLHU9cigxNTEpO3QuZXhwb3J0cz1uLG4uc2lnbmF0dXJlPW8uc2lnbmF0dXJlfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gYS5jYWxsKHRoaXMsZSksZi5pc0J1ZmZlcih0KT8odGhpcy5iYXNlPXQsdGhpcy5vZmZzZXQ9MCx2b2lkKHRoaXMubGVuZ3RoPXQubGVuZ3RoKSk6dm9pZCB0aGlzLmVycm9yKFwiSW5wdXQgbm90IEJ1ZmZlclwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpfHwodD1uZXcgaSh0LGUpKSx0aGlzLmxlbmd0aCs9dC5sZW5ndGgsdH0sdGhpcyk7ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgdCl7aWYoISgwPD10JiZ0PD0yNTUpKXJldHVybiBlLmVycm9yKFwibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZVwiKTt0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXRoaXMudmFsdWU9dCx0aGlzLmxlbmd0aD1mLmJ5dGVMZW5ndGgodCk7ZWxzZXtpZighZi5pc0J1ZmZlcih0KSlyZXR1cm4gZS5lcnJvcihcIlVuc3VwcG9ydGVkIHR5cGU6IFwiK3R5cGVvZiB0KTt0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9fXZhciBvPXIoMiksYT1yKDY4KS5SZXBvcnRlcixmPXIoMSkuQnVmZmVyO28obixhKSxlLkRlY29kZXJCdWZmZXI9bixuLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRlcjphLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxuLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuKHRoaXMuYmFzZSk7cmV0dXJuIGUub2Zmc2V0PXQub2Zmc2V0LGUubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PXQub2Zmc2V0LGEucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLHQucmVwb3J0ZXIpLGV9LG4ucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sbi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IodHx8XCJEZWNvZGVyQnVmZmVyIG92ZXJydW5cIil9LG4ucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24odCxlKXtpZighKHRoaXMub2Zmc2V0K3Q8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihlfHxcIkRlY29kZXJCdWZmZXIgb3ZlcnJ1blwiKTt2YXIgcj1uZXcgbih0aGlzLmJhc2UpO3JldHVybiByLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsci5vZmZzZXQ9dGhpcy5vZmZzZXQsci5sZW5ndGg9dGhpcy5vZmZzZXQrdCx0aGlzLm9mZnNldCs9dCxyfSxuLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYmFzZS5zbGljZSh0P3Qub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sZS5FbmNvZGVyQnVmZmVyPWksaS5wcm90b3R5cGUuam9pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0fHwodD1uZXcgZih0aGlzLmxlbmd0aCkpLGV8fChlPTApLDA9PT10aGlzLmxlbmd0aD90OihBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihyKXtyLmpvaW4odCxlKSxlKz1yLmxlbmd0aH0pOihcIm51bWJlclwiPT10eXBlb2YgdGhpcy52YWx1ZT90W2VdPXRoaXMudmFsdWU6XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMudmFsdWU/dC53cml0ZSh0aGlzLnZhbHVlLGUpOmYuaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weSh0LGUpLGUrPXRoaXMubGVuZ3RoKSx0KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uX3JldmVyc2U9ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7KDB8cik9PXImJihyfD0wKTt2YXIgbj10W3JdO2Vbbl09cn0pLGV9LG4uZGVyPXIoNTMzKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5lbmM9XCJkZXJcIix0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZW50aXR5PXQsdGhpcy50cmVlPW5ldyBpLHRoaXMudHJlZS5faW5pdCh0LmJvZHkpfWZ1bmN0aW9uIGkodCl7dS5Ob2RlLmNhbGwodGhpcyxcImRlclwiLHQpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10LnJlYWRVSW50OChlKTtpZih0LmlzRXJyb3IocikpcmV0dXJuIHI7dmFyIG49Yy50YWdDbGFzc1tyPj42XSxpPTA9PT0oMzImcik7aWYoMzE9PT0oMzEmcikpe3ZhciBvPXI7Zm9yKHI9MDsxMjg9PT0oMTI4Jm8pOyl7aWYobz10LnJlYWRVSW50OChlKSx0LmlzRXJyb3IobykpcmV0dXJuIG87cjw8PTcscnw9MTI3Jm99fWVsc2UgciY9MzE7dmFyIGE9Yy50YWdbcl07cmV0dXJue2NsczpuLHByaW1pdGl2ZTppLHRhZzpyLHRhZ1N0cjphfX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LnJlYWRVSW50OChyKTtpZih0LmlzRXJyb3IobikpcmV0dXJuIG47aWYoIWUmJjEyOD09PW4pcmV0dXJuIG51bGw7aWYoMD09PSgxMjgmbikpcmV0dXJuIG47dmFyIGk9MTI3Jm47aWYoaT49NClyZXR1cm4gdC5lcnJvcihcImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmdcIik7bj0wO2Zvcih2YXIgbz0wO288aTtvKyspe248PD04O3ZhciBhPXQucmVhZFVJbnQ4KHIpO2lmKHQuaXNFcnJvcihhKSlyZXR1cm4gYTtufD1hfXJldHVybiBufXZhciBmPXIoMikscz1yKDEwMCksdT1zLmJhc2UsaD1zLmJpZ251bSxjPXMuY29uc3RhbnRzLmRlcjt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIHUuRGVjb2RlckJ1ZmZlcnx8KHQ9bmV3IHUuRGVjb2RlckJ1ZmZlcih0LGUpKSx0aGlzLnRyZWUuX2RlY29kZSh0LGUpfSxmKGksdS5Ob2RlKSxpLnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbih0LGUscil7aWYodC5pc0VtcHR5KCkpcmV0dXJuITE7dmFyIG49dC5zYXZlKCksaT1vKHQsJ0ZhaWxlZCB0byBwZWVrIHRhZzogXCInK2UrJ1wiJyk7cmV0dXJuIHQuaXNFcnJvcihpKT9pOih0LnJlc3RvcmUobiksaS50YWc9PT1lfHxpLnRhZ1N0cj09PWV8fGkudGFnU3RyK1wib2ZcIj09PWV8fHIpfSxpLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1vKHQsJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mIFwiJytlKydcIicpO2lmKHQuaXNFcnJvcihuKSlyZXR1cm4gbjt2YXIgaT1hKHQsbi5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mIFwiJytlKydcIicpO2lmKHQuaXNFcnJvcihpKSlyZXR1cm4gaTtpZighciYmbi50YWchPT1lJiZuLnRhZ1N0ciE9PWUmJm4udGFnU3RyK1wib2ZcIiE9PWUpcmV0dXJuIHQuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6IFwiJytlKydcIicpO2lmKG4ucHJpbWl0aXZlfHxudWxsIT09aSlyZXR1cm4gdC5za2lwKGksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicrZSsnXCInKTt2YXIgZj10LnNhdmUoKSxzPXRoaXMuX3NraXBVbnRpbEVuZCh0LCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiBcIicrdGhpcy50YWcrJ1wiJyk7cmV0dXJuIHQuaXNFcnJvcihzKT9zOihpPXQub2Zmc2V0LWYub2Zmc2V0LHQucmVzdG9yZShmKSx0LnNraXAoaSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6IFwiJytlKydcIicpKX0saS5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbih0LGUpe2Zvcig7Oyl7dmFyIHI9byh0LGUpO2lmKHQuaXNFcnJvcihyKSlyZXR1cm4gcjt2YXIgbj1hKHQsci5wcmltaXRpdmUsZSk7aWYodC5pc0Vycm9yKG4pKXJldHVybiBuO3ZhciBpO2lmKGk9ci5wcmltaXRpdmV8fG51bGwhPT1uP3Quc2tpcChuKTp0aGlzLl9za2lwVW50aWxFbmQodCxlKSx0LmlzRXJyb3IoaSkpcmV0dXJuIGk7aWYoXCJlbmRcIj09PXIudGFnU3RyKWJyZWFrfX0saS5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPVtdOyF0LmlzRW1wdHkoKTspe3ZhciBvPXRoaXMuX3BlZWtUYWcodCxcImVuZFwiKTtpZih0LmlzRXJyb3IobykpcmV0dXJuIG87dmFyIGE9ci5kZWNvZGUodCxcImRlclwiLG4pO2lmKHQuaXNFcnJvcihhKSYmbylicmVhaztpLnB1c2goYSl9cmV0dXJuIGl9LGkucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24odCxlKXtpZihcImJpdHN0clwiPT09ZSl7dmFyIHI9dC5yZWFkVUludDgoKTtyZXR1cm4gdC5pc0Vycm9yKHIpP3I6e3VudXNlZDpyLGRhdGE6dC5yYXcoKX19aWYoXCJibXBzdHJcIj09PWUpe3ZhciBuPXQucmF3KCk7aWYobi5sZW5ndGglMj09PTEpcmV0dXJuIHQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaFwiKTtmb3IodmFyIGk9XCJcIixvPTA7bzxuLmxlbmd0aC8yO28rKylpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4ucmVhZFVJbnQxNkJFKDIqbykpO3JldHVybiBpfWlmKFwibnVtc3RyXCI9PT1lKXt2YXIgYT10LnJhdygpLnRvU3RyaW5nKFwiYXNjaWlcIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKGEpP2E6dC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVyc1wiKX1pZihcIm9jdHN0clwiPT09ZSlyZXR1cm4gdC5yYXcoKTtpZihcInByaW50c3RyXCI9PT1lKXt2YXIgZj10LnJhdygpLnRvU3RyaW5nKFwiYXNjaWlcIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoZik/Zjp0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnNcIil9cmV0dXJuL3N0ciQvLnRlc3QoZSk/dC5yYXcoKS50b1N0cmluZygpOnQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogXCIrZStcIiB1bnN1cHBvcnRlZFwiKX0saS5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1bXSxvPTA7IXQuaXNFbXB0eSgpOyl7dmFyIGE9dC5yZWFkVUludDgoKTtvPDw9NyxvfD0xMjcmYSwwPT09KDEyOCZhKSYmKGkucHVzaChvKSxvPTApfTEyOCZhJiZpLnB1c2gobyk7dmFyIGY9aVswXS80MHwwLHM9aVswXSU0MDtpZihuPXI/aTpbZixzXS5jb25jYXQoaS5zbGljZSgxKSksZSl7dmFyIHU9ZVtuLmpvaW4oXCIgXCIpXTt2b2lkIDA9PT11JiYodT1lW24uam9pbihcIi5cIildKSx2b2lkIDAhPT11JiYobj11KX1yZXR1cm4gbn0saS5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhdygpLnRvU3RyaW5nKCk7aWYoXCJnZW50aW1lXCI9PT1lKXZhciBuPTB8ci5zbGljZSgwLDQpLGk9MHxyLnNsaWNlKDQsNiksbz0wfHIuc2xpY2UoNiw4KSxhPTB8ci5zbGljZSg4LDEwKSxmPTB8ci5zbGljZSgxMCwxMikscz0wfHIuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoXCJ1dGN0aW1lXCIhPT1lKXJldHVybiB0LmVycm9yKFwiRGVjb2RpbmcgXCIrZStcIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO3ZhciBuPTB8ci5zbGljZSgwLDIpLGk9MHxyLnNsaWNlKDIsNCksbz0wfHIuc2xpY2UoNCw2KSxhPTB8ci5zbGljZSg2LDgpLGY9MHxyLnNsaWNlKDgsMTApLHM9MHxyLnNsaWNlKDEwLDEyKTtuPW48NzA/MmUzK246MTkwMCtufXJldHVybiBEYXRlLlVUQyhuLGktMSxvLGEsZixzLDApfSxpLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24odCl7dmFyIGU9dC5yZWFkVUludDgoKTtyZXR1cm4gdC5pc0Vycm9yKGUpP2U6MCE9PWV9LGkucHJvdG90eXBlLl9kZWNvZGVJbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhdygpLG49bmV3IGgocik7cmV0dXJuIGUmJihuPWVbbi50b1N0cmluZygxMCldfHxuKSxufSxpLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dChlKSksdC5fZ2V0RGVjb2RlcihcImRlclwiKS50cmVlfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5lbmM9XCJkZXJcIix0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZW50aXR5PXQsdGhpcy50cmVlPW5ldyBpLHRoaXMudHJlZS5faW5pdCh0LmJvZHkpfWZ1bmN0aW9uIGkodCl7aC5Ob2RlLmNhbGwodGhpcyxcImRlclwiLHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8MTA/XCIwXCIrdDp0fWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGk7aWYoXCJzZXFvZlwiPT09dD90PVwic2VxXCI6XCJzZXRvZlwiPT09dCYmKHQ9XCJzZXRcIiksYy50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkodCkpaT1jLnRhZ0J5TmFtZVt0XTtlbHNle2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHwoMHx0KSE9PXQpcmV0dXJuIG4uZXJyb3IoXCJVbmtub3duIHRhZzogXCIrdCk7aT10fXJldHVybiBpPj0zMT9uLmVycm9yKFwiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkXCIpOihlfHwoaXw9MzIpLGl8PWMudGFnQ2xhc3NCeU5hbWVbcnx8XCJ1bml2ZXJzYWxcIl08PDYpfXZhciBmPXIoMikscz1yKDEpLkJ1ZmZlcix1PXIoMTAwKSxoPXUuYmFzZSxjPXUuY29uc3RhbnRzLmRlcjt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUodCxlKS5qb2luKCl9LGYoaSxoLk5vZGUpLGkucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9YSh0LGUscix0aGlzLnJlcG9ydGVyKTtpZihuLmxlbmd0aDwxMjgpe3ZhciBvPW5ldyBzKDIpO3JldHVybiBvWzBdPWksb1sxXT1uLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtvLG5dKX1mb3IodmFyIGY9MSx1PW4ubGVuZ3RoO3U+PTI1Njt1Pj49OClmKys7dmFyIG89bmV3IHMoMitmKTtvWzBdPWksb1sxXT0xMjh8Zjtmb3IodmFyIHU9MStmLGg9bi5sZW5ndGg7aD4wO3UtLSxoPj49OClvW3VdPTI1NSZoO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtvLG5dKX0saS5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbih0LGUpe2lmKFwiYml0c3RyXCI9PT1lKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfHQudW51c2VkLHQuZGF0YV0pO2lmKFwiYm1wc3RyXCI9PT1lKXtmb3IodmFyIHI9bmV3IHMoMip0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXIud3JpdGVVSW50MTZCRSh0LmNoYXJDb2RlQXQobiksMipuKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihyKX1yZXR1cm5cIm51bXN0clwiPT09ZT90aGlzLl9pc051bXN0cih0KT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZVwiKTpcInByaW50c3RyXCI9PT1lP3RoaXMuX2lzUHJpbnRzdHIodCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmtcIik6L3N0ciQvLnRlc3QoZSk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IFwiK2UrXCIgdW5zdXBwb3J0ZWRcIil9LGkucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbih0LGUscil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe2lmKCFlKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwic3RyaW5nIG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZFwiKTtpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwXCIpO3Q9ZVt0XS5zcGxpdCgvW1xcc1xcLl0rL2cpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt0PXQuc2xpY2UoKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0W25dfD0wfWlmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiBcIitKU09OLnN0cmluZ2lmeSh0KSk7aWYoIXIpe2lmKHRbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CXCIpO3Quc3BsaWNlKDAsMiw0MCp0WzBdK3RbMV0pfWZvcih2YXIgaT0wLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXTtmb3IoaSsrO28+PTEyODtvPj49NylpKyt9Zm9yKHZhciBhPW5ldyBzKGkpLGY9YS5sZW5ndGgtMSxuPXQubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBvPXRbbl07Zm9yKGFbZi0tXT0xMjcmbzsobz4+PTcpPjA7KWFbZi0tXT0xMjh8MTI3Jm99cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoYSl9LGkucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1uZXcgRGF0ZSh0KTtyZXR1cm5cImdlbnRpbWVcIj09PWU/cj1bbyhuLmdldEZ1bGxZZWFyKCkpLG8obi5nZXRVVENNb250aCgpKzEpLG8obi5nZXRVVENEYXRlKCkpLG8obi5nZXRVVENIb3VycygpKSxvKG4uZ2V0VVRDTWludXRlcygpKSxvKG4uZ2V0VVRDU2Vjb25kcygpKSxcIlpcIl0uam9pbihcIlwiKTpcInV0Y3RpbWVcIj09PWU/cj1bbyhuLmdldEZ1bGxZZWFyKCklMTAwKSxvKG4uZ2V0VVRDTW9udGgoKSsxKSxvKG4uZ2V0VVRDRGF0ZSgpKSxvKG4uZ2V0VVRDSG91cnMoKSksbyhuLmdldFVUQ01pbnV0ZXMoKSksbyhuLmdldFVUQ1NlY29uZHMoKSksXCJaXCJdLmpvaW4oXCJcIik6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIFwiK2UrXCIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKSx0aGlzLl9lbmNvZGVTdHIocixcIm9jdHN0clwiKX0saS5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihcIlwiKX0saS5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZighZSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXBcIik7aWYoIWUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogXCIrSlNPTi5zdHJpbmdpZnkodCkpO3Q9ZVt0XX1pZihcIm51bWJlclwiIT10eXBlb2YgdCYmIXMuaXNCdWZmZXIodCkpe3ZhciByPXQudG9BcnJheSgpOyF0LnNpZ24mJjEyOCZyWzBdJiZyLnVuc2hpZnQoMCksdD1uZXcgcyhyKX1pZihzLmlzQnVmZmVyKHQpKXt2YXIgbj10Lmxlbmd0aDswPT09dC5sZW5ndGgmJm4rKzt2YXIgaT1uZXcgcyhuKTtyZXR1cm4gdC5jb3B5KGkpLDA9PT10Lmxlbmd0aCYmKGlbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihpKX1pZih0PDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTtpZih0PDI1NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCx0XSk7Zm9yKHZhciBuPTEsbz10O28+PTI1NjtvPj49OCluKys7Zm9yKHZhciBpPW5ldyBBcnJheShuKSxvPWkubGVuZ3RoLTE7bz49MDtvLS0paVtvXT0yNTUmdCx0Pj49ODtyZXR1cm4gMTI4JmlbMF0mJmkudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBzKGkpKX0saS5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodD8yNTU6MCl9LGkucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodD10KGUpKSx0Ll9nZXRFbmNvZGVyKFwiZGVyXCIpLnRyZWV9LGkucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbih0LGUscil7dmFyIG4saT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PWkuZGVmYXVsdClyZXR1cm4hMTt2YXIgbz10LmpvaW4oKTtpZih2b2lkIDA9PT1pLmRlZmF1bHRCdWZmZXImJihpLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoaS5kZWZhdWx0LGUscikuam9pbigpKSxvLmxlbmd0aCE9PWkuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylpZihvW25dIT09aS5kZWZhdWx0QnVmZmVyW25dKXJldHVybiExO3JldHVybiEwfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixpLGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0LHIsaSk7YS5jYWxsKHRoaXMpLHRoaXMuX2ZpbklEPWUuY29uY2F0KFtpLG5ldyBlKFswLDAsMCwxXSldKSxpPWUuY29uY2F0KFtpLG5ldyBlKFswLDAsMCwyXSldKSx0aGlzLl9jaXBoZXI9bmV3IG8uQUVTKHIpLHRoaXMuX3ByZXY9bmV3IGUoaS5sZW5ndGgpLHRoaXMuX2NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX3NlY0NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX2RlY3J5cHQ9Zix0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAsaS5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9dDt2YXIgdT1uZXcgZSg0KTt1LmZpbGwoMCksdGhpcy5fZ2hhc2g9bmV3IHModGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh1KSksdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9MDt0Lmxlbmd0aCE9PWUubGVuZ3RoJiZyKys7Zm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxpPS0xOysraTxuOylyKz10W2ldXmVbaV07cmV0dXJuIHJ9dmFyIG89cigxMDEpLGE9cigxMDMpLGY9cigyKSxzPXIoNTQxKSx1PXIoNjkpO2YobixhKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciByPTE2LXRoaXMuX2FsZW4lMTY7cjwxNiYmKHI9bmV3IGUociksci5maWxsKDApLHRoaXMuX2doYXNoLnVwZGF0ZShyKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBuPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQpO3JldHVybiB0aGlzLl9kZWNyeXB0P3RoaXMuX2doYXNoLnVwZGF0ZSh0KTp0aGlzLl9naGFzaC51cGRhdGUobiksdGhpcy5fbGVuKz10Lmxlbmd0aCxufSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIik7dmFyIHQ9dSh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0KXtpZihpKHQsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhXCIpfWVsc2UgdGhpcy5fYXV0aFRhZz10O3RoaXMuX2NpcGhlci5zY3J1YigpfSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2RlY3J5cHQmJmUuaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpcmV0dXJuIHRoaXMuX2F1dGhUYWc7dGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIik7dGhpcy5fYXV0aFRhZz10fSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTt0aGlzLl9naGFzaC51cGRhdGUodCksdGhpcy5fYWxlbis9dC5sZW5ndGh9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gT2JqZWN0LmtleXMoYSl9dmFyIGk9cig1NDApO2UuY3JlYXRlQ2lwaGVyPWUuQ2lwaGVyPWkuY3JlYXRlQ2lwaGVyLGUuY3JlYXRlQ2lwaGVyaXY9ZS5DaXBoZXJpdj1pLmNyZWF0ZUNpcGhlcml2O3ZhciBvPXIoNTM5KTtlLmNyZWF0ZURlY2lwaGVyPWUuRGVjaXBoZXI9by5jcmVhdGVEZWNpcGhlcixlLmNyZWF0ZURlY2lwaGVyaXY9ZS5EZWNpcGhlcml2PW8uY3JlYXRlRGVjaXBoZXJpdjt2YXIgYT1yKDE0Nyk7ZS5saXN0Q2lwaGVycz1lLmdldENpcGhlcnM9bn0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNjkpO2UuZW5jcnlwdD1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSx0Ll9wcmV2KTtyZXR1cm4gdC5fcHJldj10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHIpLHQuX3ByZXZ9LGUuZGVjcnlwdD1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByZXY7dC5fcHJldj1lO3ZhciBpPXQuX2NpcGhlci5kZWNyeXB0QmxvY2soZSk7cmV0dXJuIG4oaSxyKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbil7dmFyIG89ci5sZW5ndGgsYT1pKHIsZS5fY2FjaGUpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShvKSxlLl9wcmV2PXQuY29uY2F0KFtlLl9wcmV2LG4/cjphXSksYX12YXIgaT1yKDY5KTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyLGkpe2Zvcih2YXIgbyxhPW5ldyB0KFwiXCIpO3IubGVuZ3RoOyl7aWYoMD09PWUuX2NhY2hlLmxlbmd0aCYmKGUuX2NhY2hlPWUuX2NpcGhlci5lbmNyeXB0QmxvY2soZS5fcHJldiksZS5fcHJldj1uZXcgdChcIlwiKSksIShlLl9jYWNoZS5sZW5ndGg8PXIubGVuZ3RoKSl7YT10LmNvbmNhdChbYSxuKGUscixpKV0pO2JyZWFrfW89ZS5fY2FjaGUubGVuZ3RoLGE9dC5jb25jYXQoW2EsbihlLHIuc2xpY2UoMCxvKSxpKV0pLHI9ci5zbGljZShvKX1yZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCxlLHIpe2Zvcih2YXIgaSxvLGEsZj0tMSxzPTgsdT0wOysrZjxzOylpPXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldiksbz1lJjE8PDctZj8xMjg6MCxhPWlbMF1ebyx1Kz0oMTI4JmEpPj5mJTgsdC5fcHJldj1uKHQuX3ByZXYscj9vOmEpO3JldHVybiB1fWZ1bmN0aW9uIG4oZSxyKXt2YXIgbj1lLmxlbmd0aCxpPS0xLG89bmV3IHQoZS5sZW5ndGgpO2ZvcihlPXQuY29uY2F0KFtlLG5ldyB0KFtyXSldKTsrK2k8bjspb1tpXT1lW2ldPDwxfGVbaSsxXT4+NztyZXR1cm4gb31lLmVuY3J5cHQ9ZnVuY3Rpb24oZSxuLGkpe2Zvcih2YXIgbz1uLmxlbmd0aCxhPW5ldyB0KG8pLGY9LTE7KytmPG87KWFbZl09cihlLG5bZl0saSk7cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKGUscixuKXt2YXIgaT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLG89aVswXV5yO3JldHVybiBlLl9wcmV2PXQuY29uY2F0KFtlLl9wcmV2LnNsaWNlKDEpLG5ldyB0KFtuP3I6b10pXSksb31lLmVuY3J5cHQ9ZnVuY3Rpb24oZSxuLGkpe2Zvcih2YXIgbz1uLmxlbmd0aCxhPW5ldyB0KG8pLGY9LTE7KytmPG87KWFbZl09cihlLG5bZl0saSk7cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fY2lwaGVyLmVuY3J5cHRCbG9jayhlKX0sZS5kZWNyeXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NpcGhlci5kZWNyeXB0QmxvY2soZSl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQuX3ByZXY9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KSx0Ll9wcmV2fXZhciBpPXIoNjkpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIpe2Zvcig7ZS5fY2FjaGUubGVuZ3RoPHIubGVuZ3RoOyllLl9jYWNoZT10LmNvbmNhdChbZS5fY2FjaGUsbihlKV0pO3ZhciBvPWUuX2NhY2hlLnNsaWNlKDAsci5sZW5ndGgpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShyLmxlbmd0aCksaShyLG8pfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsYSxmKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KG8uY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IGkuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IGUoYS5sZW5ndGgpLHRoaXMuX2NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX3NlY0NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX2RlY3J5cHQ9ZixhLmNvcHkodGhpcy5fcHJldiksdm9pZCh0aGlzLl9tb2RlPXQpKTpuZXcgbih0LHIsYSl9dmFyIGk9cigxMDEpLG89cigxMDMpLGE9cigyKTthKG4sbyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCx0aGlzLl9kZWNyeXB0KX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz1sLGMuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBpKHQsZSxyKXtyZXR1cm4gcl50JihlXnIpfWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiB0JmV8ciYodHxlKX1mdW5jdGlvbiBhKHQpe3JldHVybih0Pj4+Mnx0PDwzMCleKHQ+Pj4xM3x0PDwxOSleKHQ+Pj4yMnx0PDwxMCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4odD4+PjZ8dDw8MjYpXih0Pj4+MTF8dDw8MjEpXih0Pj4+MjV8dDw8Nyl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4odD4+Pjd8dDw8MjUpXih0Pj4+MTh8dDw8MTQpXnQ+Pj4zfWZ1bmN0aW9uIHUodCl7cmV0dXJuKHQ+Pj4xN3x0PDwxNSleKHQ+Pj4xOXx0PDwxMyledD4+PjEwfXZhciBoPXIoMiksYz1yKDYwKSxkPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLGw9bmV3IEFycmF5KDY0KTtoKG4sYyksbi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3NzkwMzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fdyxyPTB8dGhpcy5fYSxuPTB8dGhpcy5fYixoPTB8dGhpcy5fYyxjPTB8dGhpcy5fZCxsPTB8dGhpcy5fZSxwPTB8dGhpcy5fZixiPTB8dGhpcy5fZyx2PTB8dGhpcy5faCx5PTA7eTwxNjsrK3kpZVt5XT10LnJlYWRJbnQzMkJFKDQqeSk7Zm9yKDt5PDY0OysreSllW3ldPXUoZVt5LTJdKStlW3ktN10rcyhlW3ktMTVdKStlW3ktMTZdfDA7Zm9yKHZhciBtPTA7bTw2NDsrK20pe3ZhciBnPXYrZihsKStpKGwscCxiKStkW21dK2VbbV18MCx3PWEocikrbyhyLG4saCl8MDt2PWIsYj1wLHA9bCxsPWMrZ3wwLGM9aCxoPW4sbj1yLHI9Zyt3fDB9dGhpcy5fYT1yK3RoaXMuX2F8MCx0aGlzLl9iPW4rdGhpcy5fYnwwLHRoaXMuX2M9aCt0aGlzLl9jfDAsdGhpcy5fZD1jK3RoaXMuX2R8MCx0aGlzLl9lPWwrdGhpcy5fZXwwLHRoaXMuX2Y9cCt0aGlzLl9mfDAsdGhpcy5fZz1iK3RoaXMuX2d8MCx0aGlzLl9oPXYrdGhpcy5faHwwfSxuLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciB0PW5ldyBlKDMyKTtyZXR1cm4gdC53cml0ZUludDMyQkUodGhpcy5fYSwwKSx0LndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksdC53cml0ZUludDMyQkUodGhpcy5fZCwxMiksdC53cml0ZUludDMyQkUodGhpcy5fZSwxNiksdC53cml0ZUludDMyQkUodGhpcy5fZiwyMCksdC53cml0ZUludDMyQkUodGhpcy5fZywyNCksdC53cml0ZUludDMyQkUodGhpcy5faCwyOCksdH0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmluaXQoKSx0aGlzLl93PXYscC5jYWxsKHRoaXMsMTI4LDExMil9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHJedCYoZV5yKX1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gdCZlfHImKHR8ZSl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybih0Pj4+Mjh8ZTw8NCleKGU+Pj4yfHQ8PDMwKV4oZT4+Pjd8dDw8MjUpfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4odD4+PjE0fGU8PDE4KV4odD4+PjE4fGU8PDE0KV4oZT4+Pjl8dDw8MjMpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4odD4+PjF8ZTw8MzEpXih0Pj4+OHxlPDwyNCledD4+Pjd9ZnVuY3Rpb24gdSh0LGUpe3JldHVybih0Pj4+MXxlPDwzMSleKHQ+Pj44fGU8PDI0KV4odD4+Pjd8ZTw8MjUpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4odD4+PjE5fGU8PDEzKV4oZT4+PjI5fHQ8PDMpXnQ+Pj42fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4odD4+PjE5fGU8PDEzKV4oZT4+PjI5fHQ8PDMpXih0Pj4+NnxlPDwyNil9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0Pj4+MDxlPj4+MD8xOjB9dmFyIGw9cigyKSxwPXIoNjApLGI9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSx2PW5ldyBBcnJheSgxNjApO2wobixwKSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fdyxyPTB8dGhpcy5fYWgsbj0wfHRoaXMuX2JoLGw9MHx0aGlzLl9jaCxwPTB8dGhpcy5fZGgsdj0wfHRoaXMuX2VoLHk9MHx0aGlzLl9maCxtPTB8dGhpcy5fZ2gsZz0wfHRoaXMuX2hoLHc9MHx0aGlzLl9hbCxfPTB8dGhpcy5fYmwsTT0wfHRoaXMuX2NsLFM9MHx0aGlzLl9kbCxFPTB8dGhpcy5fZWwsQT0wfHRoaXMuX2ZsLGs9MHx0aGlzLl9nbCx4PTB8dGhpcy5faGwsST0wO0k8MzI7SSs9MillW0ldPXQucmVhZEludDMyQkUoNCpJKSxlW0krMV09dC5yZWFkSW50MzJCRSg0KkkrNCk7Zm9yKDtJPDE2MDtJKz0yKXt2YXIgQj1lW0ktMzBdLE89ZVtJLTMwKzFdLFI9cyhCLE8pLFA9dShPLEIpO1xuQj1lW0ktNF0sTz1lW0ktNCsxXTt2YXIgVD1oKEIsTyksaj1jKE8sQiksQz1lW0ktMTRdLE49ZVtJLTE0KzFdLEw9ZVtJLTMyXSxVPWVbSS0zMisxXSx6PVArTnwwLEQ9UitDK2QoeixQKXwwO3o9eitqfDAsRD1EK1QrZCh6LGopfDAsej16K1V8MCxEPUQrTCtkKHosVSl8MCxlW0ldPUQsZVtJKzFdPXp9Zm9yKHZhciBxPTA7cTwxNjA7cSs9Mil7RD1lW3FdLHo9ZVtxKzFdO3ZhciBGPW8ocixuLGwpLEs9byh3LF8sTSksRz1hKHIsdyksVj1hKHcsciksSD1mKHYsRSksWD1mKEUsdiksWT1iW3FdLFc9YltxKzFdLFo9aSh2LHksbSksSj1pKEUsQSxrKSwkPXgrWHwwLFE9ZytIK2QoJCx4KXwwOyQ9JCtKfDAsUT1RK1orZCgkLEopfDAsJD0kK1d8MCxRPVErWStkKCQsVyl8MCwkPSQrenwwLFE9UStEK2QoJCx6KXwwO3ZhciB0dD1WK0t8MCxldD1HK0YrZCh0dCxWKXwwO2c9bSx4PWssbT15LGs9QSx5PXYsQT1FLEU9UyskfDAsdj1wK1ErZChFLFMpfDAscD1sLFM9TSxsPW4sTT1fLG49cixfPXcsdz0kK3R0fDAscj1RK2V0K2QodywkKXwwfXRoaXMuX2FsPXRoaXMuX2FsK3d8MCx0aGlzLl9ibD10aGlzLl9ibCtffDAsdGhpcy5fY2w9dGhpcy5fY2wrTXwwLHRoaXMuX2RsPXRoaXMuX2RsK1N8MCx0aGlzLl9lbD10aGlzLl9lbCtFfDAsdGhpcy5fZmw9dGhpcy5fZmwrQXwwLHRoaXMuX2dsPXRoaXMuX2dsK2t8MCx0aGlzLl9obD10aGlzLl9obCt4fDAsdGhpcy5fYWg9dGhpcy5fYWgrcitkKHRoaXMuX2FsLHcpfDAsdGhpcy5fYmg9dGhpcy5fYmgrbitkKHRoaXMuX2JsLF8pfDAsdGhpcy5fY2g9dGhpcy5fY2grbCtkKHRoaXMuX2NsLE0pfDAsdGhpcy5fZGg9dGhpcy5fZGgrcCtkKHRoaXMuX2RsLFMpfDAsdGhpcy5fZWg9dGhpcy5fZWgrditkKHRoaXMuX2VsLEUpfDAsdGhpcy5fZmg9dGhpcy5fZmgreStkKHRoaXMuX2ZsLEEpfDAsdGhpcy5fZ2g9dGhpcy5fZ2grbStkKHRoaXMuX2dsLGspfDAsdGhpcy5faGg9dGhpcy5faGgrZytkKHRoaXMuX2hsLHgpfDB9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7ci53cml0ZUludDMyQkUodCxuKSxyLndyaXRlSW50MzJCRShlLG4rNCl9dmFyIHI9bmV3IGUoNjQpO3JldHVybiB0KHRoaXMuX2FoLHRoaXMuX2FsLDApLHQodGhpcy5fYmgsdGhpcy5fYmwsOCksdCh0aGlzLl9jaCx0aGlzLl9jbCwxNiksdCh0aGlzLl9kaCx0aGlzLl9kbCwyNCksdCh0aGlzLl9laCx0aGlzLl9lbCwzMiksdCh0aGlzLl9maCx0aGlzLl9mbCw0MCksdCh0aGlzLl9naCx0aGlzLl9nbCw0OCksdCh0aGlzLl9oaCx0aGlzLl9obCw1Nikscn0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe2lmKG51bGwhPT1nKXJldHVybiBnO3ZhciB0PTEwNDg1NzYsZT1bXTtlWzBdPTI7Zm9yKHZhciByPTEsbj0zO248dDtuKz0yKXtmb3IodmFyIGk9TWF0aC5jZWlsKE1hdGguc3FydChuKSksbz0wO288ciYmZVtvXTw9aSYmbiVlW29dIT09MDtvKyspO3IhPT1vJiZlW29dPD1pfHwoZVtyKytdPW4pfXJldHVybiBnPWUsZX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1uKCkscj0wO3I8ZS5sZW5ndGg7cisrKWlmKDA9PT10Lm1vZG4oZVtyXSkpcmV0dXJuIDA9PT10LmNtcG4oZVtyXSk7cmV0dXJuITB9ZnVuY3Rpb24gbyh0KXt2YXIgZT1zLm1vbnQodCk7cmV0dXJuIDA9PT1sLnRvUmVkKGUpLnJlZFBvdyh0LnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIGEodCxlKXtpZih0PDE2KXJldHVybiBuZXcgcygyPT09ZXx8NT09PWU/WzE0MCwxMjNdOlsxNDAsMzldKTtlPW5ldyBzKGUpO2Zvcih2YXIgcixuOzspe2ZvcihyPW5ldyBzKGYoTWF0aC5jZWlsKHQvOCkpKTtyLmJpdExlbmd0aCgpPnQ7KXIuaXNocm4oMSk7aWYoci5pc0V2ZW4oKSYmci5pYWRkKGQpLHIudGVzdG4oMSl8fHIuaWFkZChsKSxlLmNtcChsKSl7aWYoIWUuY21wKHApKWZvcig7ci5tb2QoYikuY21wKHYpOylyLmlhZGQobSl9ZWxzZSBmb3IoO3IubW9kKHUpLmNtcCh5KTspci5pYWRkKG0pO2lmKG49ci5zaHJuKDEpLGkobikmJmkocikmJm8obikmJm8ocikmJmMudGVzdChuKSYmYy50ZXN0KHIpKXJldHVybiByfX12YXIgZj1yKDYxKTt0LmV4cG9ydHM9YSxhLnNpbXBsZVNpZXZlPWksYS5mZXJtYXRUZXN0PW87dmFyIHM9cigxNTApLHU9bmV3IHMoMjQpLGg9cigyMzApLGM9bmV3IGgsZD1uZXcgcygxKSxsPW5ldyBzKDIpLHA9bmV3IHMoNSksYj0obmV3IHMoMTYpLG5ldyBzKDgpLG5ldyBzKDEwKSksdj1uZXcgcygzKSx5PShuZXcgcyg3KSxuZXcgcygxMSkpLG09bmV3IHMoNCksZz0obmV3IHMoMTIpLG51bGwpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLnJhbmQ9dHx8bmV3IG8uUmFuZH12YXIgaT1yKDE1MCksbz1yKDU3NSk7dC5leHBvcnRzPW4sbi5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfSxuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT10LmJpdExlbmd0aCgpLHI9dGhpcy5yYW5kLmdlbmVyYXRlKE1hdGguY2VpbChlLzgpKTtyWzBdfD0zO3ZhciBuPTcmZTtyZXR1cm4gMCE9PW4mJihyW3IubGVuZ3RoLTFdPj49Ny1uKSxuZXcgaShyKX0sbi5wcm90b3R5cGUudGVzdD1mdW5jdGlvbih0LGUscil7dmFyIG49dC5iaXRMZW5ndGgoKSxvPWkubW9udCh0KSxhPW5ldyBpKDEpLnRvUmVkKG8pO2V8fChlPU1hdGgubWF4KDEsbi80OHwwKSk7Zm9yKHZhciBmPXQuc3VibigxKSxzPWYuc3VibigxKSx1PTA7IWYudGVzdG4odSk7dSsrKTtmb3IodmFyIGg9dC5zaHJuKHUpLGM9Zi50b1JlZChvKSxkPSEwO2U+MDtlLS0pe3ZhciBsPXRoaXMuX3JhbmQocyk7ciYmcihsKTt2YXIgcD1sLnRvUmVkKG8pLnJlZFBvdyhoKTtpZigwIT09cC5jbXAoYSkmJjAhPT1wLmNtcChjKSl7Zm9yKHZhciBiPTE7Yjx1O2IrKyl7aWYocD1wLnJlZFNxcigpLDA9PT1wLmNtcChhKSlyZXR1cm4hMTtpZigwPT09cC5jbXAoYykpYnJlYWt9aWYoYj09PXUpcmV0dXJuITF9fXJldHVybiBkfSxuLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5iaXRMZW5ndGgoKSxuPWkubW9udCh0KSxvPW5ldyBpKDEpLnRvUmVkKG4pO2V8fChlPU1hdGgubWF4KDEsci80OHwwKSk7Zm9yKHZhciBhPXQuc3VibigxKSxmPWEuc3VibigxKSxzPTA7IWEudGVzdG4ocyk7cysrKTtmb3IodmFyIHU9dC5zaHJuKHMpLGg9YS50b1JlZChuKTtlPjA7ZS0tKXt2YXIgYz10aGlzLl9yYW5kKGYpLGQ9dC5nY2QoYyk7aWYoMCE9PWQuY21wbigxKSlyZXR1cm4gZDt2YXIgbD1jLnRvUmVkKG4pLnJlZFBvdyh1KTtpZigwIT09bC5jbXAobykmJjAhPT1sLmNtcChoKSl7Zm9yKHZhciBwPTE7cDxzO3ArKyl7aWYobD1sLnJlZFNxcigpLDA9PT1sLmNtcChvKSlyZXR1cm4gbC5mcm9tUmVkKCkuc3VibigxKS5nY2QodCk7aWYoMD09PWwuY21wKGgpKWJyZWFrfWlmKHA9PT1zKXJldHVybiBsPWwucmVkU3FyKCksbC5mcm9tUmVkKCkuc3VibigxKS5nY2QodCl9fXJldHVybiExfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3ZhciByPW5ldyBlKDQpO3JldHVybiByLndyaXRlVUludDMyQkUodCwwKSxyfXZhciBpPXIoNTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbyxhPW5ldyBlKFwiXCIpLGY9MDthLmxlbmd0aDxyOylvPW4oZisrKSxhPWUuY29uY2F0KFthLGkoXCJzaGExXCIpLnVwZGF0ZSh0KS51cGRhdGUobykuZGlnZXN0KCldKTtyZXR1cm4gYS5zbGljZSgwLHIpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt2YXIgZT1vKHQpLHI9ZS50b1JlZChhLm1vbnQodC5tb2R1bHVzKSkucmVkUG93KG5ldyBhKHQucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCk7cmV0dXJue2JsaW5kZXI6cix1bmJsaW5kZXI6ZS5pbnZtKHQubW9kdWx1cyl9fWZ1bmN0aW9uIGkodCxyKXt2YXIgaT1uKHIpLG89ci5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxmPShhLm1vbnQoci5tb2R1bHVzKSxuZXcgYSh0KS5tdWwoaS5ibGluZGVyKS51bW9kKHIubW9kdWx1cykpLHM9Zi50b1JlZChhLm1vbnQoci5wcmltZTEpKSx1PWYudG9SZWQoYS5tb250KHIucHJpbWUyKSksaD1yLmNvZWZmaWNpZW50LGM9ci5wcmltZTEsZD1yLnByaW1lMixsPXMucmVkUG93KHIuZXhwb25lbnQxKSxwPXUucmVkUG93KHIuZXhwb25lbnQyKTtsPWwuZnJvbVJlZCgpLHA9cC5mcm9tUmVkKCk7dmFyIGI9bC5pc3ViKHApLmltdWwoaCkudW1vZChjKTtyZXR1cm4gYi5pbXVsKGQpLHAuaWFkZChiKSxuZXcgZShwLmltdWwoaS51bmJsaW5kZXIpLnVtb2Qoci5tb2R1bHVzKS50b0FycmF5KCExLG8pKX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHI9bmV3IGEoZihlKSk7ci5jbXAodC5tb2R1bHVzKT49MHx8IXIudW1vZCh0LnByaW1lMSl8fCFyLnVtb2QodC5wcmltZTIpOylyPW5ldyBhKGYoZSkpO3JldHVybiByfXZhciBhPXIoNzApLGY9cig2MSk7dC5leHBvcnRzPWksaS5nZXRyPW99KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIHI7XCJvYmplY3RcIiE9dHlwZW9mIHR8fGUuaXNCdWZmZXIodCl8fChyPXQucGFzc3BocmFzZSx0PXQua2V5KSxcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCkpO3ZhciBuLGEscz1mKHQsciksdT1zLnRhZyxoPXMuZGF0YTtzd2l0Y2godSl7Y2FzZVwiUFVCTElDIEtFWVwiOnN3aXRjaChhPW8uUHVibGljS2V5LmRlY29kZShoLFwiZGVyXCIpLG49YS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oXCIuXCIpKXtjYXNlXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiOnJldHVybiBvLlJTQVB1YmxpY0tleS5kZWNvZGUoYS5zdWJqZWN0UHVibGljS2V5LmRhdGEsXCJkZXJcIik7Y2FzZVwiMS4yLjg0MC4xMDA0NS4yLjFcIjpyZXR1cm4gYS5zdWJqZWN0UHJpdmF0ZUtleT1hLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6XCJlY1wiLGRhdGE6YX07Y2FzZVwiMS4yLjg0MC4xMDA0MC40LjFcIjpyZXR1cm4gYS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXk9by5EU0FwYXJhbS5kZWNvZGUoYS5zdWJqZWN0UHVibGljS2V5LmRhdGEsXCJkZXJcIikse3R5cGU6XCJkc2FcIixkYXRhOmEuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSBpZCBcIituKX10aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSB0eXBlIFwiK3UpO2Nhc2VcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiOmg9by5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpLGg9aShoLHIpO2Nhc2VcIlBSSVZBVEUgS0VZXCI6c3dpdGNoKGE9by5Qcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpLG49YS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oXCIuXCIpKXtjYXNlXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiOnJldHVybiBvLlJTQVByaXZhdGVLZXkuZGVjb2RlKGEuc3ViamVjdFByaXZhdGVLZXksXCJkZXJcIik7Y2FzZVwiMS4yLjg0MC4xMDA0NS4yLjFcIjpyZXR1cm57Y3VydmU6YS5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTpvLkVDUHJpdmF0ZUtleS5kZWNvZGUoYS5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKS5wcml2YXRlS2V5fTtjYXNlXCIxLjIuODQwLjEwMDQwLjQuMVwiOnJldHVybiBhLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9by5EU0FwYXJhbS5kZWNvZGUoYS5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKSx7dHlwZTpcImRzYVwiLHBhcmFtczphLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgaWQgXCIrbil9dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIit1KTtjYXNlXCJSU0EgUFVCTElDIEtFWVwiOnJldHVybiBvLlJTQVB1YmxpY0tleS5kZWNvZGUoaCxcImRlclwiKTtjYXNlXCJSU0EgUFJJVkFURSBLRVlcIjpyZXR1cm4gby5SU0FQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpO2Nhc2VcIkRTQSBQUklWQVRFIEtFWVwiOnJldHVybnt0eXBlOlwiZHNhXCIscGFyYW1zOm8uRFNBUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKX07Y2FzZVwiRUMgUFJJVkFURSBLRVlcIjpyZXR1cm4gaD1vLkVDUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKSx7Y3VydmU6aC5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6aC5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IHR5cGUgXCIrdSl9fWZ1bmN0aW9uIGkodCxyKXt2YXIgbj10LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxpPXBhcnNlSW50KHQuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxvPWFbdC5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKFwiLlwiKV0sZj10LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixoPXQuc3ViamVjdFByaXZhdGVLZXksYz1wYXJzZUludChvLnNwbGl0KFwiLVwiKVsxXSwxMCkvOCxkPXUucGJrZGYyU3luYyhyLG4saSxjKSxsPXMuY3JlYXRlRGVjaXBoZXJpdihvLGQsZikscD1bXTtyZXR1cm4gcC5wdXNoKGwudXBkYXRlKGgpKSxwLnB1c2gobC5maW5hbCgpKSxlLmNvbmNhdChwKX12YXIgbz1yKDU3OCksYT1yKDQ2OSksZj1yKDU3OSkscz1yKDIzOSksdT1yKDE1MSk7dC5leHBvcnRzPW4sbi5zaWduYXR1cmU9by5zaWduYXR1cmV9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBhLmNhbGwodGhpcyxlKSxmLmlzQnVmZmVyKHQpPyh0aGlzLmJhc2U9dCx0aGlzLm9mZnNldD0wLHZvaWQodGhpcy5sZW5ndGg9dC5sZW5ndGgpKTp2b2lkIHRoaXMuZXJyb3IoXCJJbnB1dCBub3QgQnVmZmVyXCIpfWZ1bmN0aW9uIGkodCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl8fCh0PW5ldyBpKHQsZSkpLHRoaXMubGVuZ3RoKz10Lmxlbmd0aCx0fSx0aGlzKTtlbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXtpZighKDA8PXQmJnQ8PTI1NSkpcmV0dXJuIGUuZXJyb3IoXCJub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlXCIpO3RoaXMudmFsdWU9dCx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPWYuYnl0ZUxlbmd0aCh0KTtlbHNle2lmKCFmLmlzQnVmZmVyKHQpKXJldHVybiBlLmVycm9yKFwiVW5zdXBwb3J0ZWQgdHlwZTogXCIrdHlwZW9mIHQpO3RoaXMudmFsdWU9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aH19dmFyIG89cigyKSxhPXIoNzEpLlJlcG9ydGVyLGY9cigxKS5CdWZmZXI7byhuLGEpLGUuRGVjb2RlckJ1ZmZlcj1uLG4ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOmEucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LG4ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG4odGhpcy5iYXNlKTtyZXR1cm4gZS5vZmZzZXQ9dC5vZmZzZXQsZS5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9dC5vZmZzZXQsYS5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsdC5yZXBvcnRlciksZX0sbi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxuLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcih0fHxcIkRlY29kZXJCdWZmZXIgb3ZlcnJ1blwiKX0sbi5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbih0LGUpe2lmKCEodGhpcy5vZmZzZXQrdDw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKGV8fFwiRGVjb2RlckJ1ZmZlciBvdmVycnVuXCIpO3ZhciByPW5ldyBuKHRoaXMuYmFzZSk7cmV0dXJuIHIuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxyLm9mZnNldD10aGlzLm9mZnNldCxyLmxlbmd0aD10aGlzLm9mZnNldCt0LHRoaXMub2Zmc2V0Kz10LHJ9LG4ucHJvdG90eXBlLnJhdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKHQ/dC5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxlLkVuY29kZXJCdWZmZXI9aSxpLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fCh0PW5ldyBmKHRoaXMubGVuZ3RoKSksZXx8KGU9MCksMD09PXRoaXMubGVuZ3RoP3Q6KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Iuam9pbih0LGUpLGUrPXIubGVuZ3RofSk6KFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLnZhbHVlP3RbZV09dGhpcy52YWx1ZTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy52YWx1ZT90LndyaXRlKHRoaXMudmFsdWUsZSk6Zi5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KHQsZSksZSs9dGhpcy5sZW5ndGgpLHQpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5fcmV2ZXJzZT1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXsoMHxyKT09ciYmKHJ8PTApO3ZhciBuPXRbcl07ZVtuXT1yfSksZX0sbi5kZXI9cig1ODMpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmVuYz1cImRlclwiLHRoaXMubmFtZT10Lm5hbWUsdGhpcy5lbnRpdHk9dCx0aGlzLnRyZWU9bmV3IGksdGhpcy50cmVlLl9pbml0KHQuYm9keSl9ZnVuY3Rpb24gaSh0KXt1Lk5vZGUuY2FsbCh0aGlzLFwiZGVyXCIsdCl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXQucmVhZFVJbnQ4KGUpO2lmKHQuaXNFcnJvcihyKSlyZXR1cm4gcjt2YXIgbj1jLnRhZ0NsYXNzW3I+PjZdLGk9MD09PSgzMiZyKTtpZigzMT09PSgzMSZyKSl7dmFyIG89cjtmb3Iocj0wOzEyOD09PSgxMjgmbyk7KXtpZihvPXQucmVhZFVJbnQ4KGUpLHQuaXNFcnJvcihvKSlyZXR1cm4gbztyPDw9NyxyfD0xMjcmb319ZWxzZSByJj0zMTt2YXIgYT1jLnRhZ1tyXTtyZXR1cm57Y2xzOm4scHJpbWl0aXZlOmksdGFnOnIsdGFnU3RyOmF9fWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPXQucmVhZFVJbnQ4KHIpO2lmKHQuaXNFcnJvcihuKSlyZXR1cm4gbjtpZighZSYmMTI4PT09bilyZXR1cm4gbnVsbDtpZigwPT09KDEyOCZuKSlyZXR1cm4gbjt2YXIgaT0xMjcmbjtpZihpPj00KXJldHVybiB0LmVycm9yKFwibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZ1wiKTtuPTA7Zm9yKHZhciBvPTA7bzxpO28rKyl7bjw8PTg7dmFyIGE9dC5yZWFkVUludDgocik7aWYodC5pc0Vycm9yKGEpKXJldHVybiBhO258PWF9cmV0dXJuIG59dmFyIGY9cigyKSxzPXIoMTA2KSx1PXMuYmFzZSxoPXMuYmlnbnVtLGM9cy5jb25zdGFudHMuZGVyO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgdS5EZWNvZGVyQnVmZmVyfHwodD1uZXcgdS5EZWNvZGVyQnVmZmVyKHQsZSkpLHRoaXMudHJlZS5fZGVjb2RlKHQsZSl9LGYoaSx1Lk5vZGUpLGkucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKHQsZSxyKXtpZih0LmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgbj10LnNhdmUoKSxpPW8odCwnRmFpbGVkIHRvIHBlZWsgdGFnOiBcIicrZSsnXCInKTtyZXR1cm4gdC5pc0Vycm9yKGkpP2k6KHQucmVzdG9yZShuKSxpLnRhZz09PWV8fGkudGFnU3RyPT09ZXx8aS50YWdTdHIrXCJvZlwiPT09ZXx8cil9LGkucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW8odCwnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgXCInK2UrJ1wiJyk7aWYodC5pc0Vycm9yKG4pKXJldHVybiBuO3ZhciBpPWEodCxuLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgXCInK2UrJ1wiJyk7aWYodC5pc0Vycm9yKGkpKXJldHVybiBpO2lmKCFyJiZuLnRhZyE9PWUmJm4udGFnU3RyIT09ZSYmbi50YWdTdHIrXCJvZlwiIT09ZSlyZXR1cm4gdC5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRhZzogXCInK2UrJ1wiJyk7aWYobi5wcmltaXRpdmV8fG51bGwhPT1pKXJldHVybiB0LnNraXAoaSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6IFwiJytlKydcIicpO3ZhciBmPXQuc2F2ZSgpLHM9dGhpcy5fc2tpcFVudGlsRW5kKHQsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6IFwiJyt0aGlzLnRhZysnXCInKTtyZXR1cm4gdC5pc0Vycm9yKHMpP3M6KGk9dC5vZmZzZXQtZi5vZmZzZXQsdC5yZXN0b3JlKGYpLHQuc2tpcChpLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogXCInK2UrJ1wiJykpfSxpLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKDs7KXt2YXIgcj1vKHQsZSk7aWYodC5pc0Vycm9yKHIpKXJldHVybiByO3ZhciBuPWEodCxyLnByaW1pdGl2ZSxlKTtpZih0LmlzRXJyb3IobikpcmV0dXJuIG47dmFyIGk7aWYoaT1yLnByaW1pdGl2ZXx8bnVsbCE9PW4/dC5za2lwKG4pOnRoaXMuX3NraXBVbnRpbEVuZCh0LGUpLHQuaXNFcnJvcihpKSlyZXR1cm4gaTtpZihcImVuZFwiPT09ci50YWdTdHIpYnJlYWt9fSxpLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9W107IXQuaXNFbXB0eSgpOyl7dmFyIG89dGhpcy5fcGVla1RhZyh0LFwiZW5kXCIpO2lmKHQuaXNFcnJvcihvKSlyZXR1cm4gbzt2YXIgYT1yLmRlY29kZSh0LFwiZGVyXCIsbik7aWYodC5pc0Vycm9yKGEpJiZvKWJyZWFrO2kucHVzaChhKX1yZXR1cm4gaX0saS5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5jdGlvbih0LGUpe2lmKFwiYml0c3RyXCI9PT1lKXt2YXIgcj10LnJlYWRVSW50OCgpO3JldHVybiB0LmlzRXJyb3Iocik/cjp7dW51c2VkOnIsZGF0YTp0LnJhdygpfX1pZihcImJtcHN0clwiPT09ZSl7dmFyIG49dC5yYXcoKTtpZihuLmxlbmd0aCUyPT09MSlyZXR1cm4gdC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoXCIpO2Zvcih2YXIgaT1cIlwiLG89MDtvPG4ubGVuZ3RoLzI7bysrKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobi5yZWFkVUludDE2QkUoMipvKSk7cmV0dXJuIGl9aWYoXCJudW1zdHJcIj09PWUpe3ZhciBhPXQucmF3KCkudG9TdHJpbmcoXCJhc2NpaVwiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIoYSk/YTp0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzXCIpfWlmKFwib2N0c3RyXCI9PT1lKXJldHVybiB0LnJhdygpO2lmKFwicHJpbnRzdHJcIj09PWUpe3ZhciBmPXQucmF3KCkudG9TdHJpbmcoXCJhc2NpaVwiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihmKT9mOnQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVyc1wiKX1yZXR1cm4vc3RyJC8udGVzdChlKT90LnJhdygpLnRvU3RyaW5nKCk6dC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBcIitlK1wiIHVuc3VwcG9ydGVkXCIpfSxpLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPVtdLG89MDshdC5pc0VtcHR5KCk7KXt2YXIgYT10LnJlYWRVSW50OCgpO288PD03LG98PTEyNyZhLDA9PT0oMTI4JmEpJiYoaS5wdXNoKG8pLG89MCl9MTI4JmEmJmkucHVzaChvKTt2YXIgZj1pWzBdLzQwfDAscz1pWzBdJTQwO2lmKG49cj9pOltmLHNdLmNvbmNhdChpLnNsaWNlKDEpKSxlKXt2YXIgdT1lW24uam9pbihcIiBcIildO3ZvaWQgMD09PXUmJih1PWVbbi5qb2luKFwiLlwiKV0pLHZvaWQgMCE9PXUmJihuPXUpfXJldHVybiBufSxpLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbih0LGUpe3ZhciByPXQucmF3KCkudG9TdHJpbmcoKTtpZihcImdlbnRpbWVcIj09PWUpdmFyIG49MHxyLnNsaWNlKDAsNCksaT0wfHIuc2xpY2UoNCw2KSxvPTB8ci5zbGljZSg2LDgpLGE9MHxyLnNsaWNlKDgsMTApLGY9MHxyLnNsaWNlKDEwLDEyKSxzPTB8ci5zbGljZSgxMiwxNCk7ZWxzZXtpZihcInV0Y3RpbWVcIiE9PWUpcmV0dXJuIHQuZXJyb3IoXCJEZWNvZGluZyBcIitlK1wiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7dmFyIG49MHxyLnNsaWNlKDAsMiksaT0wfHIuc2xpY2UoMiw0KSxvPTB8ci5zbGljZSg0LDYpLGE9MHxyLnNsaWNlKDYsOCksZj0wfHIuc2xpY2UoOCwxMCkscz0wfHIuc2xpY2UoMTAsMTIpO249bjw3MD8yZTMrbjoxOTAwK259cmV0dXJuIERhdGUuVVRDKG4saS0xLG8sYSxmLHMsMCl9LGkucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbih0KXt2YXIgZT10LnJlYWRVSW50OCgpO3JldHVybiB0LmlzRXJyb3IoZSk/ZTowIT09ZX0saS5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbih0LGUpe3ZhciByPXQucmF3KCksbj1uZXcgaChyKTtyZXR1cm4gZSYmKG49ZVtuLnRvU3RyaW5nKDEwKV18fG4pLG59LGkucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodD10KGUpKSx0Ll9nZXREZWNvZGVyKFwiZGVyXCIpLnRyZWV9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmVuYz1cImRlclwiLHRoaXMubmFtZT10Lm5hbWUsdGhpcy5lbnRpdHk9dCx0aGlzLnRyZWU9bmV3IGksdGhpcy50cmVlLl9pbml0KHQuYm9keSl9ZnVuY3Rpb24gaSh0KXtoLk5vZGUuY2FsbCh0aGlzLFwiZGVyXCIsdCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDwxMD9cIjBcIit0OnR9ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaTtpZihcInNlcW9mXCI9PT10P3Q9XCJzZXFcIjpcInNldG9mXCI9PT10JiYodD1cInNldFwiKSxjLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eSh0KSlpPWMudGFnQnlOYW1lW3RdO2Vsc2V7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHR8fCgwfHQpIT09dClyZXR1cm4gbi5lcnJvcihcIlVua25vd24gdGFnOiBcIit0KTtpPXR9cmV0dXJuIGk+PTMxP24uZXJyb3IoXCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWRcIik6KGV8fChpfD0zMiksaXw9Yy50YWdDbGFzc0J5TmFtZVtyfHxcInVuaXZlcnNhbFwiXTw8Nil9dmFyIGY9cigyKSxzPXIoMSkuQnVmZmVyLHU9cigxMDYpLGg9dS5iYXNlLGM9dS5jb25zdGFudHMuZGVyO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZSh0LGUpLmpvaW4oKX0sZihpLGguTm9kZSksaS5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1hKHQsZSxyLHRoaXMucmVwb3J0ZXIpO2lmKG4ubGVuZ3RoPDEyOCl7dmFyIG89bmV3IHMoMik7cmV0dXJuIG9bMF09aSxvWzFdPW4ubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW28sbl0pfWZvcih2YXIgZj0xLHU9bi5sZW5ndGg7dT49MjU2O3U+Pj04KWYrKzt2YXIgbz1uZXcgcygyK2YpO29bMF09aSxvWzFdPTEyOHxmO2Zvcih2YXIgdT0xK2YsaD1uLmxlbmd0aDtoPjA7dS0tLGg+Pj04KW9bdV09MjU1Jmg7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW28sbl0pfSxpLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKHQsZSl7aWYoXCJiaXRzdHJcIj09PWUpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8dC51bnVzZWQsdC5kYXRhXSk7aWYoXCJibXBzdHJcIj09PWUpe2Zvcih2YXIgcj1uZXcgcygyKnQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspci53cml0ZVVJbnQxNkJFKHQuY2hhckNvZGVBdChuKSwyKm4pO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHIpfXJldHVyblwibnVtc3RyXCI9PT1lP3RoaXMuX2lzTnVtc3RyKHQpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlXCIpOlwicHJpbnRzdHJcIj09PWU/dGhpcy5faXNQcmludHN0cih0KT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFya1wiKTovc3RyJC8udGVzdChlKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogXCIrZStcIiB1bnN1cHBvcnRlZFwiKX0saS5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKHQsZSxyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYoIWUpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kXCIpO2lmKCFlLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXBcIik7dD1lW3RdLnNwbGl0KC9bXFxzXFwuXSsvZyk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3Q9dC5zbGljZSgpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl18PTB9aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6IFwiK0pTT04uc3RyaW5naWZ5KHQpKTtpZighcil7aWYodFsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0JcIik7dC5zcGxpY2UoMCwyLDQwKnRbMF0rdFsxXSl9Zm9yKHZhciBpPTAsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgbz10W25dO2ZvcihpKys7bz49MTI4O28+Pj03KWkrK31mb3IodmFyIGE9bmV3IHMoaSksZj1hLmxlbmd0aC0xLG49dC5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIG89dFtuXTtmb3IoYVtmLS1dPTEyNyZvOyhvPj49Nyk+MDspYVtmLS1dPTEyOHwxMjcmb31yZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihhKX0saS5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPW5ldyBEYXRlKHQpO3JldHVyblwiZ2VudGltZVwiPT09ZT9yPVtvKG4uZ2V0RnVsbFllYXIoKSksbyhuLmdldFVUQ01vbnRoKCkrMSksbyhuLmdldFVUQ0RhdGUoKSksbyhuLmdldFVUQ0hvdXJzKCkpLG8obi5nZXRVVENNaW51dGVzKCkpLG8obi5nZXRVVENTZWNvbmRzKCkpLFwiWlwiXS5qb2luKFwiXCIpOlwidXRjdGltZVwiPT09ZT9yPVtvKG4uZ2V0RnVsbFllYXIoKSUxMDApLG8obi5nZXRVVENNb250aCgpKzEpLG8obi5nZXRVVENEYXRlKCkpLG8obi5nZXRVVENIb3VycygpKSxvKG4uZ2V0VVRDTWludXRlcygpKSxvKG4uZ2V0VVRDU2Vjb25kcygpKSxcIlpcIl0uam9pbihcIlwiKTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2RpbmcgXCIrZStcIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpLHRoaXMuX2VuY29kZVN0cihyLFwib2N0c3RyXCIpfSxpLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFwiXCIpfSxpLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe2lmKCFlKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcFwiKTtpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiBcIitKU09OLnN0cmluZ2lmeSh0KSk7dD1lW3RdfWlmKFwibnVtYmVyXCIhPXR5cGVvZiB0JiYhcy5pc0J1ZmZlcih0KSl7dmFyIHI9dC50b0FycmF5KCk7IXQuc2lnbiYmMTI4JnJbMF0mJnIudW5zaGlmdCgwKSx0PW5ldyBzKHIpfWlmKHMuaXNCdWZmZXIodCkpe3ZhciBuPXQubGVuZ3RoOzA9PT10Lmxlbmd0aCYmbisrO3ZhciBpPW5ldyBzKG4pO3JldHVybiB0LmNvcHkoaSksMD09PXQubGVuZ3RoJiYoaVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGkpfWlmKHQ8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpO2lmKHQ8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLHRdKTtmb3IodmFyIG49MSxvPXQ7bz49MjU2O28+Pj04KW4rKztmb3IodmFyIGk9bmV3IEFycmF5KG4pLG89aS5sZW5ndGgtMTtvPj0wO28tLSlpW29dPTI1NSZ0LHQ+Pj04O3JldHVybiAxMjgmaVswXSYmaS51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobmV3IHMoaSkpfSxpLnByb3RvdHlwZS5fZW5jb2RlQm9vbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0PzI1NTowKX0saS5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbih0LGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0PXQoZSkpLHQuX2dldEVuY29kZXIoXCJkZXJcIikudHJlZX0saS5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09aS5kZWZhdWx0KXJldHVybiExO3ZhciBvPXQuam9pbigpO2lmKHZvaWQgMD09PWkuZGVmYXVsdEJ1ZmZlciYmKGkuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShpLmRlZmF1bHQsZSxyKS5qb2luKCkpLG8ubGVuZ3RoIT09aS5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248by5sZW5ndGg7bisrKWlmKG9bbl0hPT1pLmRlZmF1bHRCdWZmZXJbbl0pcmV0dXJuITE7cmV0dXJuITB9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLGksZil7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQscixpKTthLmNhbGwodGhpcyksdGhpcy5fZmluSUQ9ZS5jb25jYXQoW2ksbmV3IGUoWzAsMCwwLDFdKV0pLGk9ZS5jb25jYXQoW2ksbmV3IGUoWzAsMCwwLDJdKV0pLHRoaXMuX2NpcGhlcj1uZXcgby5BRVMociksdGhpcy5fcHJldj1uZXcgZShpLmxlbmd0aCksdGhpcy5fY2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fc2VjQ2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fZGVjcnlwdD1mLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCxpLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT10O3ZhciB1PW5ldyBlKDQpO3UuZmlsbCgwKSx0aGlzLl9naGFzaD1uZXcgcyh0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHUpKSx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj0wO3QubGVuZ3RoIT09ZS5sZW5ndGgmJnIrKztmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGk9LTE7KytpPG47KXIrPXRbaV1eZVtpXTtyZXR1cm4gcn12YXIgbz1yKDEwNyksYT1yKDEwOSksZj1yKDIpLHM9cig1OTEpLHU9cig3Mik7ZihuLGEpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIHI9MTYtdGhpcy5fYWxlbiUxNjtyPDE2JiYocj1uZXcgZShyKSxyLmZpbGwoMCksdGhpcy5fZ2hhc2gudXBkYXRlKHIpKX10aGlzLl9jYWxsZWQ9ITA7dmFyIG49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCk7cmV0dXJuIHRoaXMuX2RlY3J5cHQ/dGhpcy5fZ2hhc2gudXBkYXRlKHQpOnRoaXMuX2doYXNoLnVwZGF0ZShuKSx0aGlzLl9sZW4rPXQubGVuZ3RoLG59LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKTt2YXIgdD11KHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQpe2lmKGkodCx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIil9ZWxzZSB0aGlzLl9hdXRoVGFnPXQ7dGhpcy5fY2lwaGVyLnNjcnViKCl9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVjcnlwdCYmZS5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSlyZXR1cm4gdGhpcy5fYXV0aFRhZzt0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbih0KXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTt0aGlzLl9hdXRoVGFnPXR9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbih0KXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2doYXNoLnVwZGF0ZSh0KSx0aGlzLl9hbGVuKz10Lmxlbmd0aH19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBPYmplY3Qua2V5cyhhKX12YXIgaT1yKDU5MCk7ZS5jcmVhdGVDaXBoZXI9ZS5DaXBoZXI9aS5jcmVhdGVDaXBoZXIsZS5jcmVhdGVDaXBoZXJpdj1lLkNpcGhlcml2PWkuY3JlYXRlQ2lwaGVyaXY7dmFyIG89cig1ODkpO2UuY3JlYXRlRGVjaXBoZXI9ZS5EZWNpcGhlcj1vLmNyZWF0ZURlY2lwaGVyLGUuY3JlYXRlRGVjaXBoZXJpdj1lLkRlY2lwaGVyaXY9by5jcmVhdGVEZWNpcGhlcml2O3ZhciBhPXIoMTUyKTtlLmxpc3RDaXBoZXJzPWUuZ2V0Q2lwaGVycz1ufSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3Mik7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlLHQuX3ByZXYpO3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sociksdC5fcHJldn0sZS5kZWNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJldjt0Ll9wcmV2PWU7dmFyIGk9dC5fY2lwaGVyLmRlY3J5cHRCbG9jayhlKTtyZXR1cm4gbihpLHIpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixuKXt2YXIgbz1yLmxlbmd0aCxhPWkocixlLl9jYWNoZSk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKG8pLGUuX3ByZXY9dC5jb25jYXQoW2UuX3ByZXYsbj9yOmFdKSxhfXZhciBpPXIoNzIpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIsaSl7Zm9yKHZhciBvLGE9bmV3IHQoXCJcIik7ci5sZW5ndGg7KXtpZigwPT09ZS5fY2FjaGUubGVuZ3RoJiYoZS5fY2FjaGU9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxlLl9wcmV2PW5ldyB0KFwiXCIpKSwhKGUuX2NhY2hlLmxlbmd0aDw9ci5sZW5ndGgpKXthPXQuY29uY2F0KFthLG4oZSxyLGkpXSk7YnJlYWt9bz1lLl9jYWNoZS5sZW5ndGgsYT10LmNvbmNhdChbYSxuKGUsci5zbGljZSgwLG8pLGkpXSkscj1yLnNsaWNlKG8pfXJldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0LGUscil7Zm9yKHZhciBpLG8sYSxmPS0xLHM9OCx1PTA7KytmPHM7KWk9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KSxvPWUmMTw8Ny1mPzEyODowLGE9aVswXV5vLHUrPSgxMjgmYSk+PmYlOCx0Ll9wcmV2PW4odC5fcHJldixyP286YSk7cmV0dXJuIHV9ZnVuY3Rpb24gbihlLHIpe3ZhciBuPWUubGVuZ3RoLGk9LTEsbz1uZXcgdChlLmxlbmd0aCk7Zm9yKGU9dC5jb25jYXQoW2UsbmV3IHQoW3JdKV0pOysraTxuOylvW2ldPWVbaV08PDF8ZVtpKzFdPj43O3JldHVybiBvfWUuZW5jcnlwdD1mdW5jdGlvbihlLG4saSl7Zm9yKHZhciBvPW4ubGVuZ3RoLGE9bmV3IHQobyksZj0tMTsrK2Y8bzspYVtmXT1yKGUsbltmXSxpKTtyZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSxyLG4pe3ZhciBpPWUuX2NpcGhlci5lbmNyeXB0QmxvY2soZS5fcHJldiksbz1pWzBdXnI7cmV0dXJuIGUuX3ByZXY9dC5jb25jYXQoW2UuX3ByZXYuc2xpY2UoMSksbmV3IHQoW24/cjpvXSldKSxvfWUuZW5jcnlwdD1mdW5jdGlvbihlLG4saSl7Zm9yKHZhciBvPW4ubGVuZ3RoLGE9bmV3IHQobyksZj0tMTsrK2Y8bzspYVtmXT1yKGUsbltmXSxpKTtyZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2UuZW5jcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKGUpfSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fY2lwaGVyLmRlY3J5cHRCbG9jayhlKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5fcHJldj10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLHQuX3ByZXZ9dmFyIGk9cig3Mik7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxuKGUpXSk7dmFyIG89ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxpKHIsbyl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixhLGYpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oby5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgaS5BRVMociksdGhpcy5fcHJldj1uZXcgZShhLmxlbmd0aCksdGhpcy5fY2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fc2VjQ2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fZGVjcnlwdD1mLGEuY29weSh0aGlzLl9wcmV2KSx2b2lkKHRoaXMuX21vZGU9dCkpOm5ldyBuKHQscixhKX12YXIgaT1yKDEwNyksbz1yKDEwOSksYT1yKDIpO2EobixvKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0LHRoaXMuX2RlY3J5cHQpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyKXtyZXR1cm4gbmV3IGUodC50b1JlZChpLm1vbnQoci5tb2R1bHVzKSkucmVkUG93KG5ldyBpKHIucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX12YXIgaT1yKDcwKTt0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49LTE7KytuPHI7KXRbbl1ePWVbbl07cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/dm9pZCBpLmNhbGwodGhpcyx0KTpuZXcgbih0KX10LmV4cG9ydHM9bjt2YXIgaT1yKDE1NCksbz1yKDczKTtvLmluaGVyaXRzPXIoNzQpLG8uaW5oZXJpdHMobixpKSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtyKG51bGwsdCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlLHIpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQucHJlcGVuZExpc3RlbmVyP3QucHJlcGVuZExpc3RlbmVyKGUscik6dm9pZCh0Ll9ldmVudHMmJnQuX2V2ZW50c1tlXT9PKHQuX2V2ZW50c1tlXSk/dC5fZXZlbnRzW2VdLnVuc2hpZnQocik6dC5fZXZlbnRzW2VdPVtyLHQuX2V2ZW50c1tlXV06dC5vbihlLHIpKX1mdW5jdGlvbiBpKHQsZSl7RD1EfHxyKDUxKSx0PXR8fHt9LHRoaXMub2JqZWN0TW9kZT0hIXQub2JqZWN0TW9kZSxlIGluc3RhbmNlb2YgRCYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhdC5yZWFkYWJsZU9iamVjdE1vZGUpO3ZhciBuPXQuaGlnaFdhdGVyTWFyayxpPXRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NDt0aGlzLmhpZ2hXYXRlck1hcms9bnx8MD09PW4/bjppLHRoaXMuaGlnaFdhdGVyTWFyaz1+fnRoaXMuaGlnaFdhdGVyTWFyayx0aGlzLmJ1ZmZlcj1uZXcgeix0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dC5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMucmFuT3V0PSExLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHQuZW5jb2RpbmcmJihVfHwoVT1yKDUyKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IFUodC5lbmNvZGluZyksdGhpcy5lbmNvZGluZz10LmVuY29kaW5nKX1mdW5jdGlvbiBvKHQpe3JldHVybiBEPUR8fHIoNTEpLHRoaXMgaW5zdGFuY2VvZiBvPyh0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBpKHQsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnJlYWQmJih0aGlzLl9yZWFkPXQucmVhZCksdm9pZCBSLmNhbGwodGhpcykpOm5ldyBvKHQpfWZ1bmN0aW9uIGEodCxlLHIsbixpKXt2YXIgbz1oKGUscik7aWYobyl0LmVtaXQoXCJlcnJvclwiLG8pO2Vsc2UgaWYobnVsbD09PXIpZS5yZWFkaW5nPSExLGModCxlKTtlbHNlIGlmKGUub2JqZWN0TW9kZXx8ciYmci5sZW5ndGg+MClpZihlLmVuZGVkJiYhaSl7dmFyIGE9bmV3IEVycm9yKFwic3RyZWFtLnB1c2goKSBhZnRlciBFT0ZcIik7dC5lbWl0KFwiZXJyb3JcIixhKX1lbHNlIGlmKGUuZW5kRW1pdHRlZCYmaSl7dmFyIHM9bmV3IEVycm9yKFwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnRcIik7dC5lbWl0KFwiZXJyb3JcIixzKX1lbHNle3ZhciB1OyFlLmRlY29kZXJ8fGl8fG58fChyPWUuZGVjb2Rlci53cml0ZShyKSx1PSFlLm9iamVjdE1vZGUmJjA9PT1yLmxlbmd0aCksaXx8KGUucmVhZGluZz0hMSksdXx8KGUuZmxvd2luZyYmMD09PWUubGVuZ3RoJiYhZS5zeW5jPyh0LmVtaXQoXCJkYXRhXCIsciksdC5yZWFkKDApKTooZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoLGk/ZS5idWZmZXIudW5zaGlmdChyKTplLmJ1ZmZlci5wdXNoKHIpLGUubmVlZFJlYWRhYmxlJiZkKHQpKSkscCh0LGUpfWVsc2UgaXx8KGUucmVhZGluZz0hMSk7cmV0dXJuIGYoZSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4hdC5lbmRlZCYmKHQubmVlZFJlYWRhYmxlfHx0Lmxlbmd0aDx0LmhpZ2hXYXRlck1hcmt8fDA9PT10Lmxlbmd0aCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdD49cT90PXE6KHQtLSx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCx0fD10Pj4+MTYsdCsrKSx0fWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdDw9MHx8MD09PWUubGVuZ3RoJiZlLmVuZGVkPzA6ZS5vYmplY3RNb2RlPzE6dCE9PXQ/ZS5mbG93aW5nJiZlLmxlbmd0aD9lLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOmUubGVuZ3RoOih0PmUuaGlnaFdhdGVyTWFyayYmKGUuaGlnaFdhdGVyTWFyaz1zKHQpKSx0PD1lLmxlbmd0aD90OmUuZW5kZWQ/ZS5sZW5ndGg6KGUubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9bnVsbDtyZXR1cm4gVC5pc0J1ZmZlcihlKXx8XCJzdHJpbmdcIj09dHlwZW9mIGV8fG51bGw9PT1lfHx2b2lkIDA9PT1lfHx0Lm9iamVjdE1vZGV8fChyPW5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rXCIpKSxyfWZ1bmN0aW9uIGModCxlKXtpZighZS5lbmRlZCl7aWYoZS5kZWNvZGVyKXt2YXIgcj1lLmRlY29kZXIuZW5kKCk7ciYmci5sZW5ndGgmJihlLmJ1ZmZlci5wdXNoKHIpLGUubGVuZ3RoKz1lLm9iamVjdE1vZGU/MTpyLmxlbmd0aCl9ZS5lbmRlZD0hMCxkKHQpfX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7ZS5uZWVkUmVhZGFibGU9ITEsZS5lbWl0dGVkUmVhZGFibGV8fChMKFwiZW1pdFJlYWRhYmxlXCIsZS5mbG93aW5nKSxlLmVtaXR0ZWRSZWFkYWJsZT0hMCxlLnN5bmM/QihsLHQpOmwodCkpfWZ1bmN0aW9uIGwodCl7TChcImVtaXQgcmVhZGFibGVcIiksdC5lbWl0KFwicmVhZGFibGVcIiksdyh0KX1mdW5jdGlvbiBwKHQsZSl7ZS5yZWFkaW5nTW9yZXx8KGUucmVhZGluZ01vcmU9ITAsQihiLHQsZSkpfWZ1bmN0aW9uIGIodCxlKXtmb3IodmFyIHI9ZS5sZW5ndGg7IWUucmVhZGluZyYmIWUuZmxvd2luZyYmIWUuZW5kZWQmJmUubGVuZ3RoPGUuaGlnaFdhdGVyTWFyayYmKEwoXCJtYXliZVJlYWRNb3JlIHJlYWQgMFwiKSx0LnJlYWQoMCksciE9PWUubGVuZ3RoKTspcj1lLmxlbmd0aDtlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIHYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtMKFwicGlwZU9uRHJhaW5cIixlLmF3YWl0RHJhaW4pLGUuYXdhaXREcmFpbiYmZS5hd2FpdERyYWluLS0sMD09PWUuYXdhaXREcmFpbiYmUCh0LFwiZGF0YVwiKSYmKGUuZmxvd2luZz0hMCx3KHQpKX19ZnVuY3Rpb24geSh0KXtMKFwicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwXCIpLHQucmVhZCgwKX1mdW5jdGlvbiBtKHQsZSl7ZS5yZXN1bWVTY2hlZHVsZWR8fChlLnJlc3VtZVNjaGVkdWxlZD0hMCxCKGcsdCxlKSl9ZnVuY3Rpb24gZyh0LGUpe2UucmVhZGluZ3x8KEwoXCJyZXN1bWUgcmVhZCAwXCIpLHQucmVhZCgwKSksZS5yZXN1bWVTY2hlZHVsZWQ9ITEsZS5hd2FpdERyYWluPTAsdC5lbWl0KFwicmVzdW1lXCIpLHcodCksZS5mbG93aW5nJiYhZS5yZWFkaW5nJiZ0LnJlYWQoMCl9ZnVuY3Rpb24gdyh0KXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2ZvcihMKFwiZmxvd1wiLGUuZmxvd2luZyk7ZS5mbG93aW5nJiZudWxsIT09dC5yZWFkKCk7KTt9ZnVuY3Rpb24gXyh0LGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgcjtyZXR1cm4gZS5vYmplY3RNb2RlP3I9ZS5idWZmZXIuc2hpZnQoKTohdHx8dD49ZS5sZW5ndGg/KHI9ZS5kZWNvZGVyP2UuYnVmZmVyLmpvaW4oXCJcIik6MT09PWUuYnVmZmVyLmxlbmd0aD9lLmJ1ZmZlci5oZWFkLmRhdGE6ZS5idWZmZXIuY29uY2F0KGUubGVuZ3RoKSxlLmJ1ZmZlci5jbGVhcigpKTpyPU0odCxlLmJ1ZmZlcixlLmRlY29kZXIpLHJ9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG47cmV0dXJuIHQ8ZS5oZWFkLmRhdGEubGVuZ3RoPyhuPWUuaGVhZC5kYXRhLnNsaWNlKDAsdCksZS5oZWFkLmRhdGE9ZS5oZWFkLmRhdGEuc2xpY2UodCkpOm49dD09PWUuaGVhZC5kYXRhLmxlbmd0aD9lLnNoaWZ0KCk6cj9TKHQsZSk6RSh0LGUpLG59ZnVuY3Rpb24gUyh0LGUpe3ZhciByPWUuaGVhZCxuPTEsaT1yLmRhdGE7Zm9yKHQtPWkubGVuZ3RoO3I9ci5uZXh0Oyl7dmFyIG89ci5kYXRhLGE9dD5vLmxlbmd0aD9vLmxlbmd0aDp0O2lmKGkrPWE9PT1vLmxlbmd0aD9vOm8uc2xpY2UoMCx0KSx0LT1hLDA9PT10KXthPT09by5sZW5ndGg/KCsrbixyLm5leHQ/ZS5oZWFkPXIubmV4dDplLmhlYWQ9ZS50YWlsPW51bGwpOihlLmhlYWQ9cixyLmRhdGE9by5zbGljZShhKSk7YnJlYWt9KytufXJldHVybiBlLmxlbmd0aC09bixpfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj1qLmFsbG9jVW5zYWZlKHQpLG49ZS5oZWFkLGk9MTtmb3Iobi5kYXRhLmNvcHkociksdC09bi5kYXRhLmxlbmd0aDtuPW4ubmV4dDspe3ZhciBvPW4uZGF0YSxhPXQ+by5sZW5ndGg/by5sZW5ndGg6dDtpZihvLmNvcHkocixyLmxlbmd0aC10LDAsYSksdC09YSwwPT09dCl7YT09PW8ubGVuZ3RoPygrK2ksbi5uZXh0P2UuaGVhZD1uLm5leHQ6ZS5oZWFkPWUudGFpbD1udWxsKTooZS5oZWFkPW4sbi5kYXRhPW8uc2xpY2UoYSkpO2JyZWFrfSsraX1yZXR1cm4gZS5sZW5ndGgtPWkscn1mdW5jdGlvbiBBKHQpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7aWYoZS5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoJ1wiZW5kUmVhZGFibGUoKVwiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7ZS5lbmRFbWl0dGVkfHwoZS5lbmRlZD0hMCxCKGssZSx0KSl9ZnVuY3Rpb24gayh0LGUpe3QuZW5kRW1pdHRlZHx8MCE9PXQubGVuZ3RofHwodC5lbmRFbWl0dGVkPSEwLGUucmVhZGFibGU9ITEsZS5lbWl0KFwiZW5kXCIpKX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWUodFtyXSxyKX1mdW5jdGlvbiBJKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWlmKHRbcl09PT1lKXJldHVybiByO3JldHVybi0xfXQuZXhwb3J0cz1vO3ZhciBCPXIoMTU3KSxPPXIoNTk3KTtvLlJlYWRhYmxlU3RhdGU9aTt2YXIgUixQPShyKDExMCkuRXZlbnRFbWl0dGVyLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGlzdGVuZXJzKGUpLmxlbmd0aH0pOyFmdW5jdGlvbigpe3RyeXtSPXIoMzEpfWNhdGNoKHQpe31maW5hbGx5e1J8fChSPXIoMTEwKS5FdmVudEVtaXR0ZXIpfX0oKTt2YXIgVD1yKDEpLkJ1ZmZlcixqPXIoMTU2KSxDPXIoNzMpO0MuaW5oZXJpdHM9cig3NCk7dmFyIE49cig2MTIpLEw9dm9pZCAwO0w9TiYmTi5kZWJ1Z2xvZz9OLmRlYnVnbG9nKFwic3RyZWFtXCIpOmZ1bmN0aW9uKCl7fTt2YXIgVSx6PXIoNTk2KTtDLmluaGVyaXRzKG8sUik7dmFyIEQsRDtvLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gci5vYmplY3RNb2RlfHxcInN0cmluZ1wiIT10eXBlb2YgdHx8KGU9ZXx8ci5kZWZhdWx0RW5jb2RpbmcsZSE9PXIuZW5jb2RpbmcmJih0PWouZnJvbSh0LGUpLGU9XCJcIikpLGEodGhpcyxyLHQsZSwhMSl9LG8ucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gYSh0aGlzLGUsdCxcIlwiLCEwKX0sby5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPT09ITF9LG8ucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBVfHwoVT1yKDUyKS5TdHJpbmdEZWNvZGVyKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IFUodCksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10LHRoaXN9O3ZhciBxPTgzODg2MDg7by5wcm90b3R5cGUucmVhZD1mdW5jdGlvbih0KXtMKFwicmVhZFwiLHQpLHQ9cGFyc2VJbnQodCwxMCk7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXQ7aWYoMCE9PXQmJihlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PXQmJmUubmVlZFJlYWRhYmxlJiYoZS5sZW5ndGg+PWUuaGlnaFdhdGVyTWFya3x8ZS5lbmRlZCkpcmV0dXJuIEwoXCJyZWFkOiBlbWl0UmVhZGFibGVcIixlLmxlbmd0aCxlLmVuZGVkKSwwPT09ZS5sZW5ndGgmJmUuZW5kZWQ/QSh0aGlzKTpkKHRoaXMpLG51bGw7aWYodD11KHQsZSksMD09PXQmJmUuZW5kZWQpcmV0dXJuIDA9PT1lLmxlbmd0aCYmQSh0aGlzKSxudWxsO3ZhciBuPWUubmVlZFJlYWRhYmxlO0woXCJuZWVkIHJlYWRhYmxlXCIsbiksKDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGgtdDxlLmhpZ2hXYXRlck1hcmspJiYobj0hMCxMKFwibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmtcIixuKSksZS5lbmRlZHx8ZS5yZWFkaW5nPyhuPSExLEwoXCJyZWFkaW5nIG9yIGVuZGVkXCIsbikpOm4mJihMKFwiZG8gcmVhZFwiKSxlLnJlYWRpbmc9ITAsZS5zeW5jPSEwLDA9PT1lLmxlbmd0aCYmKGUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKGUuaGlnaFdhdGVyTWFyayksZS5zeW5jPSExLGUucmVhZGluZ3x8KHQ9dShyLGUpKSk7dmFyIGk7cmV0dXJuIGk9dD4wP18odCxlKTpudWxsLG51bGw9PT1pPyhlLm5lZWRSZWFkYWJsZT0hMCx0PTApOmUubGVuZ3RoLT10LDA9PT1lLmxlbmd0aCYmKGUuZW5kZWR8fChlLm5lZWRSZWFkYWJsZT0hMCksciE9PXQmJmUuZW5kZWQmJkEodGhpcykpLG51bGwhPT1pJiZ0aGlzLmVtaXQoXCJkYXRhXCIsaSksaX0sby5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24odCl7dGhpcy5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIikpfSxvLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gaSh0KXtMKFwib251bnBpcGVcIiksdD09PWQmJmEoKX1mdW5jdGlvbiBvKCl7TChcIm9uZW5kXCIpLHQuZW5kKCl9ZnVuY3Rpb24gYSgpe0woXCJjbGVhbnVwXCIpLHQucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHUpLHQucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixoKSx0LnJlbW92ZUxpc3RlbmVyKFwiZHJhaW5cIix5KSx0LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixzKSx0LnJlbW92ZUxpc3RlbmVyKFwidW5waXBlXCIsaSksZC5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLG8pLGQucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixhKSxkLnJlbW92ZUxpc3RlbmVyKFwiZGF0YVwiLGYpLG09ITAsIWwuYXdhaXREcmFpbnx8dC5fd3JpdGFibGVTdGF0ZSYmIXQuX3dyaXRhYmxlU3RhdGUubmVlZERyYWlufHx5KCl9ZnVuY3Rpb24gZihlKXtMKFwib25kYXRhXCIpLGc9ITE7dmFyIHI9dC53cml0ZShlKTshMSE9PXJ8fGd8fCgoMT09PWwucGlwZXNDb3VudCYmbC5waXBlcz09PXR8fGwucGlwZXNDb3VudD4xJiZJKGwucGlwZXMsdCkhPT0tMSkmJiFtJiYoTChcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLGQuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbiksZC5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKyssZz0hMCksZC5wYXVzZSgpKX1mdW5jdGlvbiBzKGUpe0woXCJvbmVycm9yXCIsZSksYygpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHMpLDA9PT1QKHQsXCJlcnJvclwiKSYmdC5lbWl0KFwiZXJyb3JcIixlKX1mdW5jdGlvbiB1KCl7dC5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLGgpLGMoKX1mdW5jdGlvbiBoKCl7TChcIm9uZmluaXNoXCIpLHQucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHUpLGMoKX1mdW5jdGlvbiBjKCl7TChcInVucGlwZVwiKSxkLnVucGlwZSh0KX12YXIgZD10aGlzLGw9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2gobC5waXBlc0NvdW50KXtjYXNlIDA6bC5waXBlcz10O2JyZWFrO2Nhc2UgMTpsLnBpcGVzPVtsLnBpcGVzLHRdO2JyZWFrO2RlZmF1bHQ6bC5waXBlcy5wdXNoKHQpfWwucGlwZXNDb3VudCs9MSxMKFwicGlwZSBjb3VudD0lZCBvcHRzPSVqXCIsbC5waXBlc0NvdW50LHIpO3ZhciBwPSghcnx8ci5lbmQhPT0hMSkmJnQhPT1lLnN0ZG91dCYmdCE9PWUuc3RkZXJyLGI9cD9vOmE7bC5lbmRFbWl0dGVkP0IoYik6ZC5vbmNlKFwiZW5kXCIsYiksdC5vbihcInVucGlwZVwiLGkpO3ZhciB5PXYoZCk7dC5vbihcImRyYWluXCIseSk7dmFyIG09ITEsZz0hMTtyZXR1cm4gZC5vbihcImRhdGFcIixmKSxuKHQsXCJlcnJvclwiLHMpLHQub25jZShcImNsb3NlXCIsdSksdC5vbmNlKFwiZmluaXNoXCIsaCksdC5lbWl0KFwicGlwZVwiLGQpLGwuZmxvd2luZ3x8KEwoXCJwaXBlIHJlc3VtZVwiKSxkLnJlc3VtZSgpKSx0fSxvLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtpZigwPT09ZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1lLnBpcGVzQ291bnQpcmV0dXJuIHQmJnQhPT1lLnBpcGVzP3RoaXM6KHR8fCh0PWUucGlwZXMpLGUucGlwZXM9bnVsbCxlLnBpcGVzQ291bnQ9MCxlLmZsb3dpbmc9ITEsdCYmdC5lbWl0KFwidW5waXBlXCIsdGhpcyksdGhpcyk7aWYoIXQpe3ZhciByPWUucGlwZXMsbj1lLnBpcGVzQ291bnQ7ZS5waXBlcz1udWxsLGUucGlwZXNDb3VudD0wLGUuZmxvd2luZz0hMTtmb3IodmFyIGk9MDtpPG47aSsrKXJbaV0uZW1pdChcInVucGlwZVwiLHRoaXMpO3JldHVybiB0aGlzfXZhciBvPUkoZS5waXBlcyx0KTtyZXR1cm4gbz09PS0xP3RoaXM6KGUucGlwZXMuc3BsaWNlKG8sMSksZS5waXBlc0NvdW50LT0xLDE9PT1lLnBpcGVzQ291bnQmJihlLnBpcGVzPWUucGlwZXNbMF0pLHQuZW1pdChcInVucGlwZVwiLHRoaXMpLHRoaXMpfSxvLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3ZhciByPVIucHJvdG90eXBlLm9uLmNhbGwodGhpcyx0LGUpO2lmKFwiZGF0YVwiPT09dCl0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmchPT0hMSYmdGhpcy5yZXN1bWUoKTtlbHNlIGlmKFwicmVhZGFibGVcIj09PXQpe3ZhciBuPXRoaXMuX3JlYWRhYmxlU3RhdGU7bi5lbmRFbWl0dGVkfHxuLnJlYWRhYmxlTGlzdGVuaW5nfHwobi5yZWFkYWJsZUxpc3RlbmluZz1uLm5lZWRSZWFkYWJsZT0hMCxuLmVtaXR0ZWRSZWFkYWJsZT0hMSxuLnJlYWRpbmc/bi5sZW5ndGgmJmQodGhpcyxuKTpCKHksdGhpcykpfXJldHVybiByfSxvLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1vLnByb3RvdHlwZS5vbixvLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB0LmZsb3dpbmd8fChMKFwicmVzdW1lXCIpLHQuZmxvd2luZz0hMCxtKHRoaXMsdCkpLHRoaXN9LG8ucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEwoXCJjYWxsIHBhdXNlIGZsb3dpbmc9JWpcIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoTChcInBhdXNlXCIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoXCJwYXVzZVwiKSksdGhpc30sby5wcm90b3R5cGUud3JhcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlLHI9ITEsbj10aGlzO3Qub24oXCJlbmRcIixmdW5jdGlvbigpe2lmKEwoXCJ3cmFwcGVkIGVuZFwiKSxlLmRlY29kZXImJiFlLmVuZGVkKXt2YXIgdD1lLmRlY29kZXIuZW5kKCk7dCYmdC5sZW5ndGgmJm4ucHVzaCh0KX1uLnB1c2gobnVsbCl9KSx0Lm9uKFwiZGF0YVwiLGZ1bmN0aW9uKGkpe2lmKEwoXCJ3cmFwcGVkIGRhdGFcIiksZS5kZWNvZGVyJiYoaT1lLmRlY29kZXIud3JpdGUoaSkpLCghZS5vYmplY3RNb2RlfHxudWxsIT09aSYmdm9pZCAwIT09aSkmJihlLm9iamVjdE1vZGV8fGkmJmkubGVuZ3RoKSl7dmFyIG89bi5wdXNoKGkpO298fChyPSEwLHQucGF1c2UoKSl9fSk7Zm9yKHZhciBpIGluIHQpdm9pZCAwPT09dGhpc1tpXSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdFtpXSYmKHRoaXNbaV09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRbZV0uYXBwbHkodCxhcmd1bWVudHMpfX0oaSkpO3ZhciBvPVtcImVycm9yXCIsXCJjbG9zZVwiLFwiZGVzdHJveVwiLFwicGF1c2VcIixcInJlc3VtZVwiXTtyZXR1cm4geChvLGZ1bmN0aW9uKGUpe3Qub24oZSxuLmVtaXQuYmluZChuLGUpKX0pLG4uX3JlYWQ9ZnVuY3Rpb24oZSl7TChcIndyYXBwZWQgX3JlYWRcIixlKSxyJiYocj0hMSx0LnJlc3VtZSgpKX0sbn0sby5fZnJvbUxpc3Q9X30pLmNhbGwoZSxyKDI2KSl9LGZ1bmN0aW9uKG1vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pe2Z1bmN0aW9uIENvbnRleHQoKXt9dmFyIGluZGV4T2Y9X193ZWJwYWNrX3JlcXVpcmVfXyg2MDcpLE9iamVjdF9rZXlzPWZ1bmN0aW9uKHQpe2lmKE9iamVjdC5rZXlzKXJldHVybiBPYmplY3Qua2V5cyh0KTt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LGZvckVhY2g9ZnVuY3Rpb24odCxlKXtpZih0LmZvckVhY2gpcmV0dXJuIHQuZm9yRWFjaChlKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllKHRbcl0scix0KX0sZGVmaW5lUHJvcD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiX1wiLHt9KSxmdW5jdGlvbih0LGUscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxcbmNvbmZpZ3VyYWJsZTohMCx2YWx1ZTpyfSl9fWNhdGNoKHQpe3JldHVybiBmdW5jdGlvbih0LGUscil7dFtlXT1yfX19KCksZ2xvYmFscz1bXCJBcnJheVwiLFwiQm9vbGVhblwiLFwiRGF0ZVwiLFwiRXJyb3JcIixcIkV2YWxFcnJvclwiLFwiRnVuY3Rpb25cIixcIkluZmluaXR5XCIsXCJKU09OXCIsXCJNYXRoXCIsXCJOYU5cIixcIk51bWJlclwiLFwiT2JqZWN0XCIsXCJSYW5nZUVycm9yXCIsXCJSZWZlcmVuY2VFcnJvclwiLFwiUmVnRXhwXCIsXCJTdHJpbmdcIixcIlN5bnRheEVycm9yXCIsXCJUeXBlRXJyb3JcIixcIlVSSUVycm9yXCIsXCJkZWNvZGVVUklcIixcImRlY29kZVVSSUNvbXBvbmVudFwiLFwiZW5jb2RlVVJJXCIsXCJlbmNvZGVVUklDb21wb25lbnRcIixcImVzY2FwZVwiLFwiZXZhbFwiLFwiaXNGaW5pdGVcIixcImlzTmFOXCIsXCJwYXJzZUZsb2F0XCIsXCJwYXJzZUludFwiLFwidW5kZWZpbmVkXCIsXCJ1bmVzY2FwZVwiXTtDb250ZXh0LnByb3RvdHlwZT17fTt2YXIgU2NyaXB0PWV4cG9ydHMuU2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgU2NyaXB0P3ZvaWQodGhpcy5jb2RlPXQpOm5ldyBTY3JpcHQodCl9O1NjcmlwdC5wcm90b3R5cGUucnVuSW5Db250ZXh0PWZ1bmN0aW9uKHQpe2lmKCEodCBpbnN0YW5jZW9mIENvbnRleHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJuZWVkcyBhICdjb250ZXh0JyBhcmd1bWVudC5cIik7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtlLnN0eWxlfHwoZS5zdHlsZT17fSksZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7dmFyIHI9ZS5jb250ZW50V2luZG93LG49ci5ldmFsLGk9ci5leGVjU2NyaXB0OyFuJiZpJiYoaS5jYWxsKHIsXCJudWxsXCIpLG49ci5ldmFsKSxmb3JFYWNoKE9iamVjdF9rZXlzKHQpLGZ1bmN0aW9uKGUpe3JbZV09dFtlXX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbihlKXt0W2VdJiYocltlXT10W2VdKX0pO3ZhciBvPU9iamVjdF9rZXlzKHIpLGE9bi5jYWxsKHIsdGhpcy5jb2RlKTtyZXR1cm4gZm9yRWFjaChPYmplY3Rfa2V5cyhyKSxmdW5jdGlvbihlKXsoZSBpbiB0fHxpbmRleE9mKG8sZSk9PT0tMSkmJih0W2VdPXJbZV0pfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKGUpe2UgaW4gdHx8ZGVmaW5lUHJvcCh0LGUscltlXSl9KSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGUpLGF9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5UaGlzQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBldmFsKHRoaXMuY29kZSl9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5OZXdDb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPVNjcmlwdC5jcmVhdGVDb250ZXh0KHQpLHI9dGhpcy5ydW5JbkNvbnRleHQoZSk7cmV0dXJuIGZvckVhY2goT2JqZWN0X2tleXMoZSksZnVuY3Rpb24ocil7dFtyXT1lW3JdfSkscn0sZm9yRWFjaChPYmplY3Rfa2V5cyhTY3JpcHQucHJvdG90eXBlKSxmdW5jdGlvbih0KXtleHBvcnRzW3RdPVNjcmlwdFt0XT1mdW5jdGlvbihlKXt2YXIgcj1TY3JpcHQoZSk7cmV0dXJuIHJbdF0uYXBwbHkocixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fSksZXhwb3J0cy5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGV4cG9ydHMuU2NyaXB0KHQpfSxleHBvcnRzLmNyZWF0ZUNvbnRleHQ9U2NyaXB0LmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IENvbnRleHQ7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJmZvckVhY2goT2JqZWN0X2tleXModCksZnVuY3Rpb24ocil7ZVtyXT10W3JdfSksZX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7dmFyIG49cig3NSksaT1yKDYzKSxvPXIoMTE1KSxhPXIoMjY0KSxmPXIoMjYzKSxzPXIoMjY2KSx1PXIoMjY1KSxoPXIoMjYyKSxjPXIoMTE2KSxkPW5ldyBlKDApLGw9ZnVuY3Rpb24odCl7dmFyIGU9bi5mcm9tVXJpKHQpO3JldHVybiBlLnZhbGlkYXRlKCl9LHA9ZnVuY3Rpb24odCxyLG4pe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBuJiYobj1kKSwhZS5pc0J1ZmZlcihuKSl0aHJvdyBuZXcgRXJyb3IoXCJNZXNzYWdlIG11c3QgYmUgcHJvdmlkZWQgYXMgYSBCdWZmZXJcIik7dmFyIG89aS5mcm9tVXJpKHQpLGE9by5nZXRDb25kaXRpb25VcmkoKTtpZihhIT09cil0aHJvdyBuZXcgRXJyb3IoXCJGdWxmaWxsbWVudCBkb2VzIG5vdCBtYXRjaCBjb25kaXRpb24gKGV4cGVjdGVkOiBcIityK1wiLCBhY3R1YWw6IFwiK2ErXCIpXCIpO3JldHVybiBvLnZhbGlkYXRlKG4pfSxiPWZ1bmN0aW9uKHQpe3ZhciBlPWkuZnJvbVVyaSh0KTtyZXR1cm4gZS5nZXRDb25kaXRpb25VcmkoKX07by5yZWdpc3RlclR5cGUoYSksby5yZWdpc3RlclR5cGUoZiksby5yZWdpc3RlclR5cGUocyksby5yZWdpc3RlclR5cGUodSksby5yZWdpc3RlclR5cGUoaCksdC5leHBvcnRzPXtDb25kaXRpb246bixGdWxmaWxsbWVudDppLFR5cGVSZWdpc3RyeTpvLFByZWltYWdlU2hhMjU2OmEsUnNhU2hhMjU2OnUsUHJlZml4U2hhMjU2OmYsVGhyZXNob2xkU2hhMjU2OnMsRWQyNTUxOTpoLHZhbGlkYXRlQ29uZGl0aW9uOmwsdmFsaWRhdGVGdWxmaWxsbWVudDpwLGZ1bGZpbGxtZW50VG9Db25kaXRpb246YixiYXNlNjR1cmw6Yyxmcm9tQ29uZGl0aW9uVXJpOm4uZnJvbVVyaS5iaW5kKG4pLGZyb21Db25kaXRpb25CaW5hcnk6bi5mcm9tQmluYXJ5LmJpbmQobiksZnJvbUZ1bGZpbGxtZW50VXJpOmkuZnJvbVVyaS5iaW5kKGkpLGZyb21GdWxmaWxsbWVudEJpbmFyeTppLmZyb21CaW5hcnkuYmluZChpKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLHIpe3RbZV18fE9iamVjdFtuXSh0LGUse3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTpyfSl9aWYocig0NjEpLHIoMjY4KSxyKDI2OSksdC5fYmFiZWxQb2x5ZmlsbCl0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO3QuX2JhYmVsUG9seWZpbGw9ITA7dmFyIG49XCJkZWZpbmVQcm9wZXJ0eVwiO2UoU3RyaW5nLnByb3RvdHlwZSxcInBhZExlZnRcIixcIlwiLnBhZFN0YXJ0KSxlKFN0cmluZy5wcm90b3R5cGUsXCJwYWRSaWdodFwiLFwiXCIucGFkRW5kKSxcInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1tdW3RdJiZlKEFycmF5LHQsRnVuY3Rpb24uY2FsbC5iaW5kKFtdW3RdKSl9KX0pLmNhbGwoZSxyKDM5KSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDExMSksaT1yKDExMiksbz1yKDI1NSksYT1yKDI1Nik7dC5leHBvcnRzPXtSZWFkZXI6byxXcml0ZXI6YX07Zm9yKHZhciBmIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShmKSYmKHQuZXhwb3J0c1tmXT1pW2ZdKTtmb3IodmFyIHMgaW4gbiluLmhhc093blByb3BlcnR5KHMpJiYodC5leHBvcnRzW3NdPW5bc10pfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aWYoIXR8fCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJkYXRhIG11c3QgYmUgYSBub2RlIEJ1ZmZlclwiKTt0aGlzLl9idWY9dCx0aGlzLl9zaXplPXQubGVuZ3RoLHRoaXMuX2xlbj0wLHRoaXMuX29mZnNldD0wfXZhciBpPXIoMjAyKSxvPXIoMTEyKSxhPXIoMTExKSxmPWEubmV3SW52YWxpZEFzbjFFcnJvcjtPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJsZW5ndGhcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGVufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIm9mZnNldFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vZmZzZXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwicmVtYWluXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplLXRoaXMuX29mZnNldH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJidWZmZXJcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1Zi5zbGljZSh0aGlzLl9vZmZzZXQpfX0pLG4ucHJvdG90eXBlLnJlYWRCeXRlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NpemUtdGhpcy5fb2Zmc2V0PDEpcmV0dXJuIG51bGw7dmFyIGU9MjU1JnRoaXMuX2J1Zlt0aGlzLl9vZmZzZXRdO3JldHVybiB0fHwodGhpcy5fb2Zmc2V0Kz0xKSxlfSxuLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZEJ5dGUoITApfSxuLnByb3RvdHlwZS5yZWFkTGVuZ3RoPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQmJih0PXRoaXMuX29mZnNldCksdD49dGhpcy5fc2l6ZSlyZXR1cm4gbnVsbDt2YXIgZT0yNTUmdGhpcy5fYnVmW3QrK107aWYobnVsbD09PWUpcmV0dXJuIG51bGw7aWYoMTI4PT0oMTI4JmUpKXtpZihlJj0xMjcsMD09ZSl0aHJvdyBmKFwiSW5kZWZpbml0ZSBsZW5ndGggbm90IHN1cHBvcnRlZFwiKTtpZihlPjQpdGhyb3cgZihcImVuY29kaW5nIHRvbyBsb25nXCIpO2lmKHRoaXMuX3NpemUtdDxlKXJldHVybiBudWxsO3RoaXMuX2xlbj0wO2Zvcih2YXIgcj0wO3I8ZTtyKyspdGhpcy5fbGVuPSh0aGlzLl9sZW48PDgpKygyNTUmdGhpcy5fYnVmW3QrK10pfWVsc2UgdGhpcy5fbGVuPWU7cmV0dXJuIHR9LG4ucHJvdG90eXBlLnJlYWRTZXF1ZW5jZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBlZWsoKTtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtpZih2b2lkIDAhPT10JiZ0IT09ZSl0aHJvdyBmKFwiRXhwZWN0ZWQgMHhcIit0LnRvU3RyaW5nKDE2KStcIjogZ290IDB4XCIrZS50b1N0cmluZygxNikpO3ZhciByPXRoaXMucmVhZExlbmd0aCh0aGlzLl9vZmZzZXQrMSk7cmV0dXJuIG51bGw9PT1yP251bGw6KHRoaXMuX29mZnNldD1yLGUpfSxuLnByb3RvdHlwZS5yZWFkSW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRUYWcoby5JbnRlZ2VyKX0sbi5wcm90b3R5cGUucmVhZEJvb2xlYW49ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMuX3JlYWRUYWcoby5Cb29sZWFuKX0sbi5wcm90b3R5cGUucmVhZEVudW1lcmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRUYWcoby5FbnVtZXJhdGlvbil9LG4ucHJvdG90eXBlLnJlYWRTdHJpbmc9ZnVuY3Rpb24odCxyKXt0fHwodD1vLk9jdGV0U3RyaW5nKTt2YXIgbj10aGlzLnBlZWsoKTtpZihudWxsPT09bilyZXR1cm4gbnVsbDtpZihuIT09dCl0aHJvdyBmKFwiRXhwZWN0ZWQgMHhcIit0LnRvU3RyaW5nKDE2KStcIjogZ290IDB4XCIrbi50b1N0cmluZygxNikpO3ZhciBpPXRoaXMucmVhZExlbmd0aCh0aGlzLl9vZmZzZXQrMSk7aWYobnVsbD09PWkpcmV0dXJuIG51bGw7aWYodGhpcy5sZW5ndGg+dGhpcy5fc2l6ZS1pKXJldHVybiBudWxsO2lmKHRoaXMuX29mZnNldD1pLDA9PT10aGlzLmxlbmd0aClyZXR1cm4gcj9uZXcgZSgwKTpcIlwiO3ZhciBhPXRoaXMuX2J1Zi5zbGljZSh0aGlzLl9vZmZzZXQsdGhpcy5fb2Zmc2V0K3RoaXMubGVuZ3RoKTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz10aGlzLmxlbmd0aCxyP2E6YS50b1N0cmluZyhcInV0ZjhcIil9LG4ucHJvdG90eXBlLnJlYWRPSUQ9ZnVuY3Rpb24odCl7dHx8KHQ9by5PSUQpO3ZhciBlPXRoaXMucmVhZFN0cmluZyh0LCEwKTtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtmb3IodmFyIHI9W10sbj0wLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9MjU1JmVbaV07bjw8PTcsbis9MTI3JmEsMD09KDEyOCZhKSYmKHIucHVzaChuKSxuPTApfXJldHVybiBuPXIuc2hpZnQoKSxyLnVuc2hpZnQobiU0MCksci51bnNoaWZ0KG4vNDA+PjApLHIuam9pbihcIi5cIil9LG4ucHJvdG90eXBlLl9yZWFkVGFnPWZ1bmN0aW9uKHQpe2kub2sodm9pZCAwIT09dCk7dmFyIGU9dGhpcy5wZWVrKCk7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7aWYoZSE9PXQpdGhyb3cgZihcIkV4cGVjdGVkIDB4XCIrdC50b1N0cmluZygxNikrXCI6IGdvdCAweFwiK2UudG9TdHJpbmcoMTYpKTt2YXIgcj10aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0KzEpO2lmKG51bGw9PT1yKXJldHVybiBudWxsO2lmKHRoaXMubGVuZ3RoPjQpdGhyb3cgZihcIkludGVnZXIgdG9vIGxvbmc6IFwiK3RoaXMubGVuZ3RoKTtpZih0aGlzLmxlbmd0aD50aGlzLl9zaXplLXIpcmV0dXJuIG51bGw7dGhpcy5fb2Zmc2V0PXI7Zm9yKHZhciBuPXRoaXMuX2J1Zlt0aGlzLl9vZmZzZXRdLG89MCxhPTA7YTx0aGlzLmxlbmd0aDthKyspbzw8PTgsb3w9MjU1JnRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK107cmV0dXJuIDEyOD09KDEyOCZuKSYmNCE9PWEmJihvLT0xPDw4KmEpLG8+PjB9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7by5vayh0KSxvLmVxdWFsKHR5cGVvZiB0LFwib2JqZWN0XCIpLG8ub2soZSksby5lcXVhbCh0eXBlb2YgZSxcIm9iamVjdFwiKTt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKCFlW3JdKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscixuKX19KSxlfWZ1bmN0aW9uIGkodCl7dD1uKHMsdHx8e30pLHRoaXMuX2J1Zj1uZXcgZSh0LnNpemV8fDEwMjQpLHRoaXMuX3NpemU9dGhpcy5fYnVmLmxlbmd0aCx0aGlzLl9vZmZzZXQ9MCx0aGlzLl9vcHRpb25zPXQsdGhpcy5fc2VxPVtdfXZhciBvPXIoMjAyKSxhPXIoMTEyKSxmPXIoMTExKSxzPShmLm5ld0ludmFsaWRBc24xRXJyb3Ise3NpemU6MTAyNCxncm93dGhGYWN0b3I6OH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSxcImJ1ZmZlclwiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zZXEubGVuZ3RoKXRocm93IG5ldyBJbnZhbGlkQXNuMUVycm9yKHRoaXMuX3NlcS5sZW5ndGgrXCIgdW5lbmRlZCBzZXF1ZW5jZShzKVwiKTtyZXR1cm4gdGhpcy5fYnVmLnNsaWNlKDAsdGhpcy5fb2Zmc2V0KX19KSxpLnByb3RvdHlwZS53cml0ZUJ5dGU9ZnVuY3Rpb24odCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBOdW1iZXJcIik7dGhpcy5fZW5zdXJlKDEpLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dH0saS5wcm90b3R5cGUud3JpdGVJbnQ9ZnVuY3Rpb24odCxlKXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlclwiKTtcIm51bWJlclwiIT10eXBlb2YgZSYmKGU9YS5JbnRlZ2VyKTtmb3IodmFyIHI9NDsoMD09PSg0Mjg2NTc4Njg4JnQpfHwoNDI4NjU3ODY4OCZ0KT09PS04Mzg4NjA4KSYmcj4xOylyLS0sdDw8PTg7aWYocj40KXRocm93IG5ldyBJbnZhbGlkQXNuMUVycm9yKFwiQkVSIGludHMgY2Fubm90IGJlID4gMHhmZmZmZmZmZlwiKTtmb3IodGhpcy5fZW5zdXJlKDIrciksdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT1lLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109cjtyLS0gPjA7KXRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109KDQyNzgxOTAwODAmdCk+Pj4yNCx0PDw9OH0saS5wcm90b3R5cGUud3JpdGVOdWxsPWZ1bmN0aW9uKCl7dGhpcy53cml0ZUJ5dGUoYS5OdWxsKSx0aGlzLndyaXRlQnl0ZSgwKX0saS5wcm90b3R5cGUud3JpdGVFbnVtZXJhdGlvbj1mdW5jdGlvbih0LGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyXCIpO3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiBlJiYoZT1hLkVudW1lcmF0aW9uKSx0aGlzLndyaXRlSW50KHQsZSl9LGkucHJvdG90eXBlLndyaXRlQm9vbGVhbj1mdW5jdGlvbih0LGUpe2lmKFwiYm9vbGVhblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIEJvb2xlYW5cIik7XCJudW1iZXJcIiE9dHlwZW9mIGUmJihlPWEuQm9vbGVhbiksdGhpcy5fZW5zdXJlKDMpLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109ZSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPTEsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10PzI1NTowfSxpLnByb3RvdHlwZS53cml0ZVN0cmluZz1mdW5jdGlvbih0LHIpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nICh3YXM6IFwiK3R5cGVvZiB0K1wiKVwiKTtcIm51bWJlclwiIT10eXBlb2YgciYmKHI9YS5PY3RldFN0cmluZyk7dmFyIG49ZS5ieXRlTGVuZ3RoKHQpO3RoaXMud3JpdGVCeXRlKHIpLHRoaXMud3JpdGVMZW5ndGgobiksbiYmKHRoaXMuX2Vuc3VyZShuKSx0aGlzLl9idWYud3JpdGUodCx0aGlzLl9vZmZzZXQpLHRoaXMuX29mZnNldCs9bil9LGkucHJvdG90eXBlLndyaXRlQnVmZmVyPWZ1bmN0aW9uKHQscil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcInRhZyBtdXN0IGJlIGEgbnVtYmVyXCIpO2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgYnVmZmVyXCIpO3RoaXMud3JpdGVCeXRlKHIpLHRoaXMud3JpdGVMZW5ndGgodC5sZW5ndGgpLHRoaXMuX2Vuc3VyZSh0Lmxlbmd0aCksdC5jb3B5KHRoaXMuX2J1Zix0aGlzLl9vZmZzZXQsMCx0Lmxlbmd0aCksdGhpcy5fb2Zmc2V0Kz10Lmxlbmd0aH0saS5wcm90b3R5cGUud3JpdGVTdHJpbmdBcnJheT1mdW5jdGlvbih0KXtpZighdCBpbnN0YW5jZW9mIEFycmF5KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5W1N0cmluZ11cIik7dmFyIGU9dGhpczt0LmZvckVhY2goZnVuY3Rpb24odCl7ZS53cml0ZVN0cmluZyh0KX0pfSxpLnByb3RvdHlwZS53cml0ZU9JRD1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtlPDEyOD90LnB1c2goZSk6ZTwxNjM4ND8odC5wdXNoKGU+Pj43fDEyOCksdC5wdXNoKDEyNyZlKSk6ZTwyMDk3MTUyPyh0LnB1c2goZT4+PjE0fDEyOCksdC5wdXNoKDI1NSYoZT4+Pjd8MTI4KSksdC5wdXNoKDEyNyZlKSk6ZTwyNjg0MzU0NTY/KHQucHVzaChlPj4+MjF8MTI4KSx0LnB1c2goMjU1JihlPj4+MTR8MTI4KSksdC5wdXNoKDI1NSYoZT4+Pjd8MTI4KSksdC5wdXNoKDEyNyZlKSk6KHQucHVzaCgyNTUmKGU+Pj4yOHwxMjgpKSx0LnB1c2goMjU1JihlPj4+MjF8MTI4KSksdC5wdXNoKDI1NSYoZT4+PjE0fDEyOCkpLHQucHVzaCgyNTUmKGU+Pj43fDEyOCkpLHQucHVzaCgxMjcmZSkpfWlmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nXCIpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlJiYoZT1hLk9JRCksIS9eKFswLTldK1xcLil7Myx9WzAtOV0rJC8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoXCJhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBPSUQgc3RyaW5nXCIpO3ZhciBuPXQuc3BsaXQoXCIuXCIpLGk9W107aS5wdXNoKDQwKnBhcnNlSW50KG5bMF0sMTApK3BhcnNlSW50KG5bMV0sMTApKSxuLnNsaWNlKDIpLmZvckVhY2goZnVuY3Rpb24odCl7cihpLHBhcnNlSW50KHQsMTApKX0pO3ZhciBvPXRoaXM7dGhpcy5fZW5zdXJlKDIraS5sZW5ndGgpLHRoaXMud3JpdGVCeXRlKGUpLHRoaXMud3JpdGVMZW5ndGgoaS5sZW5ndGgpLGkuZm9yRWFjaChmdW5jdGlvbih0KXtvLndyaXRlQnl0ZSh0KX0pfSxpLnByb3RvdHlwZS53cml0ZUxlbmd0aD1mdW5jdGlvbih0KXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlclwiKTtpZih0aGlzLl9lbnN1cmUoNCksdDw9MTI3KXRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dDtlbHNlIGlmKHQ8PTI1NSl0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPTEyOSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ7ZWxzZSBpZih0PD02NTUzNSl0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPTEzMCx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ+PjgsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10O2Vsc2V7aWYoISh0PD0xNjc3NzIxNSkpdGhyb3cgbmV3IEludmFsaWRBc24xRVJyb3IoXCJMZW5ndGggdG9vIGxvbmcgKD4gNCBieXRlcylcIik7dGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT0xMzEsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10Pj4xNix0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ+PjgsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10fX0saS5wcm90b3R5cGUuc3RhcnRTZXF1ZW5jZT1mdW5jdGlvbih0KXtcIm51bWJlclwiIT10eXBlb2YgdCYmKHQ9YS5TZXF1ZW5jZXxhLkNvbnN0cnVjdG9yKSx0aGlzLndyaXRlQnl0ZSh0KSx0aGlzLl9zZXEucHVzaCh0aGlzLl9vZmZzZXQpLHRoaXMuX2Vuc3VyZSgzKSx0aGlzLl9vZmZzZXQrPTN9LGkucHJvdG90eXBlLmVuZFNlcXVlbmNlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc2VxLnBvcCgpLGU9dCszLHI9dGhpcy5fb2Zmc2V0LWU7aWYocjw9MTI3KXRoaXMuX3NoaWZ0KGUsciwtMiksdGhpcy5fYnVmW3RdPXI7ZWxzZSBpZihyPD0yNTUpdGhpcy5fc2hpZnQoZSxyLC0xKSx0aGlzLl9idWZbdF09MTI5LHRoaXMuX2J1Zlt0KzFdPXI7ZWxzZSBpZihyPD02NTUzNSl0aGlzLl9idWZbdF09MTMwLHRoaXMuX2J1Zlt0KzFdPXI+PjgsdGhpcy5fYnVmW3QrMl09cjtlbHNle2lmKCEocjw9MTY3NzcyMTUpKXRocm93IG5ldyBJbnZhbGlkQXNuMUVycm9yKFwiU2VxdWVuY2UgdG9vIGxvbmdcIik7dGhpcy5fc2hpZnQoZSxyLDEpLHRoaXMuX2J1Zlt0XT0xMzEsdGhpcy5fYnVmW3QrMV09cj4+MTYsdGhpcy5fYnVmW3QrMl09cj4+OCx0aGlzLl9idWZbdCszXT1yfX0saS5wcm90b3R5cGUuX3NoaWZ0PWZ1bmN0aW9uKHQsZSxyKXtvLm9rKHZvaWQgMCE9PXQpLG8ub2sodm9pZCAwIT09ZSksby5vayhyKSx0aGlzLl9idWYuY29weSh0aGlzLl9idWYsdCtyLHQsdCtlKSx0aGlzLl9vZmZzZXQrPXJ9LGkucHJvdG90eXBlLl9lbnN1cmU9ZnVuY3Rpb24odCl7aWYoby5vayh0KSx0aGlzLl9zaXplLXRoaXMuX29mZnNldDx0KXt2YXIgcj10aGlzLl9zaXplKnRoaXMuX29wdGlvbnMuZ3Jvd3RoRmFjdG9yO3ItdGhpcy5fb2Zmc2V0PHQmJihyKz10KTt2YXIgbj1uZXcgZShyKTt0aGlzLl9idWYuY29weShuLDAsMCx0aGlzLl9vZmZzZXQpLHRoaXMuX2J1Zj1uLHRoaXMuX3NpemU9cn19LHQuZXhwb3J0cz1pfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjU0KTt0LmV4cG9ydHM9e0JlcjpuLEJlclJlYWRlcjpuLlJlYWRlcixCZXJXcml0ZXI6bi5Xcml0ZXJ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDkzKSxhPXIoMTE0KSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtuKHRoaXMsdCksZT1lfHx7fSx0aGlzLmhhc2hBbGdvcml0aG09ZS5oYXNoQWxnb3JpdGhtfHxcInNoYTI1NlwiLHRoaXMuaGFzaExlbmd0aD1hLmdldExlbmd0aCh0aGlzLmhhc2hBbGdvcml0aG0pLHRoaXMuc2FsdExlbmd0aD10aGlzLmhhc2hMZW5ndGh9cmV0dXJuIGkodCxbe2tleTpcImdlbmVyYXRlXCIsdmFsdWU6ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49bmV3IGUociksaT1NYXRoLmNlaWwoci90aGlzLmhhc2hMZW5ndGgpLGE9MDthPGk7YSsrKXt2YXIgZj1uZXcgZSg0KTtmLndyaXRlSW50MzJCRShhLDApO3ZhciBzPW8uY3JlYXRlSGFzaCh0aGlzLmhhc2hBbGdvcml0aG0pLnVwZGF0ZSh0KS51cGRhdGUoZikuZGlnZXN0KCk7cy5jb3B5KG4sYSp0aGlzLmhhc2hMZW5ndGgpfXJldHVybiBufX1dKSx0fSgpO3QuZXhwb3J0cz1mfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cig5MyksYT1yKDI1OCksZj1yKDI2Nykscz1yKDExNCksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7bih0aGlzLHQpLGU9ZXx8e30sdGhpcy5oYXNoQWxnb3JpdGhtPWUuaGFzaEFsZ29yaXRobXx8XCJzaGEyNTZcIix0aGlzLmhhc2hMZW5ndGg9cy5nZXRMZW5ndGgodGhpcy5oYXNoQWxnb3JpdGhtKSx0aGlzLnNhbHRMZW5ndGg9dGhpcy5oYXNoTGVuZ3RofXJldHVybiBpKHQsW3trZXk6XCJlbmNvZGVcIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBuPU1hdGguY2VpbChyLzgpLGk9by5jcmVhdGVIYXNoKHRoaXMuaGFzaEFsZ29yaXRobSkudXBkYXRlKHQpLmRpZ2VzdCgpO2lmKG48dGhpcy5oYXNoTGVuZ3RoK3RoaXMuc2FsdExlbmd0aCsyKXRocm93IG5ldyBFcnJvcihcIkVuY29kaW5nIGVycm9yOiBSU0EgbW9kdWx1cyBpcyB0b28gc21hbGwgZm9yIFwiK3RoaXMuaGFzaEFsZ29yaXRobSk7dmFyIHM9by5yYW5kb21CeXRlcyh0aGlzLnNhbHRMZW5ndGgpLHU9by5jcmVhdGVIYXNoKHRoaXMuaGFzaEFsZ29yaXRobSkudXBkYXRlKG5ldyBlKDgpLmZpbGwoMCkpLnVwZGF0ZShpKS51cGRhdGUocykuZGlnZXN0KCksaD1lLmNvbmNhdChbbmV3IGUobi10aGlzLnNhbHRMZW5ndGgtdGhpcy5oYXNoTGVuZ3RoLTIpLmZpbGwoMCksbmV3IGUoWzFdKSxzXSksYz1uZXcgYSh7aGFzaEFsZ29yaXRobTp0aGlzLmhhc2hBbGdvcml0aG19KSxkPWMuZ2VuZXJhdGUodSxuLXRoaXMuaGFzaExlbmd0aC0xKSxsPWYoaCxkKTtyZXR1cm4gbFswXSY9MjU1Pj4+OCpuLXIsZS5jb25jYXQoW2wsdSxuZXcgZShbMTg4XSldKX19LHtrZXk6XCJ2ZXJpZnlcIix2YWx1ZTpmdW5jdGlvbih0LHIsbil7dmFyIGk9TWF0aC5jZWlsKG4vOCkscz1vLmNyZWF0ZUhhc2godGhpcy5oYXNoQWxnb3JpdGhtKS51cGRhdGUodCkuZGlnZXN0KCk7aWYoaTx0aGlzLmhhc2hMZW5ndGgrdGhpcy5zYWx0TGVuZ3RoKzIpcmV0dXJuITE7aWYoMTg4IT09cltyLmxlbmd0aC0xXSlyZXR1cm4hMTt2YXIgdT1pLXRoaXMuaGFzaExlbmd0aC0xLGg9ci5zbGljZSgwLHUpLGM9ci5zbGljZSh1LHUrdGhpcy5oYXNoTGVuZ3RoKSxkPTI1NT4+PjgqaS1uO2lmKGhbMF0mfmQpcmV0dXJuITE7dmFyIGw9bmV3IGEoe2hhc2hBbGdvcml0aG06dGhpcy5oYXNoQWxnb3JpdGhtfSkscD1sLmdlbmVyYXRlKGMsaS10aGlzLmhhc2hMZW5ndGgtMSksYj1mKGgscCk7YlswXSY9ZDtmb3IodmFyIHY9aS10aGlzLmhhc2hMZW5ndGgtdGhpcy5zYWx0TGVuZ3RoLTIseT0wO3k8djt5KyspaWYoMCE9PWJbeV0pcmV0dXJuITE7aWYoMSE9PWJbdl0pcmV0dXJuITE7dmFyIG09Yi5zbGljZShiLmxlbmd0aC10aGlzLnNhbHRMZW5ndGgpLGc9by5jcmVhdGVIYXNoKHRoaXMuaGFzaEFsZ29yaXRobSkudXBkYXRlKG5ldyBlKDgpLmZpbGwoMCkpLnVwZGF0ZShzKS51cGRhdGUobSkuZGlnZXN0KCk7cmV0dXJuIDA9PT1lLmNvbXBhcmUoYyxnKX19XSksdH0oKTt1LkVNUFRZX0JVRkZFUj1uZXcgZSgwKSx0LmV4cG9ydHM9dX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoOTMpLGE9cig0NjQpLGY9cigyNTkpLHM9cigxNjEpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe24odGhpcyx0KSxlPWV8fHt9LHRoaXMuaGFzaEFsZ29yaXRobT1lLmhhc2hBbGdvcml0aG18fFwic2hhMjU2XCIsdGhpcy5wc3M9bmV3IGYoe2hhc2hBbGdvcml0aG06dGhpcy5oYXNoQWxnb3JpdGhtfSl9cmV0dXJuIGkodCxbe2tleTpcInNpZ25cIix2YWx1ZTpmdW5jdGlvbihyLG4pe3ZhciBpPXMubW9kdWx1c0Zyb21Qcml2YXRlS2V5KHIpLGY9aVswXS50b1N0cmluZygyKS5sZW5ndGgsdT04KihpLmxlbmd0aC0xKStmLGg9dGhpcy5wc3MuZW5jb2RlKG4sdS0xKSxjPWgubGVuZ3RoPGkubGVuZ3RoP2UuY29uY2F0KFt0LlpFUk9fQllURSxoXSk6aDtyZXR1cm4gby5wcml2YXRlRW5jcnlwdCh7a2V5OnIscGFkZGluZzphLlJTQV9OT19QQURESU5HfSxjKX19LHtrZXk6XCJ2ZXJpZnlcIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG49cy5tb2R1bHVzVG9QZW0odCksaT1vLnB1YmxpY0RlY3J5cHQoe2tleTpuLHBhZGRpbmc6YS5SU0FfTk9fUEFERElOR30sciksZj10WzBdLnRvU3RyaW5nKDIpLmxlbmd0aCx1PTgqKHQubGVuZ3RoLTEpK2YsaD11JTg9PT0xP2kuc2xpY2UoMSk6aTtyZXR1cm4gdGhpcy5wc3MudmVyaWZ5KGUsaCx1LTEpfX1dKSx0fSgpO3UuWkVST19CWVRFPW5ldyBlKFswXSksdC5leHBvcnRzPXV9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDYyKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxmPXIoNDg4KSxzPXIoNjMpLHU9cig1MyksaD1yKDE2MCksYz12b2lkIDA7dHJ5e2M9cig0NjIpfWNhdGNoKHQpe312YXIgZD1mdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7bih0aGlzLHIpO3ZhciB0PWkodGhpcywoci5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHQucHVibGljS2V5PW51bGwsdC5zaWduYXR1cmU9bnVsbCx0fXJldHVybiBvKHIsdCksYShyLFt7a2V5Olwic2V0UHVibGljS2V5XCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlB1YmxpYyBrZXkgbXVzdCBiZSBhIEJ1ZmZlciwgd2FzOiBcIit0KTtpZigzMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlB1YmxpYyBrZXkgbXVzdCBiZSAzMiBieXRlcywgd2FzOiBcIit0Lmxlbmd0aCk7dGhpcy5wdWJsaWNLZXk9dH19LHtrZXk6XCJzZXRTaWduYXR1cmVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU2lnbmF0dXJlIG11c3QgYmUgYSBCdWZmZXIsIHdhczogXCIrdCk7aWYoNjQhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbXVzdCBiZSA2NCBieXRlcywgd2FzOiBcIit0Lmxlbmd0aCk7dGhpcy5zaWduYXR1cmU9dH19LHtrZXk6XCJzaWduXCIsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgdShcIk1lc3NhZ2UgbXVzdCBiZSBhIEJ1ZmZlclwiKTtpZighZS5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBrZXkgbXVzdCBiZSBhIEJ1ZmZlciwgd2FzOiBcIityKTtpZigzMiE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlByaXZhdGUga2V5IG11c3QgYmUgMzIgYnl0ZXMsIHdhczogXCIrci5sZW5ndGgpO2lmKGMpe3ZhciBuPWMuTWFrZUtleXBhaXIocik7dGhpcy5zZXRQdWJsaWNLZXkobi5wdWJsaWNLZXkpLHRoaXMuc2lnbmF0dXJlPWMuU2lnbih0LG4pfWVsc2V7dmFyIGk9Zi5zaWduLmtleVBhaXIuZnJvbVNlZWQocik7dGhpcy5zZXRQdWJsaWNLZXkobmV3IGUoaS5wdWJsaWNLZXkpKSx0aGlzLnNpZ25hdHVyZT1uZXcgZShmLnNpZ24uZGV0YWNoZWQodCxpLnNlY3JldEtleSkpfX19LHtrZXk6XCJnZW5lcmF0ZUhhc2hcIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnB1YmxpY0tleSl0aHJvdyBuZXcgdShcIlJlcXVpcmVzIGEgcHVibGljIGtleVwiKTtyZXR1cm4gdGhpcy5wdWJsaWNLZXl9fSx7a2V5OlwicGFyc2VQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZXRQdWJsaWNLZXkodC5yZWFkT2N0ZXRTdHJpbmcoci5QVUJLRVlfTEVOR1RIKSksdGhpcy5zZXRTaWduYXR1cmUodC5yZWFkT2N0ZXRTdHJpbmcoci5TSUdOQVRVUkVfTEVOR1RIKSl9fSx7a2V5Olwid3JpdGVQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dC53cml0ZU9jdGV0U3RyaW5nKHRoaXMucHVibGljS2V5LHIuUFVCS0VZX0xFTkdUSCksdC53cml0ZU9jdGV0U3RyaW5nKHRoaXMuc2lnbmF0dXJlLHIuU0lHTkFUVVJFX0xFTkdUSCl9fSx7a2V5OlwiY2FsY3VsYXRlTWF4RnVsZmlsbG1lbnRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiByLkZVTEZJTExNRU5UX0xFTkdUSH19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNZXNzYWdlIG11c3QgYmUgYSBCdWZmZXJcIik7dmFyIHI9dm9pZCAwO2lmKHI9Yz9jLlZlcmlmeSh0LHRoaXMuc2lnbmF0dXJlLHRoaXMucHVibGljS2V5KTpmLnNpZ24uZGV0YWNoZWQudmVyaWZ5KHQsdGhpcy5zaWduYXR1cmUsdGhpcy5wdWJsaWNLZXkpLHIhPT0hMCl0aHJvdyBuZXcgaChcIkludmFsaWQgZWQyNTUxOSBzaWduYXR1cmVcIik7cmV0dXJuITB9fV0pLHJ9KHMpO2QuVFlQRV9JRD00LGQuRkVBVFVSRV9CSVRNQVNLPTMyLGQuUFVCS0VZX0xFTkdUSD0zMixkLlNJR05BVFVSRV9MRU5HVEg9NjQsZC5GVUxGSUxMTUVOVF9MRU5HVEg9ZC5QVUJLRVlfTEVOR1RIK2QuU0lHTkFUVVJFX0xFTkdUSCx0LmV4cG9ydHM9ZH0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9ZnVuY3Rpb24gdChlLHIsbil7bnVsbD09PWUmJihlPUZ1bmN0aW9uLnByb3RvdHlwZSk7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpO2lmKHZvaWQgMD09PWkpe3ZhciBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PW8/dm9pZCAwOnQobyxyLG4pfWlmKFwidmFsdWVcImluIGkpcmV0dXJuIGkudmFsdWU7dmFyIGE9aS5nZXQ7aWYodm9pZCAwIT09YSlyZXR1cm4gYS5jYWxsKG4pfSxzPXIoNzUpLHU9cig2MyksaD1yKDc2KSxjPXIoOTApLGQ9cig1MyksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7bih0aGlzLHIpO3ZhciB0PWkodGhpcywoci5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHQuc3ViY29uZGl0aW9uPW51bGwsdH1yZXR1cm4gbyhyLHQpLGEocixbe2tleTpcInNldFN1YmNvbmRpdGlvblwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9cy5mcm9tVXJpKHQpO2Vsc2UgaWYoISh0IGluc3RhbmNlb2YgcykpdGhyb3cgbmV3IEVycm9yKFwiU3ViY29uZGl0aW9ucyBtdXN0IGJlIFVSSXMgb3Igb2JqZWN0cyBvZiB0eXBlIENvbmRpdGlvblwiKTt0aGlzLnN1YmNvbmRpdGlvbj10fX0se2tleTpcInNldFN1YmZ1bGZpbGxtZW50XCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdD11LmZyb21VcmkodCk7ZWxzZSBpZighKHQgaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJmdWxmaWxsbWVudHMgbXVzdCBiZSBvYmplY3RzIG9mIHR5cGUgRnVsZmlsbG1lbnRcIik7dGhpcy5zdWJjb25kaXRpb249dH19LHtrZXk6XCJzZXRQcmVmaXhcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJlZml4IG11c3QgYmUgYSBCdWZmZXIsIHdhczogXCIrdCk7dGhpcy5wcmVmaXg9dH19LHtrZXk6XCJnZXRCaXRtYXNrXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZihyLnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyLnByb3RvdHlwZSksXCJnZXRCaXRtYXNrXCIsdGhpcykuY2FsbCh0aGlzKXx0aGlzLnN1YmNvbmRpdGlvbi5nZXRCaXRtYXNrKCl9fSx7a2V5Olwid3JpdGVIYXNoUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnN1YmNvbmRpdGlvbil0aHJvdyBuZXcgZChcIlJlcXVpcmVzIHN1YmNvbmRpdGlvblwiKTt0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5wcmVmaXgpLHQud3JpdGUodGhpcy5zdWJjb25kaXRpb24gaW5zdGFuY2VvZiBzP3RoaXMuc3ViY29uZGl0aW9uLnNlcmlhbGl6ZUJpbmFyeSgpOnRoaXMuc3ViY29uZGl0aW9uLmdldENvbmRpdGlvbkJpbmFyeSgpKX19LHtrZXk6XCJjYWxjdWxhdGVNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJjb25kaXRpb24gaW5zdGFuY2VvZiBzP3RoaXMuc3ViY29uZGl0aW9uLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCk6dGhpcy5zdWJjb25kaXRpb24uZ2V0Q29uZGl0aW9uKCkuZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKSxlPW5ldyBjO3JldHVybiBlLndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5wcmVmaXgpLGUuc2tpcCh0KSxlLmdldFNpemUoKX19LHtrZXk6XCJwYXJzZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNldFByZWZpeCh0LnJlYWRWYXJPY3RldFN0cmluZygpKSx0aGlzLnNldFN1YmZ1bGZpbGxtZW50KHUuZnJvbUJpbmFyeSh0KSl9fSx7a2V5Olwid3JpdGVQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoISh0aGlzLnN1YmNvbmRpdGlvbiBpbnN0YW5jZW9mIHUpKXRocm93IG5ldyBFcnJvcihcIlN1YmNvbmRpdGlvbiBtdXN0IGJlIGZ1bGZpbGxlZFwiKTt0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5wcmVmaXgpLHQud3JpdGUodGhpcy5zdWJjb25kaXRpb24uc2VyaWFsaXplQmluYXJ5KCkpfX0se2tleTpcInZhbGlkYXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoISh0aGlzLnN1YmNvbmRpdGlvbiBpbnN0YW5jZW9mIHUpKXRocm93IG5ldyBFcnJvcihcIlN1YmNvbmRpdGlvbiBpcyBub3QgYSBmdWxmaWxsbWVudFwiKTtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgRXJyb3IoXCJNZXNzYWdlIG11c3QgYmUgcHJvdmlkZWQgYXMgYSBCdWZmZXIsIHdhczogXCIrdCk7cmV0dXJuIHRoaXMuc3ViY29uZGl0aW9uLnZhbGlkYXRlKGUuY29uY2F0KFt0aGlzLnByZWZpeCx0XSkpfX1dKSxyfShoKTtsLlRZUEVfSUQ9MSxsLkZFQVRVUkVfQklUTUFTSz01LGwucHJvdG90eXBlLnNldFN1YmNvbmRpdGlvblVyaT1sLnByb3RvdHlwZS5zZXRTdWJjb25kaXRpb24sbC5wcm90b3R5cGUuc2V0U3ViZnVsZmlsbG1lbnRVcmk9bC5wcm90b3R5cGUuc2V0U3ViZnVsZmlsbG1lbnQsdC5leHBvcnRzPWx9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxmPXIoNzYpLHM9cig1MyksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7cmV0dXJuIG4odGhpcyxyKSxpKHRoaXMsKHIuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YocikpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8ocix0KSxhKHIsW3trZXk6XCJ3cml0ZUhhc2hQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXRoaXMucHJlaW1hZ2UpdGhyb3cgbmV3IHMoXCJDb3VsZCBub3QgY2FsY3VsYXRlIGhhc2gsIG5vIHByZWltYWdlIHByb3ZpZGVkXCIpO3Qud3JpdGUodGhpcy5wcmVpbWFnZSl9fSx7a2V5Olwic2V0UHJlaW1hZ2VcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJlaW1hZ2UgbXVzdCBiZSBhIGJ1ZmZlciwgd2FzOiBcIit0KTt0aGlzLnByZWltYWdlPXR9fSx7a2V5OlwicGFyc2VQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLnNldFByZWltYWdlKHQucmVhZChlKSl9fSx7a2V5Olwid3JpdGVQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXRoaXMucHJlaW1hZ2UpdGhyb3cgbmV3IHMoXCJQcmVpbWFnZSBtdXN0IGJlIHNwZWNpZmllZFwiKTt0LndyaXRlKHRoaXMucHJlaW1hZ2UpfX0se2tleTpcInZhbGlkYXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuITB9fV0pLHJ9KGYpO3UuVFlQRV9JRD0wLHUuRkVBVFVSRV9CSVRNQVNLPTMsdC5leHBvcnRzPXV9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxmPXIoMjYwKSxzPXIoMTYxKSx1PXIoNzYpLGg9cig5MCksYz1yKDUzKSxkPXIoMTYwKSxsPW5ldyBmLHA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcigpe24odGhpcyxyKTt2YXIgdD1pKHRoaXMsKHIuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YocikpLmNhbGwodGhpcykpO3JldHVybiB0Lm1vZHVsdXM9bnVsbCx0LnNpZ25hdHVyZT1udWxsLHR9cmV0dXJuIG8ocix0KSxhKHIsW3trZXk6XCJ3cml0ZUNvbW1vbkhlYWRlclwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLm1vZHVsdXMpdGhyb3cgbmV3IGMoXCJSZXF1aXJlcyBhIHB1YmxpYyBtb2R1bHVzXCIpO3Qud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLm1vZHVsdXMpfX0se2tleTpcInNldFB1YmxpY01vZHVsdXNcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTW9kdWx1cyBtdXN0IGJlIGEgYnVmZmVyLCB3YXM6IFwiK3QpO2lmKDA9PT10WzBdKXRocm93IG5ldyBFcnJvcihcIk1vZHVsdXMgbWF5IG5vdCBjb250YWluIGxlYWRpbmcgemVyb3NcIik7aWYodC5sZW5ndGg+NTEyfHx0Lmxlbmd0aDwxMjgpdGhyb3cgbmV3IEVycm9yKFwiTW9kdWx1cyBtdXN0IGJlIGJldHdlZW4gMTI4IGJ5dGVzICgxMDE3IGJpdHMpIGFuZCA1MTIgYnl0ZXMgKDQwOTYgYml0cyksIHdhczogXCIrdC5sZW5ndGgrXCIgYnl0ZXNcIik7dGhpcy5tb2R1bHVzPXR9fSx7a2V5Olwic2V0U2lnbmF0dXJlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlNpZ25hdHVyZSBtdXN0IGJlIGEgYnVmZmVyLCB3YXM6IFwiK3QpO3RoaXMuc2lnbmF0dXJlPXR9fSx7a2V5Olwic2lnblwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5tb2R1bHVzfHx0aGlzLnNldFB1YmxpY01vZHVsdXMocy5tb2R1bHVzRnJvbVByaXZhdGVLZXkoZSkpLHRoaXMuc2lnbmF0dXJlPWwuc2lnbihlLHQpfX0se2tleTpcIndyaXRlSGFzaFBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLndyaXRlQ29tbW9uSGVhZGVyKHQpfX0se2tleTpcInBhcnNlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2V0UHVibGljTW9kdWx1cyh0LnJlYWRWYXJPY3RldFN0cmluZygpKSx0aGlzLnNldFNpZ25hdHVyZSh0LnJlYWRWYXJPY3RldFN0cmluZygpKX19LHtrZXk6XCJ3cml0ZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5zaWduYXR1cmUpdGhyb3cgbmV3IGMoXCJSZXF1aXJlcyBhIHNpZ25hdHVyZVwiKTt0aGlzLndyaXRlQ29tbW9uSGVhZGVyKHQpLHQud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLnNpZ25hdHVyZSl9fSx7a2V5OlwiY2FsY3VsYXRlTWF4RnVsZmlsbG1lbnRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBoO2lmKCF0aGlzLm1vZHVsdXMpdGhyb3cgbmV3IGMoXCJSZXF1aXJlcyBhIHB1YmxpYyBtb2R1bHVzXCIpO3JldHVybiB0aGlzLndyaXRlQ29tbW9uSGVhZGVyKHQpLHQud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLm1vZHVsdXMpLHQuZ2V0U2l6ZSgpfX0se2tleTpcInZhbGlkYXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IEVycm9yKFwiTWVzc2FnZSBtdXN0IGJlIHByb3ZpZGVkIGFzIGEgQnVmZmVyLCB3YXM6IFwiK3QpO3ZhciByPWwudmVyaWZ5KHRoaXMubW9kdWx1cyx0LHRoaXMuc2lnbmF0dXJlKTtpZighcil0aHJvdyBuZXcgZChcIkludmFsaWQgUlNBIHNpZ25hdHVyZVwiKTtyZXR1cm4hMH19XSkscn0odSk7cC5UWVBFX0lEPTMscC5GRUFUVVJFX0JJVE1BU0s9MTcsdC5leHBvcnRzPXB9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxmPWZ1bmN0aW9uIHQoZSxyLG4pe251bGw9PT1lJiYoZT1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKTtpZih2b2lkIDA9PT1pKXt2YXIgbz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT1vP3ZvaWQgMDp0KG8scixuKX1pZihcInZhbHVlXCJpbiBpKXJldHVybiBpLnZhbHVlO3ZhciBhPWkuZ2V0O2lmKHZvaWQgMCE9PWEpcmV0dXJuIGEuY2FsbChuKX0scz1yKDc1KSx1PXIoNjMpLGg9cig3NiksYz1yKDkwKSxkPXIoOTEpLGw9cig1MykscD1yKDExMyksYj1yKDE2Miksdj1uZXcgZSgwKSx5PVwiY29uZGl0aW9uXCIsbT1cImZ1bGZpbGxtZW50XCIsZz1mdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7bih0aGlzLHIpO3ZhciB0PWkodGhpcywoci5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHQudGhyZXNob2xkPW51bGwsdC5zdWJjb25kaXRpb25zPVtdLHR9cmV0dXJuIG8ocix0KSxhKHIsW3trZXk6XCJhZGRTdWJjb25kaXRpb25cIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9cy5mcm9tVXJpKHQpO2Vsc2UgaWYoISh0IGluc3RhbmNlb2YgcykpdGhyb3cgbmV3IEVycm9yKFwiU3ViY29uZGl0aW9ucyBtdXN0IGJlIFVSSXMgb3Igb2JqZWN0cyBvZiB0eXBlIENvbmRpdGlvblwiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZSllPTE7ZWxzZSBpZighYihlKXx8ZTwxKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIHdlaWdodCwgbm90IGFuIGludGVnZXI6IFwiK2UpO3RoaXMuc3ViY29uZGl0aW9ucy5wdXNoKHt0eXBlOnksYm9keTp0LHdlaWdodDplfSl9fSx7a2V5OlwiYWRkU3ViZnVsZmlsbG1lbnRcIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9dS5mcm9tVXJpKHQpO2Vsc2UgaWYoISh0IGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IEVycm9yKFwiU3ViZnVsZmlsbG1lbnRzIG11c3QgYmUgVVJJcyBvciBvYmplY3RzIG9mIHR5cGUgRnVsZmlsbG1lbnRcIik7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGUpZT0xO2Vsc2UgaWYoIWIoZSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB3ZWlnaHQsIG5vdCBhbiBpbnRlZ2VyOiBcIitlKTt0aGlzLnN1YmNvbmRpdGlvbnMucHVzaCh7dHlwZTptLGJvZHk6dCx3ZWlnaHQ6ZX0pfX0se2tleTpcInNldFRocmVzaG9sZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFiKHQpfHx0PDEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRocmVzaG9sZCBtdXN0IGJlIGEgaW50ZWdlciBncmVhdGVyIHRoYW4gemVybywgd2FzOiBcIit0KTt0aGlzLnRocmVzaG9sZD10fX0se2tleTpcImdldEJpdG1hc2tcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWYoci5wcm90b3R5cGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2Yoci5wcm90b3R5cGUpLFwiZ2V0Qml0bWFza1wiLHRoaXMpLmNhbGwodGhpcyksZT0hMCxuPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8sYT10aGlzLnN1YmNvbmRpdGlvbnNbU3ltYm9sLml0ZXJhdG9yXSgpOyEoZT0obz1hLm5leHQoKSkuZG9uZSk7ZT0hMCl7dmFyIHM9by52YWx1ZTt0fD1zLmJvZHkuZ2V0Qml0bWFzaygpfX1jYXRjaCh0KXtuPSEwLGk9dH1maW5hbGx5e3RyeXshZSYmYS5yZXR1cm4mJmEucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fXJldHVybiB0fX0se2tleTpcIndyaXRlSGFzaFBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5zdWJjb25kaXRpb25zLmxlbmd0aCl0aHJvdyBuZXcgbChcIlJlcXVpcmVzIHN1YmNvbmRpdGlvbnNcIik7dmFyIGU9dGhpcy5zdWJjb25kaXRpb25zLm1hcChmdW5jdGlvbih0KXt2YXIgZT1uZXcgZDtyZXR1cm4gZS53cml0ZVZhclVJbnQodC53ZWlnaHQpLGUud3JpdGUodC50eXBlPT09bT90LmJvZHkuZ2V0Q29uZGl0aW9uQmluYXJ5KCk6dC5ib2R5LnNlcmlhbGl6ZUJpbmFyeSgpKSxlLmdldEJ1ZmZlcigpfSkscj10aGlzLmNvbnN0cnVjdG9yLnNvcnRCdWZmZXJzKGUpO3Qud3JpdGVVSW50MzIodGhpcy50aHJlc2hvbGQpLHQud3JpdGVWYXJVSW50KHIubGVuZ3RoKSxyLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQud3JpdGUoZSl9KX19LHtrZXk6XCJjYWxjdWxhdGVNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPTAscj10aGlzLnN1YmNvbmRpdGlvbnMubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPXQuY29uc3RydWN0b3IucHJlZGljdFN1YmNvbmRpdGlvbkxlbmd0aChyKSxpPXQuY29uc3RydWN0b3IucHJlZGljdFN1YmZ1bGZpbGxtZW50TGVuZ3RoKHIpO3JldHVybiBlKz1uLHt3ZWlnaHQ6ci53ZWlnaHQsc2l6ZTppLW59fSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlaWdodC10LndlaWdodH0pLG49ZSt0aGlzLmNvbnN0cnVjdG9yLmNhbGN1bGF0ZVdvcnN0Q2FzZUxlbmd0aCh0aGlzLnRocmVzaG9sZCxyKTtpZihuPT09LSgxLzApKXRocm93IG5ldyBsKFwiSW5zdWZmaWNpZW50IHN1YmNvbmRpdGlvbnMvd2VpZ2h0cyB0byBtZWV0IHRoZSB0aHJlc2hvbGRcIik7dmFyIGk9bmV3IGM7cmV0dXJuIGkud3JpdGVVSW50MzIodGhpcy50aHJlc2hvbGQpLGkud3JpdGVWYXJVSW50KHRoaXMuc3ViY29uZGl0aW9ucy5sZW5ndGgpLHRoaXMuc3ViY29uZGl0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2kud3JpdGVVSW50OCgpLDEhPT10LndlaWdodCYmaS53cml0ZVVJbnQzMih0LndlaWdodCl9KSxpLnNraXAobiksaS5nZXRTaXplKCl9fSx7a2V5OlwicGFyc2VQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZXRUaHJlc2hvbGQodC5yZWFkVmFyVUludCgpKTtmb3IodmFyIGU9dC5yZWFkVmFyVUludCgpLHI9MDtyPGU7cisrKXt2YXIgbj10LnJlYWRWYXJVSW50KCksaT10LnJlYWRWYXJPY3RldFN0cmluZygpLG89dC5yZWFkVmFyT2N0ZXRTdHJpbmcoKTtpZihpLmxlbmd0aCYmby5sZW5ndGgpdGhyb3cgbmV3IHAoXCJTdWJjb25kaXRpb25zIG1heSBub3QgcHJvdmlkZSBib3RoIHN1YmNvbmRpdGlvbiBhbmQgZnVsZmlsbG1lbnQuXCIpO2lmKGkubGVuZ3RoKXRoaXMuYWRkU3ViZnVsZmlsbG1lbnQodS5mcm9tQmluYXJ5KGkpLG4pO2Vsc2V7aWYoIW8ubGVuZ3RoKXRocm93IG5ldyBwKFwiU3ViY29uZGl0aW9ucyBtdXN0IHByb3ZpZGUgZWl0aGVyIHN1YmNvbmRpdGlvbiBvciBmdWxmaWxsbWVudC5cIik7dGhpcy5hZGRTdWJjb25kaXRpb24ocy5mcm9tQmluYXJ5KG8pLG4pfX19fSx7a2V5Olwid3JpdGVQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJjb25kaXRpb25zLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR5cGU9PT1tP09iamVjdC5hc3NpZ24oe30sdCx7aW5kZXg6ZSxzaXplOnQuYm9keS5zZXJpYWxpemVCaW5hcnkoKS5sZW5ndGgsb21pdFNpemU6dC5ib2R5LmdldENvbmRpdGlvbkJpbmFyeSgpLmxlbmd0aH0pOm51bGx9KS5maWx0ZXIoQm9vbGVhbikscj10aGlzLmNvbnN0cnVjdG9yLmNhbGN1bGF0ZVNtYWxsZXN0VmFsaWRGdWxmaWxsbWVudFNldCh0aGlzLnRocmVzaG9sZCxlKS5zZXQsbj10aGlzLnN1YmNvbmRpdGlvbnMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHlwZT09PW0mJnIuaW5kZXhPZihlKT09PS0xP09iamVjdC5hc3NpZ24oe30sdCx7dHlwZTp5LGJvZHk6dC5ib2R5LmdldENvbmRpdGlvbigpfSk6dH0pLGk9bi5tYXAoZnVuY3Rpb24odCl7dmFyIGU9bmV3IGQ7cmV0dXJuIGUud3JpdGVWYXJVSW50KHQud2VpZ2h0KSxlLndyaXRlVmFyT2N0ZXRTdHJpbmcodC50eXBlPT09bT90LmJvZHkuc2VyaWFsaXplQmluYXJ5KCk6diksZS53cml0ZVZhck9jdGV0U3RyaW5nKHQudHlwZT09PXk/dC5ib2R5LnNlcmlhbGl6ZUJpbmFyeSgpOnYpLGUuZ2V0QnVmZmVyKCl9KSxvPXRoaXMuY29uc3RydWN0b3Iuc29ydEJ1ZmZlcnMoaSk7dC53cml0ZVZhclVJbnQodGhpcy50aHJlc2hvbGQpLHQud3JpdGVWYXJVSW50KG8ubGVuZ3RoKSxvLmZvckVhY2godC53cml0ZS5iaW5kKHQpKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3ViY29uZGl0aW9ucy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PW19KSxyPTEvMCxuPWUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHI9TWF0aC5taW4ocixlLndlaWdodCksdCtlLndlaWdodH0sMCk7aWYobjx0aGlzLnRocmVzaG9sZCl0aHJvdyBuZXcgRXJyb3IoXCJUaHJlc2hvbGQgbm90IG1ldFwiKTtpZih0aGlzLnRocmVzaG9sZCtyPD1uKXRocm93IG5ldyBFcnJvcihcIkZ1bGZpbGxtZW50IGlzIG5vdCBtaW5pbWFsXCIpO3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlLmJvZHkudmFsaWRhdGUodCl9KX19XSxbe2tleTpcInByZWRpY3RTdWJjb25kaXRpb25MZW5ndGhcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09bT90LmJvZHkuZ2V0Q29uZGl0aW9uQmluYXJ5KCkubGVuZ3RoOnQuYm9keS5zZXJpYWxpemVCaW5hcnkoKS5sZW5ndGh9fSx7a2V5OlwicHJlZGljdFN1YmZ1bGZpbGxtZW50TGVuZ3RoXCIsXG52YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnR5cGU9PT1tP3QuYm9keS5nZXRDb25kaXRpb24oKS5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpOnQuYm9keS5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpLHI9bmV3IGM7cmV0dXJuIHIud3JpdGVVSW50MTYoKSxyLndyaXRlVmFyT2N0ZXRTdHJpbmcoe2xlbmd0aDplfSksci5nZXRTaXplKCl9fSx7a2V5OlwiY2FsY3VsYXRlV29yc3RDYXNlTGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe2lmKHI9cnx8MCx0PD0wKXJldHVybiAwO2lmKHI8ZS5sZW5ndGgpe3ZhciBuPWVbcl07cmV0dXJuIE1hdGgubWF4KG4uc2l6ZSt0aGlzLmNhbGN1bGF0ZVdvcnN0Q2FzZUxlbmd0aCh0LW4ud2VpZ2h0LGUscisxKSx0aGlzLmNhbGN1bGF0ZVdvcnN0Q2FzZUxlbmd0aCh0LGUscisxKSl9cmV0dXJuLSgxLzApfX0se2tleTpcImNhbGN1bGF0ZVNtYWxsZXN0VmFsaWRGdWxmaWxsbWVudFNldFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtpZihyPXJ8fHtpbmRleDowLHNpemU6MCxzZXQ6W119LHQ8PTApcmV0dXJue3NpemU6ci5zaXplLHNldDpyLnNldH07aWYoci5pbmRleDxlLmxlbmd0aCl7dmFyIG49ZVtyLmluZGV4XSxpPXRoaXMuY2FsY3VsYXRlU21hbGxlc3RWYWxpZEZ1bGZpbGxtZW50U2V0KHQtbi53ZWlnaHQsZSx7c2l6ZTpyLnNpemUrbi5zaXplLGluZGV4OnIuaW5kZXgrMSxzZXQ6ci5zZXQuY29uY2F0KG4uaW5kZXgpfSksbz10aGlzLmNhbGN1bGF0ZVNtYWxsZXN0VmFsaWRGdWxmaWxsbWVudFNldCh0LGUse3NpemU6ci5zaXplK24ub21pdFNpemUsaW5kZXg6ci5pbmRleCsxLHNldDpyLnNldH0pO3JldHVybiBpLnNpemU8by5zaXplP2k6b31yZXR1cm57c2l6ZToxLzB9fX0se2tleTpcInNvcnRCdWZmZXJzXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIHQubGVuZ3RoIT09ci5sZW5ndGg/dC5sZW5ndGgtci5sZW5ndGg6ZS5jb21wYXJlKHQscil9KX19XSkscn0oaCk7Zy5UWVBFX0lEPTIsZy5GRUFUVVJFX0JJVE1BU0s9OSxnLnByb3RvdHlwZS5hZGRTdWJjb25kaXRpb25Vcmk9Zy5wcm90b3R5cGUuYWRkU3ViY29uZGl0aW9uLGcucHJvdG90eXBlLmFkZFN1YmZ1bGZpbGxtZW50VXJpPWcucHJvdG90eXBlLmFkZFN1YmZ1bGZpbGxtZW50LHQuZXhwb3J0cz1nfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscil7aWYoIWUuaXNCdWZmZXIodCl8fCFlLmlzQnVmZmVyKHIpKXRocm93IG5ldyBFcnJvcihcIkFyZ3VtZW50cyBtdXN0IGJlIGJ1ZmZlcnNcIik7aWYodC5sZW5ndGghPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJCdWZmZXJzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoXCIpO2Zvcih2YXIgbj1uZXcgZSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7aSsrKW5baV09dFtpXV5yW2ldO3JldHVybiBufXQuZXhwb3J0cz1yfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLHIpeyFmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBpPU9iamVjdC5jcmVhdGUoKGV8fG8pLnByb3RvdHlwZSksYT1uZXcgcChufHxbXSk7cmV0dXJuIGkuX2ludm9rZT1jKHQscixhKSxpfWZ1bmN0aW9uIGkodCxlLHIpe3RyeXtyZXR1cm57dHlwZTpcIm5vcm1hbFwiLGFyZzp0LmNhbGwoZSxyKX19Y2F0Y2godCl7cmV0dXJue3R5cGU6XCJ0aHJvd1wiLGFyZzp0fX19ZnVuY3Rpb24gbygpe31mdW5jdGlvbiBhKCl7fWZ1bmN0aW9uIGYoKXt9ZnVuY3Rpb24gcyh0KXtbXCJuZXh0XCIsXCJ0aHJvd1wiLFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9fSl9ZnVuY3Rpb24gdSh0KXt0aGlzLmFyZz10fWZ1bmN0aW9uIGgodCl7ZnVuY3Rpb24gZShyLG4sbyxhKXt2YXIgZj1pKHRbcl0sdCxuKTtpZihcInRocm93XCIhPT1mLnR5cGUpe3ZhciBzPWYuYXJnLGg9cy52YWx1ZTtyZXR1cm4gaCBpbnN0YW5jZW9mIHU/UHJvbWlzZS5yZXNvbHZlKGguYXJnKS50aGVuKGZ1bmN0aW9uKHQpe2UoXCJuZXh0XCIsdCxvLGEpfSxmdW5jdGlvbih0KXtlKFwidGhyb3dcIix0LG8sYSl9KTpQcm9taXNlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbih0KXtzLnZhbHVlPXQsbyhzKX0sYSl9YShmLmFyZyl9ZnVuY3Rpb24gbih0LHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXtlKHQscixuLGkpfSl9cmV0dXJuIG89bz9vLnRoZW4obixuKTpuKCl9XCJvYmplY3RcIj09dHlwZW9mIHImJnIuZG9tYWluJiYoZT1yLmRvbWFpbi5iaW5kKGUpKTt2YXIgbzt0aGlzLl9pbnZva2U9bn1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1FO3JldHVybiBmdW5jdGlvbihvLGEpe2lmKG49PT1rKXRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7aWYobj09PXgpe2lmKFwidGhyb3dcIj09PW8pdGhyb3cgYTtyZXR1cm4gdigpfWZvcig7Oyl7dmFyIGY9ci5kZWxlZ2F0ZTtpZihmKXtpZihcInJldHVyblwiPT09b3x8XCJ0aHJvd1wiPT09byYmZi5pdGVyYXRvcltvXT09PXkpe3IuZGVsZWdhdGU9bnVsbDt2YXIgcz1mLml0ZXJhdG9yLnJldHVybjtpZihzKXt2YXIgdT1pKHMsZi5pdGVyYXRvcixhKTtpZihcInRocm93XCI9PT11LnR5cGUpe289XCJ0aHJvd1wiLGE9dS5hcmc7Y29udGludWV9fWlmKFwicmV0dXJuXCI9PT1vKWNvbnRpbnVlfXZhciB1PWkoZi5pdGVyYXRvcltvXSxmLml0ZXJhdG9yLGEpO2lmKFwidGhyb3dcIj09PXUudHlwZSl7ci5kZWxlZ2F0ZT1udWxsLG89XCJ0aHJvd1wiLGE9dS5hcmc7Y29udGludWV9bz1cIm5leHRcIixhPXk7dmFyIGg9dS5hcmc7aWYoIWguZG9uZSlyZXR1cm4gbj1BLGg7cltmLnJlc3VsdE5hbWVdPWgudmFsdWUsci5uZXh0PWYubmV4dExvYyxyLmRlbGVnYXRlPW51bGx9aWYoXCJuZXh0XCI9PT1vKXIuc2VudD1yLl9zZW50PWE7ZWxzZSBpZihcInRocm93XCI9PT1vKXtpZihuPT09RSl0aHJvdyBuPXgsYTtyLmRpc3BhdGNoRXhjZXB0aW9uKGEpJiYobz1cIm5leHRcIixhPXkpfWVsc2VcInJldHVyblwiPT09byYmci5hYnJ1cHQoXCJyZXR1cm5cIixhKTtuPWs7dmFyIHU9aSh0LGUscik7aWYoXCJub3JtYWxcIj09PXUudHlwZSl7bj1yLmRvbmU/eDpBO3ZhciBoPXt2YWx1ZTp1LmFyZyxkb25lOnIuZG9uZX07aWYodS5hcmchPT1JKXJldHVybiBoO3IuZGVsZWdhdGUmJlwibmV4dFwiPT09byYmKGE9eSl9ZWxzZVwidGhyb3dcIj09PXUudHlwZSYmKG49eCxvPVwidGhyb3dcIixhPXUuYXJnKX19fWZ1bmN0aW9uIGQodCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT1cIm5vcm1hbFwiLGRlbGV0ZSBlLmFyZyx0LmNvbXBsZXRpb249ZX1mdW5jdGlvbiBwKHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzpcInJvb3RcIn1dLHQuZm9yRWFjaChkLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIGIodCl7aWYodCl7dmFyIGU9dFt3XTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciByPS0xLG49ZnVuY3Rpb24gZSgpe2Zvcig7KytyPHQubGVuZ3RoOylpZihtLmNhbGwodCxyKSlyZXR1cm4gZS52YWx1ZT10W3JdLGUuZG9uZT0hMSxlO3JldHVybiBlLnZhbHVlPXksZS5kb25lPSEwLGV9O3JldHVybiBuLm5leHQ9bn19cmV0dXJue25leHQ6dn19ZnVuY3Rpb24gdigpe3JldHVybnt2YWx1ZTp5LGRvbmU6ITB9fXZhciB5LG09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxnPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sdz1nLml0ZXJhdG9yfHxcIkBAaXRlcmF0b3JcIixfPWcudG9TdHJpbmdUYWd8fFwiQEB0b1N0cmluZ1RhZ1wiLE09XCJvYmplY3RcIj09dHlwZW9mIHQsUz1lLnJlZ2VuZXJhdG9yUnVudGltZTtpZihTKXJldHVybiB2b2lkKE0mJih0LmV4cG9ydHM9UykpO1M9ZS5yZWdlbmVyYXRvclJ1bnRpbWU9TT90LmV4cG9ydHM6e30sUy53cmFwPW47dmFyIEU9XCJzdXNwZW5kZWRTdGFydFwiLEE9XCJzdXNwZW5kZWRZaWVsZFwiLGs9XCJleGVjdXRpbmdcIix4PVwiY29tcGxldGVkXCIsST17fSxCPWYucHJvdG90eXBlPW8ucHJvdG90eXBlO2EucHJvdG90eXBlPUIuY29uc3RydWN0b3I9ZixmLmNvbnN0cnVjdG9yPWEsZltfXT1hLmRpc3BsYXlOYW1lPVwiR2VuZXJhdG9yRnVuY3Rpb25cIixTLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09YXx8XCJHZW5lcmF0b3JGdW5jdGlvblwiPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSxTLm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxmKToodC5fX3Byb3RvX189ZixfIGluIHR8fCh0W19dPVwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQiksdH0sUy5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHUodCl9LHMoaC5wcm90b3R5cGUpLFMuYXN5bmM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG89bmV3IGgobih0LGUscixpKSk7cmV0dXJuIFMuaXNHZW5lcmF0b3JGdW5jdGlvbihlKT9vOm8ubmV4dCgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOm8ubmV4dCgpfSl9LHMoQiksQlt3XT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxCW19dPVwiR2VuZXJhdG9yXCIsQi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBHZW5lcmF0b3JdXCJ9LFMua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGUucmV2ZXJzZSgpLGZ1bmN0aW9uIHIoKXtmb3IoO2UubGVuZ3RoOyl7dmFyIG49ZS5wb3AoKTtpZihuIGluIHQpcmV0dXJuIHIudmFsdWU9bixyLmRvbmU9ITEscn1yZXR1cm4gci5kb25lPSEwLHJ9fSxTLnZhbHVlcz1iLHAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXksdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChsKSwhdClmb3IodmFyIGUgaW4gdGhpcylcInRcIj09PWUuY2hhckF0KDApJiZtLmNhbGwodGhpcyxlKSYmIWlzTmFOKCtlLnNsaWNlKDEpKSYmKHRoaXNbZV09eSl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLGU9dC5jb21wbGV0aW9uO2lmKFwidGhyb3dcIj09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIG8udHlwZT1cInRocm93XCIsby5hcmc9dCxyLm5leHQ9ZSwhIW59aWYodGhpcy5kb25lKXRocm93IHQ7Zm9yKHZhciByPXRoaXMsbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXSxvPWkuY29tcGxldGlvbjtpZihcInJvb3RcIj09PWkudHJ5TG9jKXJldHVybiBlKFwiZW5kXCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBhPW0uY2FsbChpLFwiY2F0Y2hMb2NcIiksZj1tLmNhbGwoaSxcImZpbmFsbHlMb2NcIik7aWYoYSYmZil7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIGUoaS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gZShpLmZpbmFsbHlMb2MpfWVsc2UgaWYoYSl7aWYodGhpcy5wcmV2PGkuY2F0Y2hMb2MpcmV0dXJuIGUoaS5jYXRjaExvYywhMCl9ZWxzZXtpZighZil0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBlKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7cj49MDstLXIpe3ZhciBuPXRoaXMudHJ5RW50cmllc1tyXTtpZihuLnRyeUxvYzw9dGhpcy5wcmV2JiZtLmNhbGwobixcImZpbmFsbHlMb2NcIikmJnRoaXMucHJldjxuLmZpbmFsbHlMb2Mpe3ZhciBpPW47YnJlYWt9fWkmJihcImJyZWFrXCI9PT10fHxcImNvbnRpbnVlXCI9PT10KSYmaS50cnlMb2M8PWUmJmU8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT10LG8uYXJnPWUsaT90aGlzLm5leHQ9aS5maW5hbGx5TG9jOnRoaXMuY29tcGxldGUobyksSX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZihcInRocm93XCI9PT10LnR5cGUpdGhyb3cgdC5hcmc7XCJicmVha1wiPT09dC50eXBlfHxcImNvbnRpbnVlXCI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOlwicmV0dXJuXCI9PT10LnR5cGU/KHRoaXMucnZhbD10LmFyZyx0aGlzLm5leHQ9XCJlbmRcIik6XCJub3JtYWxcIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKX0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxsKHIpLEl9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci50cnlMb2M9PT10KXt2YXIgbj1yLmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09bi50eXBlKXt2YXIgaT1uLmFyZztsKHIpfXJldHVybiBpfX10aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpiKHQpLHJlc3VsdE5hbWU6ZSxuZXh0TG9jOnJ9LEl9fX0oXCJvYmplY3RcIj09dHlwZW9mIGU/ZTpcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpfSkuY2FsbChlLHIoMzkpLHIoMjYpKX0sZnVuY3Rpb24odCxlLHIpe3IoMjkwKSx0LmV4cG9ydHM9cigzMikuUmVnRXhwLmVzY2FwZX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG4odCksdm9pZCAwPT09ZSlyZXR1cm4gdDtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5jYWxsKGUscil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdC5jYWxsKGUscixuKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihyLG4saSl7cmV0dXJuIHQuY2FsbChlLHIsbixpKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDc3KSxpPXIoMTY1KS5kb2N1bWVudCxvPW4oaSkmJm4oaS5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG8/aS5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTY1KSxpPXIoMTYzKSxvPXIoMjcyKSxhPXIoMjc1KSxmPVwicHJvdG90eXBlXCIscz1mdW5jdGlvbih0LGUscil7dmFyIHUsaCxjLGQ9dCZzLkYsbD10JnMuRyxwPXQmcy5TLGI9dCZzLlAsdj10JnMuQix5PXQmcy5XLG09bD9pOmlbZV18fChpW2VdPXt9KSxnPW1bZl0sdz1sP246cD9uW2VdOihuW2VdfHx7fSlbZl07bCYmKHI9ZSk7Zm9yKHUgaW4gciloPSFkJiZ3JiZ2b2lkIDAhPT13W3VdLGgmJnUgaW4gbXx8KGM9aD93W3VdOnJbdV0sbVt1XT1sJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB3W3VdP3JbdV06diYmaD9vKGMsbik6eSYmd1t1XT09Yz9mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihlLHIsbil7aWYodGhpcyBpbnN0YW5jZW9mIHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQoZSk7Y2FzZSAyOnJldHVybiBuZXcgdChlLHIpfXJldHVybiBuZXcgdChlLHIsbil9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gZVtmXT10W2ZdLGV9KGMpOmImJlwiZnVuY3Rpb25cIj09dHlwZW9mIGM/byhGdW5jdGlvbi5jYWxsLGMpOmMsYiYmKChtLnZpcnR1YWx8fChtLnZpcnR1YWw9e30pKVt1XT1jLHQmcy5SJiZnJiYhZ1t1XSYmYShnLHUsYykpKX07cy5GPTEscy5HPTIscy5TPTQscy5QPTgscy5CPTE2LHMuVz0zMixzLlU9NjQscy5SPTEyOCx0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjc4KSxpPXIoMjc5KTt0LmV4cG9ydHM9cigxMTcpP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbi5mKHQsZSxpKDEscikpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cix0fX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz0hcigxMTcpJiYhcigxNjQpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyKDI3MykoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNzcpLGk9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIW4odCkmJmlzRmluaXRlKHQpJiZpKHQpPT09dH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI3MSksaT1yKDI3Niksbz1yKDI4MCksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5mPXIoMTE3KT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLHIpe2lmKG4odCksZT1vKGUsITApLG4ociksaSl0cnl7cmV0dXJuIGEodCxlLHIpfWNhdGNoKHQpe31pZihcImdldFwiaW4gcnx8XCJzZXRcImluIHIpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIHImJih0W2VdPXIudmFsdWUpLHR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDc3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighbih0KSlyZXR1cm4gdDt2YXIgcixpO2lmKGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudmFsdWVPZikmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTtpZighZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI3NCk7bihuLlMsXCJOdW1iZXJcIix7aXNJbnRlZ2VyOnIoMjc3KX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMTI2KSxvPXIoNykoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gaSh0KSYmKGU9dC5jb25zdHJ1Y3RvcixcImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxlIT09QXJyYXkmJiFpKGUucHJvdG90eXBlKXx8KGU9dm9pZCAwKSxuKGUpJiYoZT1lW29dLG51bGw9PT1lJiYoZT12b2lkIDApKSksdm9pZCAwPT09ZT9BcnJheTplfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjgyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3KG4odCkpKGUpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMyksaT1yKDI5KSxvPVwibnVtYmVyXCI7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCIhPT10JiZ0IT09byYmXCJkZWZhdWx0XCIhPT10KXRocm93IFR5cGVFcnJvcihcIkluY29ycmVjdCBoaW50XCIpO3JldHVybiBpKG4odGhpcyksdCE9byl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0NCksaT1yKDg2KSxvPXIoNjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpLHI9aS5mO2lmKHIpZm9yKHZhciBhLGY9cih0KSxzPW8uZix1PTA7Zi5sZW5ndGg+dTspcy5jYWxsKHQsYT1mW3UrK10pJiZlLnB1c2goYSk7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0NCksaT1yKDE3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbz1pKHQpLGE9bihvKSxmPWEubGVuZ3RoLHM9MDtmPnM7KWlmKG9bcj1hW3MrK11dPT09ZSlyZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDI4OCksaT1yKDgyKSxvPXIoMTMpO3QuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD1vKHRoaXMpLGU9YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KGUpLGE9MCxmPW4uXyxzPSExO2U+YTspKHJbYV09YXJndW1lbnRzW2ErK10pPT09ZiYmKHM9ITApO3JldHVybiBmdW5jdGlvbigpe3ZhciBuLG89dGhpcyxhPWFyZ3VtZW50cy5sZW5ndGgsdT0wLGg9MDtpZighcyYmIWEpcmV0dXJuIGkodCxyLG8pO2lmKG49ci5zbGljZSgpLHMpZm9yKDtlPnU7dSsrKW5bdV09PT1mJiYoblt1XT1hcmd1bWVudHNbaCsrXSk7Zm9yKDthPmg7KW4ucHVzaChhcmd1bWVudHNbaCsrXSk7cmV0dXJuIGkodCxuLG8pfX19LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cig0KX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lPT09T2JqZWN0KGUpP2Z1bmN0aW9uKHQpe3JldHVybiBlW3RdfTplO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UodCxyKX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMjg5KSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csXCJcXFxcJCZcIik7bihuLlMsXCJSZWdFeHBcIix7ZXNjYXBlOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUCxcIkFycmF5XCIse2NvcHlXaXRoaW46cigxNjcpfSkscig1NCkoXCJjb3B5V2l0aGluXCIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDQpO24obi5QK24uRiohcigyNSkoW10uZXZlcnksITApLFwiQXJyYXlcIix7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5QLFwiQXJyYXlcIix7ZmlsbDpyKDExOCl9KSxyKDU0KShcImZpbGxcIil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoMik7bihuLlArbi5GKiFyKDI1KShbXS5maWx0ZXIsITApLFwiQXJyYXlcIix7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDYpLG89XCJmaW5kSW5kZXhcIixhPSEwO28gaW5bXSYmQXJyYXkoMSlbb10oZnVuY3Rpb24oKXthPSExfSksbihuLlArbi5GKmEsXCJBcnJheVwiLHtmaW5kSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxyKDU0KShvKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSg1KSxvPVwiZmluZFwiLGE9ITA7byBpbltdJiZBcnJheSgxKVtvXShmdW5jdGlvbigpe2E9ITF9KSxuKG4uUCtuLkYqYSxcIkFycmF5XCIse2ZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxyKDU0KShvKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSgwKSxvPXIoMjUpKFtdLmZvckVhY2gsITApO24obi5QK24uRiohbyxcIkFycmF5XCIse2ZvckVhY2g6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDMzKSxpPXIoMCksbz1yKDExKSxhPXIoMTc2KSxmPXIoMTI1KSxzPXIoMTApLHU9cigxMTkpLGg9cigxNDIpO2koaS5TK2kuRiohcig4NCkoZnVuY3Rpb24odCl7QXJyYXkuZnJvbSh0KX0pLFwiQXJyYXlcIix7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZSxyLGksYyxkPW8odCksbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkscD1hcmd1bWVudHMubGVuZ3RoLGI9cD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdj12b2lkIDAhPT1iLHk9MCxtPWgoZCk7aWYodiYmKGI9bihiLHA+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSx2b2lkIDA9PW18fGw9PUFycmF5JiZmKG0pKWZvcihlPXMoZC5sZW5ndGgpLHI9bmV3IGwoZSk7ZT55O3krKyl1KHIseSx2P2IoZFt5XSx5KTpkW3ldKTtlbHNlIGZvcihjPW0uY2FsbChkKSxyPW5ldyBsOyEoaT1jLm5leHQoKSkuZG9uZTt5KyspdShyLHksdj9hKGMsYixbaS52YWx1ZSx5XSwhMCk6aS52YWx1ZSk7cmV0dXJuIHIubGVuZ3RoPXkscn19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDc4KSghMSksbz1bXS5pbmRleE9mLGE9ISFvJiYxL1sxXS5pbmRleE9mKDEsLTApPDA7bihuLlArbi5GKihhfHwhcigyNSkobykpLFwiQXJyYXlcIix7aW5kZXhPZjpmdW5jdGlvbih0KXtyZXR1cm4gYT9vLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDppKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIkFycmF5XCIse2lzQXJyYXk6cigxMjYpfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxNyksbz1bXS5qb2luO24obi5QK24uRioocig2NSkhPU9iamVjdHx8IXIoMjUpKG8pKSxcIkFycmF5XCIse2pvaW46ZnVuY3Rpb24odCl7cmV0dXJuIG8uY2FsbChpKHRoaXMpLHZvaWQgMD09PXQ/XCIsXCI6dCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxNyksbz1yKDM4KSxhPXIoMTApLGY9W10ubGFzdEluZGV4T2Yscz0hIWYmJjEvWzFdLmxhc3RJbmRleE9mKDEsLTApPDA7bihuLlArbi5GKihzfHwhcigyNSkoZikpLFwiQXJyYXlcIix7bGFzdEluZGV4T2Y6ZnVuY3Rpb24odCl7aWYocylyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIGU9aSh0aGlzKSxyPWEoZS5sZW5ndGgpLG49ci0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihuPU1hdGgubWluKG4sbyhhcmd1bWVudHNbMV0pKSksbjwwJiYobj1yK24pO24+PTA7bi0tKWlmKG4gaW4gZSYmZVtuXT09PXQpcmV0dXJuIG58fDA7cmV0dXJuLTF9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoMSk7bihuLlArbi5GKiFyKDI1KShbXS5tYXAsITApLFwiQXJyYXlcIix7bWFwOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTE5KTtuKG4uUytuLkYqcig1KShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIShBcnJheS5vZi5jYWxsKHQpaW5zdGFuY2VvZiB0KX0pLFwiQXJyYXlcIix7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcoXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcz90aGlzOkFycmF5KShlKTtlPnQ7KWkocix0LGFyZ3VtZW50c1t0KytdKTtyZXR1cm4gci5sZW5ndGg9ZSxyfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTY5KTtuKG4uUCtuLkYqIXIoMjUpKFtdLnJlZHVjZVJpZ2h0LCEwKSxcIkFycmF5XCIse3JlZHVjZVJpZ2h0OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50c1sxXSwhMCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxNjkpO24obi5QK24uRiohcigyNSkoW10ucmVkdWNlLCEwKSxcIkFycmF5XCIse3JlZHVjZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHNbMV0sITEpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTIzKSxvPXIoMjMpLGE9cig0NyksZj1yKDEwKSxzPVtdLnNsaWNlO24obi5QK24uRipyKDUpKGZ1bmN0aW9uKCl7aSYmcy5jYWxsKGkpfSksXCJBcnJheVwiLHtzbGljZTpmdW5jdGlvbih0LGUpe3ZhciByPWYodGhpcy5sZW5ndGgpLG49byh0aGlzKTtpZihlPXZvaWQgMD09PWU/cjplLFwiQXJyYXlcIj09bilyZXR1cm4gcy5jYWxsKHRoaXMsdCxlKTtmb3IodmFyIGk9YSh0LHIpLHU9YShlLHIpLGg9Zih1LWkpLGM9QXJyYXkoaCksZD0wO2Q8aDtkKyspY1tkXT1cIlN0cmluZ1wiPT1uP3RoaXMuY2hhckF0KGkrZCk6dGhpc1tpK2RdO3JldHVybiBjfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDMpO24obi5QK24uRiohcigyNSkoW10uc29tZSwhMCksXCJBcnJheVwiLHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTMpLG89cigxMSksYT1yKDUpLGY9W10uc29ydCxzPVsxLDIsM107bihuLlArbi5GKihhKGZ1bmN0aW9uKCl7cy5zb3J0KHZvaWQgMCl9KXx8IWEoZnVuY3Rpb24oKXtzLnNvcnQobnVsbCl9KXx8IXIoMjUpKGYpKSxcIkFycmF5XCIse3NvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/Zi5jYWxsKG8odGhpcykpOmYuY2FsbChvKHRoaXMpLGkodCkpfX0pfSxmdW5jdGlvbih0LGUscil7cig0NikoXCJBcnJheVwiKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJEYXRlXCIse25vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoNSksbz1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+OT90OlwiMFwiK3R9O24obi5QK24uRiooaShmdW5jdGlvbigpe3JldHVyblwiMDM4NS0wNy0yNVQwNzowNjozOS45OTlaXCIhPW5ldyBEYXRlKC01ZTEzLTEpLnRvSVNPU3RyaW5nKCl9KXx8IWkoZnVuY3Rpb24oKXtuZXcgRGF0ZShOYU4pLnRvSVNPU3RyaW5nKCl9KSksXCJEYXRlXCIse3RvSVNPU3RyaW5nOmZ1bmN0aW9uKCl7aWYoIWlzRmluaXRlKG8uY2FsbCh0aGlzKSkpdGhyb3cgUmFuZ2VFcnJvcihcIkludmFsaWQgdGltZSB2YWx1ZVwiKTt2YXIgdD10aGlzLGU9dC5nZXRVVENGdWxsWWVhcigpLHI9dC5nZXRVVENNaWxsaXNlY29uZHMoKSxuPWU8MD9cIi1cIjplPjk5OTk/XCIrXCI6XCJcIjtyZXR1cm4gbisoXCIwMDAwMFwiK01hdGguYWJzKGUpKS5zbGljZShuPy02Oi00KStcIi1cIithKHQuZ2V0VVRDTW9udGgoKSsxKStcIi1cIithKHQuZ2V0VVRDRGF0ZSgpKStcIlRcIithKHQuZ2V0VVRDSG91cnMoKSkrXCI6XCIrYSh0LmdldFVUQ01pbnV0ZXMoKSkrXCI6XCIrYSh0LmdldFVUQ1NlY29uZHMoKSkrXCIuXCIrKHI+OTk/cjpcIjBcIithKHIpKStcIlpcIn19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExKSxvPXIoMjkpO24obi5QK24uRipyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1uZXcgRGF0ZShOYU4pLnRvSlNPTigpfHwxIT09RGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoe3RvSVNPU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDF9fSl9KSxcIkRhdGVcIix7dG9KU09OOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcykscj1vKGUpO3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiByfHxpc0Zpbml0ZShyKT9lLnRvSVNPU3RyaW5nKCk6bnVsbH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNykoXCJ0b1ByaW1pdGl2ZVwiKSxpPURhdGUucHJvdG90eXBlO24gaW4gaXx8cigxNCkoaSxuLHIoMjg0KSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1EYXRlLnByb3RvdHlwZSxpPVwiSW52YWxpZCBEYXRlXCIsbz1cInRvU3RyaW5nXCIsYT1uW29dLGY9bi5nZXRUaW1lO25ldyBEYXRlKE5hTikrXCJcIiE9aSYmcigxNSkobixvLGZ1bmN0aW9uKCl7dmFyIHQ9Zi5jYWxsKHRoaXMpO3JldHVybiB0PT09dD9hLmNhbGwodGhpcyk6aX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUCxcIkZ1bmN0aW9uXCIse2JpbmQ6cigxNzApfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDYpLGk9cigyMSksbz1yKDcpKFwiaGFzSW5zdGFuY2VcIiksYT1GdW5jdGlvbi5wcm90b3R5cGU7byBpbiBhfHxyKDkpLmYoYSxvLHt2YWx1ZTpmdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0aGlzfHwhbih0KSlyZXR1cm4hMTtpZighbih0aGlzLnByb3RvdHlwZSkpcmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzO2Zvcig7dD1pKHQpOylpZih0aGlzLnByb3RvdHlwZT09PXQpcmV0dXJuITA7cmV0dXJuITF9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDkpLmYsaT1yKDM3KSxvPXIoMTIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLGY9L15cXHMqZnVuY3Rpb24gKFteIChdKikvLHM9XCJuYW1lXCIsdT1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfTtzIGluIGF8fHIoOCkmJm4oYSxzLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXRoaXMsZT0oXCJcIit0KS5tYXRjaChmKVsxXTtyZXR1cm4gbyh0LHMpfHwhdSh0KXx8bih0LHMsaSg1LGUpKSxlfWNhdGNoKHQpe3JldHVyblwiXCJ9fX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTc4KSxvPU1hdGguc3FydCxhPU1hdGguYWNvc2g7bihuLlMrbi5GKiEoYSYmNzEwPT1NYXRoLmZsb29yKGEoTnVtYmVyLk1BWF9WQUxVRSkpJiZhKDEvMCk9PTEvMCksXCJNYXRoXCIse2Fjb3NoOmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KTwxP05hTjp0Pjk0OTA2MjY1LjYyNDI1MTU2P01hdGgubG9nKHQpK01hdGguTE4yOmkodC0xK28odC0xKSpvKHQrMSkpfX0pfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4gaXNGaW5pdGUodD0rdCkmJjAhPXQ/dDwwPy1uKC10KTpNYXRoLmxvZyh0K01hdGguc3FydCh0KnQrMSkpOnR9dmFyIGk9cigwKSxvPU1hdGguYXNpbmg7aShpLlMraS5GKiEobyYmMS9vKDApPjApLFwiTWF0aFwiLHthc2luaDpufSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9TWF0aC5hdGFuaDtuKG4uUytuLkYqIShpJiYxL2koLTApPDApLFwiTWF0aFwiLHthdGFuaDpmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6TWF0aC5sb2coKDErdCkvKDEtdCkpLzJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMzApO24obi5TLFwiTWF0aFwiLHtjYnJ0OmZ1bmN0aW9uKHQpe3JldHVybiBpKHQ9K3QpKk1hdGgucG93KE1hdGguYWJzKHQpLDEvMyl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtjbHozMjpmdW5jdGlvbih0KXtyZXR1cm4odD4+Pj0wKT8zMS1NYXRoLmZsb29yKE1hdGgubG9nKHQrLjUpKk1hdGguTE9HMkUpOjMyfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPU1hdGguZXhwO24obi5TLFwiTWF0aFwiLHtjb3NoOmZ1bmN0aW9uKHQpe3JldHVybihpKHQ9K3QpK2koLXQpKS8yfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTI5KTtuKG4uUytuLkYqKGkhPU1hdGguZXhwbTEpLFwiTWF0aFwiLHtleHBtMTppfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMzApLG89TWF0aC5wb3csYT1vKDIsLTUyKSxmPW8oMiwtMjMpLHM9bygyLDEyNykqKDItZiksdT1vKDIsLTEyNiksaD1mdW5jdGlvbih0KXtyZXR1cm4gdCsxL2EtMS9hfTtuKG4uUyxcIk1hdGhcIix7ZnJvdW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1NYXRoLmFicyh0KSxvPWkodCk7cmV0dXJuIG48dT9vKmgobi91L2YpKnUqZjooZT0oMStmL2EpKm4scj1lLShlLW4pLHI+c3x8ciE9cj9vKigxLzApOm8qcil9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9TWF0aC5hYnM7bihuLlMsXCJNYXRoXCIse2h5cG90OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4sbz0wLGE9MCxmPWFyZ3VtZW50cy5sZW5ndGgscz0wO2E8Zjspcj1pKGFyZ3VtZW50c1thKytdKSxzPHI/KG49cy9yLG89bypuKm4rMSxzPXIpOnI+MD8obj1yL3Msbys9bipuKTpvKz1yO3JldHVybiBzPT09MS8wPzEvMDpzKk1hdGguc3FydChvKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1NYXRoLmltdWw7bihuLlMrbi5GKnIoNSkoZnVuY3Rpb24oKXtyZXR1cm4gaSg0Mjk0OTY3Mjk1LDUpIT0tNXx8MiE9aS5sZW5ndGh9KSxcIk1hdGhcIix7aW11bDpmdW5jdGlvbih0LGUpe3ZhciByPTY1NTM1LG49K3QsaT0rZSxvPXImbixhPXImaTtyZXR1cm4gMHxvKmErKChyJm4+Pj4xNikqYStvKihyJmk+Pj4xNik8PDE2Pj4+MCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtsb2cxMDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjEwfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7bG9nMXA6cigxNzgpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtsb2cyOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse3NpZ246cigxMzApfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMjkpLG89TWF0aC5leHA7bihuLlMrbi5GKnIoNSkoZnVuY3Rpb24oKXtyZXR1cm4hTWF0aC5zaW5oKC0yZS0xNykhPS0yZS0xN30pLFwiTWF0aFwiLHtzaW5oOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0PSt0KTwxPyhpKHQpLWkoLXQpKS8yOihvKHQtMSktbygtdC0xKSkqKE1hdGguRS8yKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEyOSksbz1NYXRoLmV4cDtuKG4uUyxcIk1hdGhcIix7dGFuaDpmdW5jdGlvbih0KXt2YXIgZT1pKHQ9K3QpLHI9aSgtdCk7cmV0dXJuIGU9PTEvMD8xOnI9PTEvMD8tMTooZS1yKS8obyh0KStvKC10KSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHt0cnVuYzpmdW5jdGlvbih0KXtyZXR1cm4odD4wP01hdGguZmxvb3I6TWF0aC5jZWlsKSh0KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDEyKSxvPXIoMjMpLGE9cigxMjQpLGY9cigyOSkscz1yKDUpLHU9cig0MykuZixoPXIoMjApLmYsYz1yKDkpLmYsZD1yKDU4KS50cmltLGw9XCJOdW1iZXJcIixwPW5bbF0sYj1wLHY9cC5wcm90b3R5cGUseT1vKHIoNDIpKHYpKT09bCxtPVwidHJpbVwiaW4gU3RyaW5nLnByb3RvdHlwZSxnPWZ1bmN0aW9uKHQpe3ZhciBlPWYodCwhMSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJmUubGVuZ3RoPjIpe2U9bT9lLnRyaW0oKTpkKGUsMyk7dmFyIHIsbixpLG89ZS5jaGFyQ29kZUF0KDApO2lmKDQzPT09b3x8NDU9PT1vKXtpZihyPWUuY2hhckNvZGVBdCgyKSw4OD09PXJ8fDEyMD09PXIpcmV0dXJuIE5hTn1lbHNlIGlmKDQ4PT09byl7c3dpdGNoKGUuY2hhckNvZGVBdCgxKSl7Y2FzZSA2NjpjYXNlIDk4Om49MixpPTQ5O2JyZWFrO2Nhc2UgNzk6Y2FzZSAxMTE6bj04LGk9NTU7YnJlYWs7ZGVmYXVsdDpyZXR1cm4rZX1mb3IodmFyIGEscz1lLnNsaWNlKDIpLHU9MCxoPXMubGVuZ3RoO3U8aDt1KyspaWYoYT1zLmNoYXJDb2RlQXQodSksYTw0OHx8YT5pKXJldHVybiBOYU47cmV0dXJuIHBhcnNlSW50KHMsbil9fXJldHVybitlfTtpZighcChcIiAwbzFcIil8fCFwKFwiMGIxXCIpfHxwKFwiKzB4MVwiKSl7cD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDE/MDp0LHI9dGhpcztyZXR1cm4gciBpbnN0YW5jZW9mIHAmJih5P3MoZnVuY3Rpb24oKXt2LnZhbHVlT2YuY2FsbChyKX0pOm8ocikhPWwpP2EobmV3IGIoZyhlKSkscixwKTpnKGUpfTtmb3IodmFyIHcsXz1yKDgpP3UoYik6XCJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlclwiLnNwbGl0KFwiLFwiKSxNPTA7Xy5sZW5ndGg+TTtNKyspaShiLHc9X1tNXSkmJiFpKHAsdykmJmMocCx3LGgoYix3KSk7cC5wcm90b3R5cGU9dix2LmNvbnN0cnVjdG9yPXAscigxNSkobixsLHApfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJOdW1iZXJcIix7RVBTSUxPTjpNYXRoLnBvdygyLC01Mil9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDQpLmlzRmluaXRlO24obi5TLFwiTnVtYmVyXCIse2lzRmluaXRlOmZ1bmN0aW9uKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0JiZpKHQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk51bWJlclwiLHtpc0ludGVnZXI6cigxNzUpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTnVtYmVyXCIse2lzTmFOOmZ1bmN0aW9uKHQpe3JldHVybiB0IT10fX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTc1KSxvPU1hdGguYWJzO24obi5TLFwiTnVtYmVyXCIse2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJm8odCk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTnVtYmVyXCIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk51bWJlclwiLHtNSU5fU0FGRV9JTlRFR0VSOi05MDA3MTk5MjU0NzQwOTkxfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODUpO24obi5TK24uRiooTnVtYmVyLnBhcnNlRmxvYXQhPWkpLFwiTnVtYmVyXCIse3BhcnNlRmxvYXQ6aX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTg2KTtuKG4uUytuLkYqKE51bWJlci5wYXJzZUludCE9aSksXCJOdW1iZXJcIix7cGFyc2VJbnQ6aX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMzgpLG89cigxNjYpLGE9cigxMzcpLGY9MS4udG9GaXhlZCxzPU1hdGguZmxvb3IsdT1bMCwwLDAsMCwwLDBdLGg9XCJOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hXCIsYz1cIjBcIixkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49ZTsrK3I8Njspbis9dCp1W3JdLHVbcl09biUxZTcsbj1zKG4vMWU3KX0sbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9NixyPTA7LS1lPj0wOylyKz11W2VdLHVbZV09cyhyL3QpLHI9ciV0KjFlN30scD1mdW5jdGlvbigpe2Zvcih2YXIgdD02LGU9XCJcIjstLXQ+PTA7KWlmKFwiXCIhPT1lfHwwPT09dHx8MCE9PXVbdF0pe3ZhciByPVN0cmluZyh1W3RdKTtlPVwiXCI9PT1lP3I6ZSthLmNhbGwoYyw3LXIubGVuZ3RoKStyfXJldHVybiBlfSxiPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMD09PWU/cjplJTI9PT0xP2IodCxlLTEscip0KTpiKHQqdCxlLzIscil9LHY9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O3I+PTQwOTY7KWUrPTEyLHIvPTQwOTY7Zm9yKDtyPj0yOyllKz0xLHIvPTI7cmV0dXJuIGV9O24obi5QK24uRiooISFmJiYoXCIwLjAwMFwiIT09OGUtNS50b0ZpeGVkKDMpfHxcIjFcIiE9PS45LnRvRml4ZWQoMCl8fFwiMS4yNVwiIT09MS4yNTUudG9GaXhlZCgyKXx8XCIxMDAwMDAwMDAwMDAwMDAwMTI4XCIhPT0oMHhkZTBiNmIzYTc2NDAwODApLnRvRml4ZWQoMCkpfHwhcig1KShmdW5jdGlvbigpe2YuY2FsbCh7fSl9KSksXCJOdW1iZXJcIix7dG9GaXhlZDpmdW5jdGlvbih0KXt2YXIgZSxyLG4sZixzPW8odGhpcyxoKSx1PWkodCkseT1cIlwiLG09YztpZih1PDB8fHU+MjApdGhyb3cgUmFuZ2VFcnJvcihoKTtpZihzIT1zKXJldHVyblwiTmFOXCI7aWYoczw9LTFlMjF8fHM+PTFlMjEpcmV0dXJuIFN0cmluZyhzKTtpZihzPDAmJih5PVwiLVwiLHM9LXMpLHM+MWUtMjEpaWYoZT12KHMqYigyLDY5LDEpKS02OSxyPWU8MD9zKmIoMiwtZSwxKTpzL2IoMixlLDEpLHIqPTQ1MDM1OTk2MjczNzA0OTYsZT01Mi1lLGU+MCl7Zm9yKGQoMCxyKSxuPXU7bj49NzspZCgxZTcsMCksbi09Nztmb3IoZChiKDEwLG4sMSksMCksbj1lLTE7bj49MjM7KWwoMTw8MjMpLG4tPTIzO2woMTw8biksZCgxLDEpLGwoMiksbT1wKCl9ZWxzZSBkKDAsciksZCgxPDwtZSwwKSxtPXAoKSthLmNhbGwoYyx1KTtyZXR1cm4gdT4wPyhmPW0ubGVuZ3RoLG09eSsoZjw9dT9cIjAuXCIrYS5jYWxsKGMsdS1mKSttOm0uc2xpY2UoMCxmLXUpK1wiLlwiK20uc2xpY2UoZi11KSkpOm09eSttLG19fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cig1KSxvPXIoMTY2KSxhPTEuLnRvUHJlY2lzaW9uO24obi5QK24uRiooaShmdW5jdGlvbigpe3JldHVyblwiMVwiIT09YS5jYWxsKDEsdm9pZCAwKX0pfHwhaShmdW5jdGlvbigpe2EuY2FsbCh7fSl9KSksXCJOdW1iZXJcIix7dG9QcmVjaXNpb246ZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzLFwiTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiFcIik7cmV0dXJuIHZvaWQgMD09PXQ/YS5jYWxsKGUpOmEuY2FsbChlLHQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUytuLkYsXCJPYmplY3RcIix7YXNzaWduOnIoMTc5KX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk9iamVjdFwiLHtjcmVhdGU6cig0Mil9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMrbi5GKiFyKDgpLFwiT2JqZWN0XCIse2RlZmluZVByb3BlcnRpZXM6cigxODApfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TK24uRiohcig4KSxcIk9iamVjdFwiLHtkZWZpbmVQcm9wZXJ0eTpyKDkpLmZ9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDM2KS5vbkZyZWV6ZTtyKDI4KShcImZyZWV6ZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCYmbihlKT90KGkoZSkpOmV9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE3KSxpPXIoMjApLmY7cigyOCkoXCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBpKG4odCksZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDI4KShcImdldE93blByb3BlcnR5TmFtZXNcIixmdW5jdGlvbigpe3JldHVybiByKDE4MSkuZn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMSksaT1yKDIxKTtyKDI4KShcImdldFByb3RvdHlwZU9mXCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpO3IoMjgpKFwiaXNFeHRlbnNpYmxlXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiEhbihlKSYmKCF0fHx0KGUpKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNik7cigyOCkoXCJpc0Zyb3plblwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4hbihlKXx8ISF0JiZ0KGUpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KTtyKDI4KShcImlzU2VhbGVkXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiFuKGUpfHwhIXQmJnQoZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiT2JqZWN0XCIse2lzOnIoMTg3KX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMSksaT1yKDQ0KTtyKDI4KShcImtleXNcIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShuKHQpKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDM2KS5vbkZyZWV6ZTtyKDI4KShcInByZXZlbnRFeHRlbnNpb25zXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiZuKGUpP3QoaShlKSk6ZX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDM2KS5vbkZyZWV6ZTtyKDI4KShcInNlYWxcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm4oZSk/dChpKGUpKTplfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk9iamVjdFwiLHtzZXRQcm90b3R5cGVPZjpyKDEzMikuc2V0fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDY0KSxpPXt9O2lbcig3KShcInRvU3RyaW5nVGFnXCIpXT1cInpcIixpK1wiXCIhPVwiW29iamVjdCB6XVwiJiZyKDE1KShPYmplY3QucHJvdG90eXBlLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBcIituKHRoaXMpK1wiXVwifSwhMCl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODUpO24obi5HK24uRioocGFyc2VGbG9hdCE9aSkse3BhcnNlRmxvYXQ6aX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTg2KTtuKG4uRytuLkYqKHBhcnNlSW50IT1pKSx7cGFyc2VJbnQ6aX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxvLGE9cig0MSksZj1yKDQpLHM9cigzMyksdT1yKDY0KSxoPXIoMCksYz1yKDYpLGQ9cigxMyksbD1yKDQwKSxwPXIoNTUpLGI9cigxMzQpLHY9cigxMzkpLnNldCx5PXIoMTMxKSgpLG09XCJQcm9taXNlXCIsZz1mLlR5cGVFcnJvcix3PWYucHJvY2VzcyxfPWZbbV0sdz1mLnByb2Nlc3MsTT1cInByb2Nlc3NcIj09dSh3KSxTPWZ1bmN0aW9uKCl7fSxFPSEhZnVuY3Rpb24oKXt0cnl7dmFyIHQ9Xy5yZXNvbHZlKDEpLGU9KHQuY29uc3RydWN0b3I9e30pW3IoNykoXCJzcGVjaWVzXCIpXT1mdW5jdGlvbih0KXt0KFMsUyl9O3JldHVybihNfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZ0LnRoZW4oUylpbnN0YW5jZW9mIGV9Y2F0Y2godCl7fX0oKSxBPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHx0PT09XyYmZT09PW99LGs9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuISghYyh0KXx8XCJmdW5jdGlvblwiIT10eXBlb2YoZT10LnRoZW4pKSYmZX0seD1mdW5jdGlvbih0KXtyZXR1cm4gQShfLHQpP25ldyBJKHQpOm5ldyBpKHQpfSxJPWk9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLnByb21pc2U9bmV3IHQoZnVuY3Rpb24odCxuKXtpZih2b2lkIDAhPT1lfHx2b2lkIDAhPT1yKXRocm93IGcoXCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvclwiKTtlPXQscj1ufSksdGhpcy5yZXNvbHZlPWQoZSksdGhpcy5yZWplY3Q9ZChyKX0sQj1mdW5jdGlvbih0KXt0cnl7dCgpfWNhdGNoKHQpe3JldHVybntlcnJvcjp0fX19LE89ZnVuY3Rpb24odCxlKXtpZighdC5fbil7dC5fbj0hMDt2YXIgcj10Ll9jO3koZnVuY3Rpb24oKXtmb3IodmFyIG49dC5fdixpPTE9PXQuX3Msbz0wLGE9ZnVuY3Rpb24oZSl7dmFyIHIsbyxhPWk/ZS5vazplLmZhaWwsZj1lLnJlc29sdmUscz1lLnJlamVjdCx1PWUuZG9tYWluO3RyeXthPyhpfHwoMj09dC5faCYmVCh0KSx0Ll9oPTEpLGE9PT0hMD9yPW46KHUmJnUuZW50ZXIoKSxyPWEobiksdSYmdS5leGl0KCkpLHI9PT1lLnByb21pc2U/cyhnKFwiUHJvbWlzZS1jaGFpbiBjeWNsZVwiKSk6KG89ayhyKSk/by5jYWxsKHIsZixzKTpmKHIpKTpzKG4pfWNhdGNoKHQpe3ModCl9fTtyLmxlbmd0aD5vOylhKHJbbysrXSk7dC5fYz1bXSx0Ll9uPSExLGUmJiF0Ll9oJiZSKHQpfSl9fSxSPWZ1bmN0aW9uKHQpe3YuY2FsbChmLGZ1bmN0aW9uKCl7dmFyIGUscixuLGk9dC5fdjtpZihQKHQpJiYoZT1CKGZ1bmN0aW9uKCl7TT93LmVtaXQoXCJ1bmhhbmRsZWRSZWplY3Rpb25cIixpLHQpOihyPWYub251bmhhbmRsZWRyZWplY3Rpb24pP3Ioe3Byb21pc2U6dCxyZWFzb246aX0pOihuPWYuY29uc29sZSkmJm4uZXJyb3ImJm4uZXJyb3IoXCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25cIixpKX0pLHQuX2g9TXx8UCh0KT8yOjEpLHQuX2E9dm9pZCAwLGUpdGhyb3cgZS5lcnJvcn0pfSxQPWZ1bmN0aW9uKHQpe2lmKDE9PXQuX2gpcmV0dXJuITE7Zm9yKHZhciBlLHI9dC5fYXx8dC5fYyxuPTA7ci5sZW5ndGg+bjspaWYoZT1yW24rK10sZS5mYWlsfHwhUChlLnByb21pc2UpKXJldHVybiExO3JldHVybiEwfSxUPWZ1bmN0aW9uKHQpe3YuY2FsbChmLGZ1bmN0aW9uKCl7dmFyIGU7TT93LmVtaXQoXCJyZWplY3Rpb25IYW5kbGVkXCIsdCk6KGU9Zi5vbnJlamVjdGlvbmhhbmRsZWQpJiZlKHtwcm9taXNlOnQscmVhc29uOnQuX3Z9KX0pfSxqPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZS5fZHx8KGUuX2Q9ITAsZT1lLl93fHxlLGUuX3Y9dCxlLl9zPTIsZS5fYXx8KGUuX2E9ZS5fYy5zbGljZSgpKSxPKGUsITApKX0sQz1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXM7aWYoIXIuX2Qpe3IuX2Q9ITAscj1yLl93fHxyO3RyeXtpZihyPT09dCl0aHJvdyBnKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7KGU9ayh0KSk/eShmdW5jdGlvbigpe3ZhciBuPXtfdzpyLF9kOiExfTt0cnl7ZS5jYWxsKHQscyhDLG4sMSkscyhqLG4sMSkpfWNhdGNoKHQpe2ouY2FsbChuLHQpfX0pOihyLl92PXQsci5fcz0xLE8ociwhMSkpfWNhdGNoKHQpe2ouY2FsbCh7X3c6cixfZDohMX0sdCl9fX07RXx8KF89ZnVuY3Rpb24odCl7bCh0aGlzLF8sbSxcIl9oXCIpLGQodCksbi5jYWxsKHRoaXMpO3RyeXt0KHMoQyx0aGlzLDEpLHMoaix0aGlzLDEpKX1jYXRjaCh0KXtqLmNhbGwodGhpcyx0KX19LG49ZnVuY3Rpb24odCl7dGhpcy5fYz1bXSx0aGlzLl9hPXZvaWQgMCx0aGlzLl9zPTAsdGhpcy5fZD0hMSx0aGlzLl92PXZvaWQgMCx0aGlzLl9oPTAsdGhpcy5fbj0hMX0sbi5wcm90b3R5cGU9cig0NSkoXy5wcm90b3R5cGUse3RoZW46ZnVuY3Rpb24odCxlKXt2YXIgcj14KGIodGhpcyxfKSk7cmV0dXJuIHIub2s9XCJmdW5jdGlvblwiIT10eXBlb2YgdHx8dCxyLmZhaWw9XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSxyLmRvbWFpbj1NP3cuZG9tYWluOnZvaWQgMCx0aGlzLl9jLnB1c2gociksdGhpcy5fYSYmdGhpcy5fYS5wdXNoKHIpLHRoaXMuX3MmJk8odGhpcywhMSksci5wcm9taXNlfSxjYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCx0KX19KSxJPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG47dGhpcy5wcm9taXNlPXQsdGhpcy5yZXNvbHZlPXMoQyx0LDEpLHRoaXMucmVqZWN0PXMoaix0LDEpfSksaChoLkcraC5XK2guRiohRSx7UHJvbWlzZTpffSkscig1NykoXyxtKSxyKDQ2KShtKSxvPXIoMzIpW21dLGgoaC5TK2guRiohRSxtLHtyZWplY3Q6ZnVuY3Rpb24odCl7dmFyIGU9eCh0aGlzKSxyPWUucmVqZWN0O3JldHVybiByKHQpLGUucHJvbWlzZX19KSxoKGguUytoLkYqKGF8fCFFKSxtLHtyZXNvbHZlOmZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBfJiZBKHQuY29uc3RydWN0b3IsdGhpcykpcmV0dXJuIHQ7dmFyIGU9eCh0aGlzKSxyPWUucmVzb2x2ZTtyZXR1cm4gcih0KSxlLnByb21pc2V9fSksaChoLlMraC5GKiEoRSYmcig4NCkoZnVuY3Rpb24odCl7Xy5hbGwodCkuY2F0Y2goUyl9KSksbSx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj14KGUpLG49ci5yZXNvbHZlLGk9ci5yZWplY3Qsbz1CKGZ1bmN0aW9uKCl7dmFyIHI9W10sbz0wLGE9MTtwKHQsITEsZnVuY3Rpb24odCl7dmFyIGY9bysrLHM9ITE7ci5wdXNoKHZvaWQgMCksYSsrLGUucmVzb2x2ZSh0KS50aGVuKGZ1bmN0aW9uKHQpe3N8fChzPSEwLHJbZl09dCwtLWF8fG4ocikpfSxpKX0pLC0tYXx8bihyKX0pO3JldHVybiBvJiZpKG8uZXJyb3IpLHIucHJvbWlzZX0scmFjZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9eChlKSxuPXIucmVqZWN0LGk9QihmdW5jdGlvbigpe3AodCwhMSxmdW5jdGlvbih0KXtlLnJlc29sdmUodCkudGhlbihyLnJlc29sdmUsbil9KX0pO3JldHVybiBpJiZuKGkuZXJyb3IpLHIucHJvbWlzZX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzKSxvPXIoMyksYT0ocig0KS5SZWZsZWN0fHx7fSkuYXBwbHksZj1GdW5jdGlvbi5hcHBseTtuKG4uUytuLkYqIXIoNSkoZnVuY3Rpb24oKXthKGZ1bmN0aW9uKCl7fSl9KSxcIlJlZmxlY3RcIix7YXBwbHk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkodCkscz1vKHIpO3JldHVybiBhP2EobixlLHMpOmYuY2FsbChuLGUscyl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cig0Miksbz1yKDEzKSxhPXIoMyksZj1yKDYpLHM9cig1KSx1PXIoMTcwKSxoPShyKDQpLlJlZmxlY3R8fHt9KS5jb25zdHJ1Y3QsYz1zKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4hKGgoZnVuY3Rpb24oKXt9LFtdLHQpaW5zdGFuY2VvZiB0KX0pLGQ9IXMoZnVuY3Rpb24oKXtoKGZ1bmN0aW9uKCl7fSl9KTtuKG4uUytuLkYqKGN8fGQpLFwiUmVmbGVjdFwiLHtjb25zdHJ1Y3Q6ZnVuY3Rpb24odCxlKXtvKHQpLGEoZSk7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDwzP3Q6byhhcmd1bWVudHNbMl0pO2lmKGQmJiFjKXJldHVybiBoKHQsZSxyKTtpZih0PT1yKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChlWzBdKTtjYXNlIDI6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSk7Y2FzZSA0OnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSxlWzNdKX12YXIgbj1bbnVsbF07cmV0dXJuIG4ucHVzaC5hcHBseShuLGUpLG5ldyh1LmFwcGx5KHQsbikpfXZhciBzPXIucHJvdG90eXBlLGw9aShmKHMpP3M6T2JqZWN0LnByb3RvdHlwZSkscD1GdW5jdGlvbi5hcHBseS5jYWxsKHQsbCxlKTtyZXR1cm4gZihwKT9wOmx9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDkpLGk9cigwKSxvPXIoMyksYT1yKDI5KTtpKGkuUytpLkYqcig1KShmdW5jdGlvbigpe1JlZmxlY3QuZGVmaW5lUHJvcGVydHkobi5mKHt9LDEse3ZhbHVlOjF9KSwxLHt2YWx1ZToyfSl9KSxcIlJlZmxlY3RcIix7ZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLHIpe28odCksZT1hKGUsITApLG8ocik7dHJ5e3JldHVybiBuLmYodCxlLHIpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDIwKS5mLG89cigzKTtuKG4uUyxcIlJlZmxlY3RcIix7ZGVsZXRlUHJvcGVydHk6ZnVuY3Rpb24odCxlKXt2YXIgcj1pKG8odCksZSk7cmV0dXJuIShyJiYhci5jb25maWd1cmFibGUpJiZkZWxldGUgdFtlXX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDMpLG89ZnVuY3Rpb24odCl7dGhpcy5fdD1pKHQpLHRoaXMuX2k9MDt2YXIgZSxyPXRoaXMuX2s9W107Zm9yKGUgaW4gdClyLnB1c2goZSl9O3IoMTI3KShvLFwiT2JqZWN0XCIsZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMscj1lLl9rO2RvIGlmKGUuX2k+PXIubGVuZ3RoKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07d2hpbGUoISgodD1yW2UuX2krK10paW4gZS5fdCkpO3JldHVybnt2YWx1ZTp0LGRvbmU6ITF9fSksbihuLlMsXCJSZWZsZWN0XCIse2VudW1lcmF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIwKSxpPXIoMCksbz1yKDMpO2koaS5TLFwiUmVmbGVjdFwiLHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5mKG8odCksZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigyMSksbz1yKDMpO24obi5TLFwiUmVmbGVjdFwiLHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gaShvKHQpKX19KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcixmLGg9YXJndW1lbnRzLmxlbmd0aDwzP3Q6YXJndW1lbnRzWzJdO3JldHVybiB1KHQpPT09aD90W2VdOihyPWkuZih0LGUpKT9hKHIsXCJ2YWx1ZVwiKT9yLnZhbHVlOnZvaWQgMCE9PXIuZ2V0P3IuZ2V0LmNhbGwoaCk6dm9pZCAwOnMoZj1vKHQpKT9uKGYsZSxoKTp2b2lkIDB9dmFyIGk9cigyMCksbz1yKDIxKSxhPXIoMTIpLGY9cigwKSxzPXIoNiksdT1yKDMpO2YoZi5TLFwiUmVmbGVjdFwiLHtnZXQ6bn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIlJlZmxlY3RcIix7aGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gdH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDMpLG89T2JqZWN0LmlzRXh0ZW5zaWJsZTtuKG4uUyxcIlJlZmxlY3RcIix7aXNFeHRlbnNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLCFvfHxvKHQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIlJlZmxlY3RcIix7b3duS2V5czpyKDE4NCl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDMpLG89T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO24obi5TLFwiUmVmbGVjdFwiLHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih0KXtpKHQpO3RyeXtyZXR1cm4gbyYmbyh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMzIpO2kmJm4obi5TLFwiUmVmbGVjdFwiLHtzZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0LGUpe2kuY2hlY2sodCxlKTt0cnl7cmV0dXJuIGkuc2V0KHQsZSksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIHMsZCxsPWFyZ3VtZW50cy5sZW5ndGg8ND90OmFyZ3VtZW50c1szXSxwPW8uZihoKHQpLGUpO2lmKCFwKXtpZihjKGQ9YSh0KSkpcmV0dXJuIG4oZCxlLHIsbCk7cD11KDApfXJldHVybiBmKHAsXCJ2YWx1ZVwiKT8hKHAud3JpdGFibGU9PT0hMXx8IWMobCkpJiYocz1vLmYobCxlKXx8dSgwKSxzLnZhbHVlPXIsaS5mKGwsZSxzKSwhMCk6dm9pZCAwIT09cC5zZXQmJihwLnNldC5jYWxsKGwsciksITApfXZhciBpPXIoOSksbz1yKDIwKSxhPXIoMjEpLGY9cigxMikscz1yKDApLHU9cigzNyksaD1yKDMpLGM9cig2KTtzKHMuUyxcIlJlZmxlY3RcIix7c2V0Om59KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1yKDEyNCksbz1yKDkpLmYsYT1yKDQzKS5mLGY9cig4Mykscz1yKDgxKSx1PW4uUmVnRXhwLGg9dSxjPXUucHJvdG90eXBlLGQ9L2EvZyxsPS9hL2cscD1uZXcgdShkKSE9PWQ7aWYocig4KSYmKCFwfHxyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIGxbcig3KShcIm1hdGNoXCIpXT0hMSx1KGQpIT1kfHx1KGwpPT1sfHxcIi9hL2lcIiE9dShkLFwiaVwiKX0pKSl7dT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMgaW5zdGFuY2VvZiB1LG49Zih0KSxvPXZvaWQgMD09PWU7cmV0dXJuIXImJm4mJnQuY29uc3RydWN0b3I9PT11JiZvP3Q6aShwP25ldyBoKG4mJiFvP3Quc291cmNlOnQsZSk6aCgobj10IGluc3RhbmNlb2YgdSk/dC5zb3VyY2U6dCxuJiZvP3MuY2FsbCh0KTplKSxyP3RoaXM6Yyx1KX07Zm9yKHZhciBiPShmdW5jdGlvbih0KXt0IGluIHV8fG8odSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGhbdF19LHNldDpmdW5jdGlvbihlKXtoW3RdPWV9fSl9KSx2PWEoaCkseT0wO3YubGVuZ3RoPnk7KWIodlt5KytdKTtjLmNvbnN0cnVjdG9yPXUsdS5wcm90b3R5cGU9YyxyKDE1KShuLFwiUmVnRXhwXCIsdSl9cig0NikoXCJSZWdFeHBcIil9LGZ1bmN0aW9uKHQsZSxyKXtyKDgwKShcIm1hdGNoXCIsMSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2Z1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQodGhpcyksaT12b2lkIDA9PXI/dm9pZCAwOnJbZV07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKHIsbik6bmV3IFJlZ0V4cChyKVtlXShTdHJpbmcobikpfSxyXX0pfSxmdW5jdGlvbih0LGUscil7XG5yKDgwKShcInJlcGxhY2VcIiwyLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZnVuY3Rpb24obixpKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10KHRoaXMpLGE9dm9pZCAwPT1uP3ZvaWQgMDpuW2VdO3JldHVybiB2b2lkIDAhPT1hP2EuY2FsbChuLG8saSk6ci5jYWxsKFN0cmluZyhvKSxuLGkpfSxyXX0pfSxmdW5jdGlvbih0LGUscil7cig4MCkoXCJzZWFyY2hcIiwxLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dCh0aGlzKSxpPXZvaWQgMD09cj92b2lkIDA6cltlXTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwocixuKTpuZXcgUmVnRXhwKHIpW2VdKFN0cmluZyhuKSl9LHJdfSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDgwKShcInNwbGl0XCIsMixmdW5jdGlvbih0LGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9cig4Myksbz1uLGE9W10ucHVzaCxmPVwic3BsaXRcIixzPVwibGVuZ3RoXCIsdT1cImxhc3RJbmRleFwiO2lmKFwiY1wiPT1cImFiYmNcIltmXSgvKGIpKi8pWzFdfHw0IT1cInRlc3RcIltmXSgvKD86KS8sLTEpW3NdfHwyIT1cImFiXCJbZl0oLyg/OmFiKSovKVtzXXx8NCE9XCIuXCJbZl0oLyguPykoLj8pLylbc118fFwiLlwiW2ZdKC8oKSgpLylbc10+MXx8XCJcIltmXSgvLj8vKVtzXSl7dmFyIGg9dm9pZCAwPT09LygpPz8vLmV4ZWMoXCJcIilbMV07bj1mdW5jdGlvbih0LGUpe3ZhciByPVN0cmluZyh0aGlzKTtpZih2b2lkIDA9PT10JiYwPT09ZSlyZXR1cm5bXTtpZighaSh0KSlyZXR1cm4gby5jYWxsKHIsdCxlKTt2YXIgbixmLGMsZCxsLHA9W10sYj0odC5pZ25vcmVDYXNlP1wiaVwiOlwiXCIpKyh0Lm11bHRpbGluZT9cIm1cIjpcIlwiKSsodC51bmljb2RlP1widVwiOlwiXCIpKyh0LnN0aWNreT9cInlcIjpcIlwiKSx2PTAseT12b2lkIDA9PT1lPzQyOTQ5NjcyOTU6ZT4+PjAsbT1uZXcgUmVnRXhwKHQuc291cmNlLGIrXCJnXCIpO2ZvcihofHwobj1uZXcgUmVnRXhwKFwiXlwiK20uc291cmNlK1wiJCg/IVxcXFxzKVwiLGIpKTsoZj1tLmV4ZWMocikpJiYoYz1mLmluZGV4K2ZbMF1bc10sIShjPnYmJihwLnB1c2goci5zbGljZSh2LGYuaW5kZXgpKSwhaCYmZltzXT4xJiZmWzBdLnJlcGxhY2UobixmdW5jdGlvbigpe2ZvcihsPTE7bDxhcmd1bWVudHNbc10tMjtsKyspdm9pZCAwPT09YXJndW1lbnRzW2xdJiYoZltsXT12b2lkIDApfSksZltzXT4xJiZmLmluZGV4PHJbc10mJmEuYXBwbHkocCxmLnNsaWNlKDEpKSxkPWZbMF1bc10sdj1jLHBbc10+PXkpKSk7KW1bdV09PT1mLmluZGV4JiZtW3VdKys7cmV0dXJuIHY9PT1yW3NdPyFkJiZtLnRlc3QoXCJcIil8fHAucHVzaChcIlwiKTpwLnB1c2goci5zbGljZSh2KSkscFtzXT55P3Auc2xpY2UoMCx5KTpwfX1lbHNlXCIwXCJbZl0odm9pZCAwLDApW3NdJiYobj1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT10JiYwPT09ZT9bXTpvLmNhbGwodGhpcyx0LGUpfSk7cmV0dXJuW2Z1bmN0aW9uKHIsaSl7dmFyIG89dCh0aGlzKSxhPXZvaWQgMD09cj92b2lkIDA6cltlXTtyZXR1cm4gdm9pZCAwIT09YT9hLmNhbGwocixvLGkpOm4uY2FsbChTdHJpbmcobykscixpKX0sbl19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTkxKTt2YXIgbj1yKDMpLGk9cig4MSksbz1yKDgpLGE9XCJ0b1N0cmluZ1wiLGY9Ly4vW2FdLHM9ZnVuY3Rpb24odCl7cigxNSkoUmVnRXhwLnByb3RvdHlwZSxhLHQsITApfTtyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuXCIvYS9iXCIhPWYuY2FsbCh7c291cmNlOlwiYVwiLGZsYWdzOlwiYlwifSl9KT9zKGZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKTtyZXR1cm5cIi9cIi5jb25jYXQodC5zb3VyY2UsXCIvXCIsXCJmbGFnc1wiaW4gdD90LmZsYWdzOiFvJiZ0IGluc3RhbmNlb2YgUmVnRXhwP2kuY2FsbCh0KTp2b2lkIDApfSk6Zi5uYW1lIT1hJiZzKGZ1bmN0aW9uKCl7cmV0dXJuIGYuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJhbmNob3JcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcyxcImFcIixcIm5hbWVcIixlKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiYmlnXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcImJpZ1wiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImJsaW5rXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcImJsaW5rXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiYm9sZFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJiXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEzNSkoITEpO24obi5QLFwiU3RyaW5nXCIse2NvZGVQb2ludEF0OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMCksbz1yKDEzNiksYT1cImVuZHNXaXRoXCIsZj1cIlwiW2FdO24obi5QK24uRipyKDEyMikoYSksXCJTdHJpbmdcIix7ZW5kc1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzLHQsYSkscj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxuPWkoZS5sZW5ndGgpLHM9dm9pZCAwPT09cj9uOk1hdGgubWluKGkociksbiksdT1TdHJpbmcodCk7cmV0dXJuIGY/Zi5jYWxsKGUsdSxzKTplLnNsaWNlKHMtdS5sZW5ndGgscyk9PT11fX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJmaXhlZFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJ0dFwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImZvbnRjb2xvclwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLFwiZm9udFwiLFwiY29sb3JcIixlKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiZm9udHNpemVcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcyxcImZvbnRcIixcInNpemVcIixlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDQ3KSxvPVN0cmluZy5mcm9tQ2hhckNvZGUsYT1TdHJpbmcuZnJvbUNvZGVQb2ludDtuKG4uUytuLkYqKCEhYSYmMSE9YS5sZW5ndGgpLFwiU3RyaW5nXCIse2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoLGE9MDtuPmE7KXtpZihlPSthcmd1bWVudHNbYSsrXSxpKGUsMTExNDExMSkhPT1lKXRocm93IFJhbmdlRXJyb3IoZStcIiBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50XCIpO3IucHVzaChlPDY1NTM2P28oZSk6bygoKGUtPTY1NTM2KT4+MTApKzU1Mjk2LGUlMTAyNCs1NjMyMCkpfXJldHVybiByLmpvaW4oXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMzYpLG89XCJpbmNsdWRlc1wiO24obi5QK24uRipyKDEyMikobyksXCJTdHJpbmdcIix7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuISF+aSh0aGlzLHQsbykuaW5kZXhPZih0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiaXRhbGljc1wiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJpXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTM1KSghMCk7cigxMjgpKFN0cmluZyxcIlN0cmluZ1wiLGZ1bmN0aW9uKHQpe3RoaXMuX3Q9U3RyaW5nKHQpLHRoaXMuX2k9MH0sZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuX3Qscj10aGlzLl9pO3JldHVybiByPj1lLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Oih0PW4oZSxyKSx0aGlzLl9pKz10Lmxlbmd0aCx7dmFsdWU6dCxkb25lOiExfSl9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwibGlua1wiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLFwiYVwiLFwiaHJlZlwiLGUpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTcpLG89cigxMCk7bihuLlMsXCJTdHJpbmdcIix7cmF3OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pKHQucmF3KSxyPW8oZS5sZW5ndGgpLG49YXJndW1lbnRzLmxlbmd0aCxhPVtdLGY9MDtyPmY7KWEucHVzaChTdHJpbmcoZVtmKytdKSksZjxuJiZhLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tmXSkpO3JldHVybiBhLmpvaW4oXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5QLFwiU3RyaW5nXCIse3JlcGVhdDpyKDEzNyl9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwic21hbGxcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwic21hbGxcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTApLG89cigxMzYpLGE9XCJzdGFydHNXaXRoXCIsZj1cIlwiW2FdO24obi5QK24uRipyKDEyMikoYSksXCJTdHJpbmdcIix7c3RhcnRzV2l0aDpmdW5jdGlvbih0KXt2YXIgZT1vKHRoaXMsdCxhKSxyPWkoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZS5sZW5ndGgpKSxuPVN0cmluZyh0KTtyZXR1cm4gZj9mLmNhbGwoZSxuLHIpOmUuc2xpY2UocixyK24ubGVuZ3RoKT09PW59fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcInN0cmlrZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJzdHJpa2VcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJzdWJcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwic3ViXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwic3VwXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcInN1cFwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDU4KShcInRyaW1cIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLDMpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0KSxpPXIoMTIpLG89cig4KSxhPXIoMCksZj1yKDE1KSxzPXIoMzYpLktFWSx1PXIoNSksaD1yKDg3KSxjPXIoNTcpLGQ9cig0OCksbD1yKDcpLHA9cigxODkpLGI9cigxNDEpLHY9cigyODYpLHk9cigyODUpLG09cigxMjYpLGc9cigzKSx3PXIoMTcpLF89cigyOSksTT1yKDM3KSxTPXIoNDIpLEU9cigxODEpLEE9cigyMCksaz1yKDkpLHg9cig0NCksST1BLmYsQj1rLmYsTz1FLmYsUj1uLlN5bWJvbCxQPW4uSlNPTixUPVAmJlAuc3RyaW5naWZ5LGo9XCJwcm90b3R5cGVcIixDPWwoXCJfaGlkZGVuXCIpLE49bChcInRvUHJpbWl0aXZlXCIpLEw9e30ucHJvcGVydHlJc0VudW1lcmFibGUsVT1oKFwic3ltYm9sLXJlZ2lzdHJ5XCIpLHo9aChcInN5bWJvbHNcIiksRD1oKFwib3Atc3ltYm9sc1wiKSxxPU9iamVjdFtqXSxGPVwiZnVuY3Rpb25cIj09dHlwZW9mIFIsSz1uLlFPYmplY3QsRz0hS3x8IUtbal18fCFLW2pdLmZpbmRDaGlsZCxWPW8mJnUoZnVuY3Rpb24oKXtyZXR1cm4gNyE9UyhCKHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQih0aGlzLFwiYVwiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1JKHEsZSk7biYmZGVsZXRlIHFbZV0sQih0LGUsciksbiYmdCE9PXEmJkIocSxlLG4pfTpCLEg9ZnVuY3Rpb24odCl7dmFyIGU9elt0XT1TKFJbal0pO3JldHVybiBlLl9rPXQsZX0sWD1GJiZcInN5bWJvbFwiPT10eXBlb2YgUi5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBSfSxZPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD09PXEmJlkoRCxlLHIpLGcodCksZT1fKGUsITApLGcociksaSh6LGUpPyhyLmVudW1lcmFibGU/KGkodCxDKSYmdFtDXVtlXSYmKHRbQ11bZV09ITEpLHI9UyhyLHtlbnVtZXJhYmxlOk0oMCwhMSl9KSk6KGkodCxDKXx8Qih0LEMsTSgxLHt9KSksdFtDXVtlXT0hMCksVih0LGUscikpOkIodCxlLHIpfSxXPWZ1bmN0aW9uKHQsZSl7Zyh0KTtmb3IodmFyIHIsbj15KGU9dyhlKSksaT0wLG89bi5sZW5ndGg7bz5pOylZKHQscj1uW2krK10sZVtyXSk7cmV0dXJuIHR9LFo9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZT9TKHQpOlcoUyh0KSxlKX0sSj1mdW5jdGlvbih0KXt2YXIgZT1MLmNhbGwodGhpcyx0PV8odCwhMCkpO3JldHVybiEodGhpcz09PXEmJmkoeix0KSYmIWkoRCx0KSkmJighKGV8fCFpKHRoaXMsdCl8fCFpKHosdCl8fGkodGhpcyxDKSYmdGhpc1tDXVt0XSl8fGUpfSwkPWZ1bmN0aW9uKHQsZSl7aWYodD13KHQpLGU9XyhlLCEwKSx0IT09cXx8IWkoeixlKXx8aShELGUpKXt2YXIgcj1JKHQsZSk7cmV0dXJuIXJ8fCFpKHosZSl8fGkodCxDKSYmdFtDXVtlXXx8KHIuZW51bWVyYWJsZT0hMCkscn19LFE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9Tyh3KHQpKSxuPVtdLG89MDtyLmxlbmd0aD5vOylpKHosZT1yW28rK10pfHxlPT1DfHxlPT1zfHxuLnB1c2goZSk7cmV0dXJuIG59LHR0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQ9PT1xLG49TyhyP0Q6dyh0KSksbz1bXSxhPTA7bi5sZW5ndGg+YTspIWkoeixlPW5bYSsrXSl8fHImJiFpKHEsZSl8fG8ucHVzaCh6W2VdKTtyZXR1cm4gb307Rnx8KFI9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgUil0aHJvdyBUeXBlRXJyb3IoXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhXCIpO3ZhciB0PWQoYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApLGU9ZnVuY3Rpb24ocil7dGhpcz09PXEmJmUuY2FsbChELHIpLGkodGhpcyxDKSYmaSh0aGlzW0NdLHQpJiYodGhpc1tDXVt0XT0hMSksVih0aGlzLHQsTSgxLHIpKX07cmV0dXJuIG8mJkcmJlYocSx0LHtjb25maWd1cmFibGU6ITAsc2V0OmV9KSxIKHQpfSxmKFJbal0sXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2t9KSxBLmY9JCxrLmY9WSxyKDQzKS5mPUUuZj1RLHIoNjYpLmY9SixyKDg2KS5mPXR0LG8mJiFyKDQxKSYmZihxLFwicHJvcGVydHlJc0VudW1lcmFibGVcIixKLCEwKSxwLmY9ZnVuY3Rpb24odCl7cmV0dXJuIEgobCh0KSl9KSxhKGEuRythLlcrYS5GKiFGLHtTeW1ib2w6Un0pO2Zvcih2YXIgZXQ9XCJoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlc1wiLnNwbGl0KFwiLFwiKSxydD0wO2V0Lmxlbmd0aD5ydDspbChldFtydCsrXSk7Zm9yKHZhciBldD14KGwuc3RvcmUpLHJ0PTA7ZXQubGVuZ3RoPnJ0OyliKGV0W3J0KytdKTthKGEuUythLkYqIUYsXCJTeW1ib2xcIix7Zm9yOmZ1bmN0aW9uKHQpe3JldHVybiBpKFUsdCs9XCJcIik/VVt0XTpVW3RdPVIodCl9LGtleUZvcjpmdW5jdGlvbih0KXtpZihYKHQpKXJldHVybiB2KFUsdCk7dGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgc3ltYm9sIVwiKX0sdXNlU2V0dGVyOmZ1bmN0aW9uKCl7Rz0hMH0sdXNlU2ltcGxlOmZ1bmN0aW9uKCl7Rz0hMX19KSxhKGEuUythLkYqIUYsXCJPYmplY3RcIix7Y3JlYXRlOlosZGVmaW5lUHJvcGVydHk6WSxkZWZpbmVQcm9wZXJ0aWVzOlcsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiQsZ2V0T3duUHJvcGVydHlOYW1lczpRLGdldE93blByb3BlcnR5U3ltYm9sczp0dH0pLFAmJmEoYS5TK2EuRiooIUZ8fHUoZnVuY3Rpb24oKXt2YXIgdD1SKCk7cmV0dXJuXCJbbnVsbF1cIiE9VChbdF0pfHxcInt9XCIhPVQoe2E6dH0pfHxcInt9XCIhPVQoT2JqZWN0KHQpKX0pKSxcIkpTT05cIix7c3RyaW5naWZ5OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQmJiFYKHQpKXtmb3IodmFyIGUscixuPVt0XSxpPTE7YXJndW1lbnRzLmxlbmd0aD5pOyluLnB1c2goYXJndW1lbnRzW2krK10pO3JldHVybiBlPW5bMV0sXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHI9ZSksIXImJm0oZSl8fChlPWZ1bmN0aW9uKHQsZSl7aWYociYmKGU9ci5jYWxsKHRoaXMsdCxlKSksIVgoZSkpcmV0dXJuIGV9KSxuWzFdPWUsVC5hcHBseShQLG4pfX19KSxSW2pdW05dfHxyKDE0KShSW2pdLE4sUltqXS52YWx1ZU9mKSxjKFIsXCJTeW1ib2xcIiksYyhNYXRoLFwiTWF0aFwiLCEwKSxjKG4uSlNPTixcIkpTT05cIiwhMCl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cig4OCksbz1yKDE0MCksYT1yKDMpLGY9cig0Nykscz1yKDEwKSx1PXIoNiksaD1yKDQpLkFycmF5QnVmZmVyLGM9cigxMzQpLGQ9by5BcnJheUJ1ZmZlcixsPW8uRGF0YVZpZXcscD1pLkFCViYmaC5pc1ZpZXcsYj1kLnByb3RvdHlwZS5zbGljZSx2PWkuVklFVyx5PVwiQXJyYXlCdWZmZXJcIjtuKG4uRytuLlcrbi5GKihoIT09ZCkse0FycmF5QnVmZmVyOmR9KSxuKG4uUytuLkYqIWkuQ09OU1RSLHkse2lzVmlldzpmdW5jdGlvbih0KXtyZXR1cm4gcCYmcCh0KXx8dSh0KSYmdiBpbiB0fX0pLG4obi5QK24uVStuLkYqcig1KShmdW5jdGlvbigpe3JldHVybiFuZXcgZCgyKS5zbGljZSgxLHZvaWQgMCkuYnl0ZUxlbmd0aH0pLHkse3NsaWNlOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09YiYmdm9pZCAwPT09ZSlyZXR1cm4gYi5jYWxsKGEodGhpcyksdCk7Zm9yKHZhciByPWEodGhpcykuYnl0ZUxlbmd0aCxuPWYodCxyKSxpPWYodm9pZCAwPT09ZT9yOmUsciksbz1uZXcoYyh0aGlzLGQpKShzKGktbikpLHU9bmV3IGwodGhpcyksaD1uZXcgbChvKSxwPTA7bjxpOyloLnNldFVpbnQ4KHArKyx1LmdldFVpbnQ4KG4rKykpO3JldHVybiBvfX0pLHIoNDYpKHkpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uRytuLlcrbi5GKiFyKDg4KS5BQlYse0RhdGFWaWV3OnIoMTQwKS5EYXRhVmlld30pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJGbG9hdDMyXCIsNCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJGbG9hdDY0XCIsOCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJJbnQxNlwiLDIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiSW50MzJcIiw0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIkludDhcIiwxLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIlVpbnQxNlwiLDIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiVWludDMyXCIsNCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJVaW50OFwiLDEsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiVWludDhcIiwxLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSwhMCl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDE3Myk7cig3OSkoXCJXZWFrU2V0XCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBuLmRlZih0aGlzLHQsITApfX0sbiwhMSwhMCl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cig3OCkoITApO24obi5QLFwiQXJyYXlcIix7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxyKDU0KShcImluY2x1ZGVzXCIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTMxKSgpLG89cig0KS5wcm9jZXNzLGE9XCJwcm9jZXNzXCI9PXIoMjMpKG8pO24obi5HLHthc2FwOmZ1bmN0aW9uKHQpe3ZhciBlPWEmJm8uZG9tYWluO2koZT9lLmJpbmQodCk6dCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigyMyk7bihuLlMsXCJFcnJvclwiLHtpc0Vycm9yOmZ1bmN0aW9uKHQpe3JldHVyblwiRXJyb3JcIj09PWkodCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5QK24uUixcIk1hcFwiLHt0b0pTT046cigxNzIpKFwiTWFwXCIpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtpYWRkaDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Pj4+MCxvPWU+Pj4wLGE9cj4+PjA7cmV0dXJuIG8rKG4+Pj4wKSsoKGkmYXwoaXxhKSZ+KGkrYT4+PjApKT4+PjMxKXwwfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7aW11bGg6ZnVuY3Rpb24odCxlKXt2YXIgcj02NTUzNSxuPSt0LGk9K2Usbz1uJnIsYT1pJnIsZj1uPj4xNixzPWk+PjE2LHU9KGYqYT4+PjApKyhvKmE+Pj4xNik7cmV0dXJuIGYqcysodT4+MTYpKygobypzPj4+MCkrKHUmcik+PjE2KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2lzdWJoOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ+Pj4wLG89ZT4+PjAsYT1yPj4+MDtyZXR1cm4gby0obj4+PjApLSgofmkmYXx+KGleYSkmaS1hPj4+MCk+Pj4zMSl8MH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse3VtdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9NjU1MzUsbj0rdCxpPStlLG89biZyLGE9aSZyLGY9bj4+PjE2LHM9aT4+PjE2LHU9KGYqYT4+PjApKyhvKmE+Pj4xNik7cmV0dXJuIGYqcysodT4+PjE2KSsoKG8qcz4+PjApKyh1JnIpPj4+MTYpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTEpLG89cigxMyksYT1yKDkpO3IoOCkmJm4obi5QK3IoODUpLFwiT2JqZWN0XCIse19fZGVmaW5lR2V0dGVyX186ZnVuY3Rpb24odCxlKXthLmYoaSh0aGlzKSx0LHtnZXQ6byhlKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTEpLG89cigxMyksYT1yKDkpO3IoOCkmJm4obi5QK3IoODUpLFwiT2JqZWN0XCIse19fZGVmaW5lU2V0dGVyX186ZnVuY3Rpb24odCxlKXthLmYoaSh0aGlzKSx0LHtzZXQ6byhlKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTgzKSghMCk7bihuLlMsXCJPYmplY3RcIix7ZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4NCksbz1yKDE3KSxhPXIoMjApLGY9cigxMTkpO24obi5TLFwiT2JqZWN0XCIse2dldE93blByb3BlcnR5RGVzY3JpcHRvcnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9byh0KSxuPWEuZixzPWkociksdT17fSxoPTA7cy5sZW5ndGg+aDspZih1LGU9c1toKytdLG4ocixlKSk7cmV0dXJuIHV9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMSksbz1yKDI5KSxhPXIoMjEpLGY9cigyMCkuZjtyKDgpJiZuKG4uUCtyKDg1KSxcIk9iamVjdFwiLHtfX2xvb2t1cEdldHRlcl9fOmZ1bmN0aW9uKHQpe3ZhciBlLHI9aSh0aGlzKSxuPW8odCwhMCk7ZG8gaWYoZT1mKHIsbikpcmV0dXJuIGUuZ2V0O3doaWxlKHI9YShyKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMSksbz1yKDI5KSxhPXIoMjEpLGY9cigyMCkuZjtyKDgpJiZuKG4uUCtyKDg1KSxcIk9iamVjdFwiLHtfX2xvb2t1cFNldHRlcl9fOmZ1bmN0aW9uKHQpe3ZhciBlLHI9aSh0aGlzKSxuPW8odCwhMCk7ZG8gaWYoZT1mKHIsbikpcmV0dXJuIGUuc2V0O3doaWxlKHI9YShyKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODMpKCExKTtuKG4uUyxcIk9iamVjdFwiLHt2YWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cig0KSxvPXIoMzIpLGE9cigxMzEpKCksZj1yKDcpKFwib2JzZXJ2YWJsZVwiKSxzPXIoMTMpLHU9cigzKSxoPXIoNDApLGM9cig0NSksZD1yKDE0KSxsPXIoNTUpLHA9bC5SRVRVUk4sYj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA6cyh0KX0sdj1mdW5jdGlvbih0KXt2YXIgZT10Ll9jO2UmJih0Ll9jPXZvaWQgMCxlKCkpfSx5PWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10Ll9vfSxtPWZ1bmN0aW9uKHQpe3kodCl8fCh0Ll9vPXZvaWQgMCx2KHQpKX0sZz1mdW5jdGlvbih0LGUpe3UodCksdGhpcy5fYz12b2lkIDAsdGhpcy5fbz10LHQ9bmV3IHcodGhpcyk7dHJ5e3ZhciByPWUodCksbj1yO251bGwhPXImJihcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnVuc3Vic2NyaWJlP3I9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKCl9OnMociksdGhpcy5fYz1yKX1jYXRjaChlKXtyZXR1cm4gdm9pZCB0LmVycm9yKGUpfXkodGhpcykmJnYodGhpcyl9O2cucHJvdG90eXBlPWMoe30se3Vuc3Vic2NyaWJlOmZ1bmN0aW9uKCl7bSh0aGlzKX19KTt2YXIgdz1mdW5jdGlvbih0KXt0aGlzLl9zPXR9O3cucHJvdG90eXBlPWMoe30se25leHQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcztpZigheShlKSl7dmFyIHI9ZS5fbzt0cnl7dmFyIG49YihyLm5leHQpO2lmKG4pcmV0dXJuIG4uY2FsbChyLHQpfWNhdGNoKHQpe3RyeXttKGUpfWZpbmFsbHl7dGhyb3cgdH19fX0sZXJyb3I6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcztpZih5KGUpKXRocm93IHQ7dmFyIHI9ZS5fbztlLl9vPXZvaWQgMDt0cnl7dmFyIG49YihyLmVycm9yKTtpZighbil0aHJvdyB0O3Q9bi5jYWxsKHIsdCl9Y2F0Y2godCl7dHJ5e3YoZSl9ZmluYWxseXt0aHJvdyB0fX1yZXR1cm4gdihlKSx0fSxjb21wbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zO2lmKCF5KGUpKXt2YXIgcj1lLl9vO2UuX289dm9pZCAwO3RyeXt2YXIgbj1iKHIuY29tcGxldGUpO3Q9bj9uLmNhbGwocix0KTp2b2lkIDB9Y2F0Y2godCl7dHJ5e3YoZSl9ZmluYWxseXt0aHJvdyB0fX1yZXR1cm4gdihlKSx0fX19KTt2YXIgXz1mdW5jdGlvbih0KXtoKHRoaXMsXyxcIk9ic2VydmFibGVcIixcIl9mXCIpLl9mPXModCl9O2MoXy5wcm90b3R5cGUse3N1YnNjcmliZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGcodCx0aGlzLl9mKX0sZm9yRWFjaDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcoby5Qcm9taXNlfHxpLlByb21pc2UpKGZ1bmN0aW9uKHIsbil7cyh0KTt2YXIgaT1lLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2godCl7bih0KSxpLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpuLGNvbXBsZXRlOnJ9KX0pfX0pLGMoXyx7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzP3RoaXM6XyxyPWIodSh0KVtmXSk7aWYocil7dmFyIG49dShyLmNhbGwodCkpO3JldHVybiBuLmNvbnN0cnVjdG9yPT09ZT9uOm5ldyBlKGZ1bmN0aW9uKHQpe3JldHVybiBuLnN1YnNjcmliZSh0KX0pfXJldHVybiBuZXcgZShmdW5jdGlvbihlKXt2YXIgcj0hMTtyZXR1cm4gYShmdW5jdGlvbigpe2lmKCFyKXt0cnl7aWYobCh0LCExLGZ1bmN0aW9uKHQpe2lmKGUubmV4dCh0KSxyKXJldHVybiBwfSk9PT1wKXJldHVybn1jYXRjaCh0KXtpZihyKXRocm93IHQ7cmV0dXJuIHZvaWQgZS5lcnJvcih0KX1lLmNvbXBsZXRlKCl9fSksZnVuY3Rpb24oKXtyPSEwfX0pfSxvZjpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KGUpO3Q8ZTspclt0XT1hcmd1bWVudHNbdCsrXTtyZXR1cm4gbmV3KFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXM/dGhpczpfKShmdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gYShmdW5jdGlvbigpe2lmKCFlKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoOysrbilpZih0Lm5leHQocltuXSksZSlyZXR1cm47dC5jb21wbGV0ZSgpfX0pLGZ1bmN0aW9uKCl7ZT0hMH19KX19KSxkKF8ucHJvdG90eXBlLGYsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG4obi5HLHtPYnNlcnZhYmxlOl99KSxyKDQ2KShcIk9ic2VydmFibGVcIil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1uLmtleSxhPW4uc2V0O24uZXhwKHtkZWZpbmVNZXRhZGF0YTpmdW5jdGlvbih0LGUscixuKXthKHQsZSxpKHIpLG8obikpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89bi5rZXksYT1uLm1hcCxmPW4uc3RvcmU7bi5leHAoe2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpvKGFyZ3VtZW50c1syXSksbj1hKGkoZSksciwhMSk7aWYodm9pZCAwPT09bnx8IW4uZGVsZXRlKHQpKXJldHVybiExO2lmKG4uc2l6ZSlyZXR1cm4hMDt2YXIgcz1mLmdldChlKTtyZXR1cm4gcy5kZWxldGUociksISFzLnNpemV8fGYuZGVsZXRlKGUpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxOTIpLGk9cigxNjgpLG89cigzNCksYT1yKDMpLGY9cigyMSkscz1vLmtleXMsdT1vLmtleSxoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9cyh0LGUpLG89Zih0KTtpZihudWxsPT09bylyZXR1cm4gcjt2YXIgYT1oKG8sZSk7cmV0dXJuIGEubGVuZ3RoP3IubGVuZ3RoP2kobmV3IG4oci5jb25jYXQoYSkpKTphOnJ9O28uZXhwKHtnZXRNZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGgoYSh0KSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOnUoYXJndW1lbnRzWzFdKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1yKDIxKSxhPW4uaGFzLGY9bi5nZXQscz1uLmtleSx1PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hKHQsZSxyKTtpZihuKXJldHVybiBmKHQsZSxyKTt2YXIgaT1vKGUpO3JldHVybiBudWxsIT09aT91KHQsaSxyKTp2b2lkIDB9O24uZXhwKHtnZXRNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB1KHQsaShlKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnMoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1uLmtleXMsYT1uLmtleTtuLmV4cCh7Z2V0T3duTWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBvKGkodCksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDphKGFyZ3VtZW50c1sxXSkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89bi5nZXQsYT1uLmtleTtuLmV4cCh7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LGkoZSksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89cigyMSksYT1uLmhhcyxmPW4ua2V5LHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWEodCxlLHIpO2lmKG4pcmV0dXJuITA7dmFyIGk9byhlKTtyZXR1cm4gbnVsbCE9PWkmJnModCxpLHIpfTtuLmV4cCh7aGFzTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcyh0LGkoZSksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpmKGFyZ3VtZW50c1syXSkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89bi5oYXMsYT1uLmtleTtuLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LGkoZSksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89cigxMyksYT1uLmtleSxmPW4uc2V0O24uZXhwKHttZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2YodCxlLCh2b2lkIDAhPT1uP2k6bykociksYShuKSl9fX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUCtuLlIsXCJTZXRcIix7dG9KU09OOnIoMTcyKShcIlNldFwiKX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTM1KSghMCk7bihuLlAsXCJTdHJpbmdcIix7YXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI0KSxvPXIoMTApLGE9cig4MyksZj1yKDgxKSxzPVJlZ0V4cC5wcm90b3R5cGUsdT1mdW5jdGlvbih0LGUpe3RoaXMuX3I9dCx0aGlzLl9zPWV9O3IoMTI3KSh1LFwiUmVnRXhwIFN0cmluZ1wiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fci5leGVjKHRoaXMuX3MpO3JldHVybnt2YWx1ZTp0LGRvbmU6bnVsbD09PXR9fSksbihuLlAsXCJTdHJpbmdcIix7bWF0Y2hBbGw6ZnVuY3Rpb24odCl7aWYoaSh0aGlzKSwhYSh0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSByZWdleHAhXCIpO3ZhciBlPVN0cmluZyh0aGlzKSxyPVwiZmxhZ3NcImluIHM/U3RyaW5nKHQuZmxhZ3MpOmYuY2FsbCh0KSxuPW5ldyBSZWdFeHAodC5zb3VyY2UsfnIuaW5kZXhPZihcImdcIik/cjpcImdcIityKTtyZXR1cm4gbi5sYXN0SW5kZXg9byh0Lmxhc3RJbmRleCksbmV3IHUobixlKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE4OCk7bihuLlAsXCJTdHJpbmdcIix7cGFkRW5kOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwhMSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxODgpO24obi5QLFwiU3RyaW5nXCIse3BhZFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwhMCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDU4KShcInRyaW1MZWZ0XCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcywxKX19LFwidHJpbVN0YXJ0XCIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cig1OCkoXCJ0cmltUmlnaHRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLDIpfX0sXCJ0cmltRW5kXCIpfSxmdW5jdGlvbih0LGUscil7cigxNDEpKFwiYXN5bmNJdGVyYXRvclwiKX0sZnVuY3Rpb24odCxlLHIpe3IoMTQxKShcIm9ic2VydmFibGVcIil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiU3lzdGVtXCIse2dsb2JhbDpyKDQpfSl9LGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49cigxNDMpLGk9cigxNSksbz1yKDQpLGE9cigxNCksZj1yKDU2KSxzPXIoNyksdT1zKFwiaXRlcmF0b3JcIiksaD1zKFwidG9TdHJpbmdUYWdcIiksYz1mLkFycmF5LGQ9W1wiTm9kZUxpc3RcIixcIkRPTVRva2VuTGlzdFwiLFwiTWVkaWFMaXN0XCIsXCJTdHlsZVNoZWV0TGlzdFwiLFwiQ1NTUnVsZUxpc3RcIl0sbD0wO2w8NTtsKyspe3ZhciBwLGI9ZFtsXSx2PW9bYl0seT12JiZ2LnByb3RvdHlwZTtpZih5KXt5W3VdfHxhKHksdSxjKSx5W2hdfHxhKHksaCxiKSxmW2JdPWM7Zm9yKHAgaW4gbil5W3BdfHxpKHkscCxuW3BdLCEwKX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTM5KTtuKG4uRytuLkIse3NldEltbWVkaWF0ZTppLnNldCxjbGVhckltbWVkaWF0ZTppLmNsZWFyfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigwKSxvPXIoODIpLGE9cigyODcpLGY9bi5uYXZpZ2F0b3Iscz0hIWYmJi9NU0lFIC5cXC4vLnRlc3QoZi51c2VyQWdlbnQpLHU9ZnVuY3Rpb24odCl7cmV0dXJuIHM/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChvKGEsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMiksXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOkZ1bmN0aW9uKGUpKSxyKX06dH07aShpLkcraS5CK2kuRipzLHtzZXRUaW1lb3V0OnUobi5zZXRUaW1lb3V0KSxzZXRJbnRlcnZhbDp1KG4uc2V0SW50ZXJ2YWwpfSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDQxMCkscigzNDkpLHIoMzUxKSxyKDM1MCkscigzNTMpLHIoMzU1KSxyKDM2MCkscigzNTQpLHIoMzUyKSxyKDM2MikscigzNjEpLHIoMzU3KSxyKDM1OCkscigzNTYpLHIoMzQ4KSxyKDM1OSkscigzNjMpLHIoMzY0KSxyKDMxNikscigzMTgpLHIoMzE3KSxyKDM2NikscigzNjUpLHIoMzM2KSxyKDM0NikscigzNDcpLHIoMzM3KSxyKDMzOCkscigzMzkpLHIoMzQwKSxyKDM0MSkscigzNDIpLHIoMzQzKSxyKDM0NCkscigzNDUpLHIoMzE5KSxyKDMyMCkscigzMjEpLHIoMzIyKSxyKDMyMykscigzMjQpLHIoMzI1KSxyKDMyNikscigzMjcpLHIoMzI4KSxyKDMyOSkscigzMzApLHIoMzMxKSxyKDMzMikscigzMzMpLHIoMzM0KSxyKDMzNSkscigzOTcpLHIoNDAyKSxyKDQwOSkscig0MDApLHIoMzkyKSxyKDM5MykscigzOTgpLHIoNDAzKSxyKDQwNSkscigzODgpLHIoMzg5KSxyKDM5MCkscigzOTEpLHIoMzk0KSxyKDM5NSkscigzOTYpLHIoMzk5KSxyKDQwMSkscig0MDQpLHIoNDA2KSxyKDQwNykscig0MDgpLHIoMzExKSxyKDMxMykscigzMTIpLHIoMzE1KSxyKDMxNCkscigzMDApLHIoMjk4KSxyKDMwNCkscigzMDEpLHIoMzA3KSxyKDMwOSkscigyOTcpLHIoMzAzKSxyKDI5NCkscigzMDgpLHIoMjkyKSxyKDMwNikscigzMDUpLHIoMjk5KSxyKDMwMikscigyOTEpLHIoMjkzKSxyKDI5NikscigyOTUpLHIoMzEwKSxyKDE0MykscigzODIpLHIoMzg3KSxyKDE5MSkscigzODMpLHIoMzg0KSxyKDM4NSkscigzODYpLHIoMzY3KSxyKDE5MCkscigxOTIpLHIoMTkzKSxyKDQyMikscig0MTEpLHIoNDEyKSxyKDQxNykscig0MjApLHIoNDIxKSxyKDQxNSkscig0MTgpLHIoNDE2KSxyKDQxOSkscig0MTMpLHIoNDE0KSxyKDM2OCkscigzNjkpLHIoMzcwKSxyKDM3MSkscigzNzIpLHIoMzc1KSxyKDM3MykscigzNzQpLHIoMzc2KSxyKDM3NykscigzNzgpLHIoMzc5KSxyKDM4MSkscigzODApLHIoNDIzKSxyKDQ0OSkscig0NTIpLHIoNDUxKSxyKDQ1Mykscig0NTQpLHIoNDUwKSxyKDQ1NSkscig0NTYpLHIoNDM0KSxyKDQzNykscig0MzMpLHIoNDMxKSxyKDQzMikscig0MzUpLHIoNDM2KSxyKDQyNikscig0NDgpLHIoNDU3KSxyKDQyNSkscig0MjcpLHIoNDI5KSxyKDQyOCkscig0MzApLHIoNDM5KSxyKDQ0MCkscig0NDIpLHIoNDQxKSxyKDQ0NCkscig0NDMpLHIoNDQ1KSxyKDQ0Nikscig0NDcpLHIoNDI0KSxyKDQzOCkscig0NjApLHIoNDU5KSxyKDQ1OCksdC5leHBvcnRzPXIoMzIpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoNDYzKShcImVkMjU1MTlcIil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24obixpKXtmdW5jdGlvbiBvKHQpe1wic3RyaW5nXCI9PXR5cGVvZiB0P3Q9e2JpbmRpbmdzOnR9OnR8fCh0PXt9KSx0Ll9fcHJvdG9fXz1jLHQubW9kdWxlX3Jvb3R8fCh0Lm1vZHVsZV9yb290PWUuZ2V0Um9vdChlLmdldEZpbGVOYW1lKCkpKSxcIi5ub2RlXCIhPWYuZXh0bmFtZSh0LmJpbmRpbmdzKSYmKHQuYmluZGluZ3MrPVwiLm5vZGVcIik7Zm9yKHZhciByLG4saSxvPVtdLGE9MCx1PXQudHJ5Lmxlbmd0aDthPHU7YSsrKXtyPXMuYXBwbHkobnVsbCx0LnRyeVthXS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV18fGV9KSksby5wdXNoKHIpO3RyeXtyZXR1cm4gbj10LnBhdGg/IWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEVycm9yKCdDYW5ub3QgZmluZCBtb2R1bGUgXCIuXCInKTt0aHJvdyB0LmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsdH0oKTohZnVuY3Rpb24oKXt2YXIgdD1uZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIG1vZHVsZSBcIi5cIicpO3Rocm93IHQuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIix0fSgpLHQucGF0aHx8KG4ucGF0aD1yKSxufWNhdGNoKHQpe2lmKCEvbm90IGZpbmQvaS50ZXN0KHQubWVzc2FnZSkpdGhyb3cgdH19dGhyb3cgaT1uZXcgRXJyb3IoXCJDb3VsZCBub3QgbG9jYXRlIHRoZSBiaW5kaW5ncyBmaWxlLiBUcmllZDpcXG5cIitvLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5hcnJvdytlfSkuam9pbihcIlxcblwiKSksaS50cmllcz1vLGl9dmFyIGE9cig0ODkpLGY9cig1OTQpLHM9Zi5qb2luLHU9Zi5kaXJuYW1lLGg9YS5leGlzdHNTeW5jfHxmLmV4aXN0c1N5bmMsYz17YXJyb3c6bi5lbnYuTk9ERV9CSU5ESU5HU19BUlJPV3x8XCIg4oaSIFwiLGNvbXBpbGVkOm4uZW52Lk5PREVfQklORElOR1NfQ09NUElMRURfRElSfHxcImNvbXBpbGVkXCIscGxhdGZvcm06bi5wbGF0Zm9ybSxhcmNoOm4uYXJjaCx2ZXJzaW9uOm4udmVyc2lvbnMubm9kZSxiaW5kaW5nczpcImJpbmRpbmdzLm5vZGVcIix0cnk6W1tcIm1vZHVsZV9yb290XCIsXCJidWlsZFwiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcImJ1aWxkXCIsXCJEZWJ1Z1wiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcImJ1aWxkXCIsXCJSZWxlYXNlXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwib3V0XCIsXCJEZWJ1Z1wiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcIkRlYnVnXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwib3V0XCIsXCJSZWxlYXNlXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwiUmVsZWFzZVwiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcImJ1aWxkXCIsXCJkZWZhdWx0XCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwiY29tcGlsZWRcIixcInZlcnNpb25cIixcInBsYXRmb3JtXCIsXCJhcmNoXCIsXCJiaW5kaW5nc1wiXV19O3QuZXhwb3J0cz1lPW8sZS5nZXRGaWxlTmFtZT1mdW5jdGlvbih0KXt2YXIgZSxyPUVycm9yLnByZXBhcmVTdGFja1RyYWNlLG49RXJyb3Iuc3RhY2tUcmFjZUxpbWl0LG89e307cmV0dXJuIEVycm9yLnN0YWNrVHJhY2VMaW1pdD0xMCxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1mdW5jdGlvbihyLG4pe2Zvcih2YXIgbz0wLGE9bi5sZW5ndGg7bzxhO28rKylpZihlPW5bb10uZ2V0RmlsZU5hbWUoKSxlIT09aSl7aWYoIXQpcmV0dXJuO2lmKGUhPT10KXJldHVybn19LEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKG8pLG8uc3RhY2ssRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9cixFcnJvci5zdGFja1RyYWNlTGltaXQ9bixlfSxlLmdldFJvb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dSh0KTs7KXtpZihcIi5cIj09PXImJihyPW4uY3dkKCkpLGgocyhyLFwicGFja2FnZS5qc29uXCIpKXx8aChzKHIsXCJub2RlX21vZHVsZXNcIikpKXJldHVybiByO2lmKGU9PT1yKXRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgbW9kdWxlIHJvb3QgZ2l2ZW4gZmlsZTogXCInK3QrJ1wiLiBEbyB5b3UgaGF2ZSBhIGBwYWNrYWdlLmpzb25gIGZpbGU/ICcpO2U9cixyPXMocixcIi4uXCIpfX19KS5jYWxsKGUscigyNiksXCIvaW5kZXguanNcIil9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtPX1JET05MWTowLE9fV1JPTkxZOjEsT19SRFdSOjIsU19JRk1UOjYxNDQwLFNfSUZSRUc6MzI3NjgsU19JRkRJUjoxNjM4NCxTX0lGQ0hSOjgxOTIsU19JRkJMSzoyNDU3NixTX0lGSUZPOjQwOTYsU19JRkxOSzo0MDk2MCxTX0lGU09DSzo0OTE1MixPX0NSRUFUOjUxMixPX0VYQ0w6MjA0OCxPX05PQ1RUWToxMzEwNzIsT19UUlVOQzoxMDI0LE9fQVBQRU5EOjgsT19ESVJFQ1RPUlk6MTA0ODU3NixPX05PRk9MTE9XOjI1NixPX1NZTkM6MTI4LE9fU1lNTElOSzoyMDk3MTUyLE9fTk9OQkxPQ0s6NCxTX0lSV1hVOjQ0OCxTX0lSVVNSOjI1NixTX0lXVVNSOjEyOCxTX0lYVVNSOjY0LFNfSVJXWEc6NTYsU19JUkdSUDozMixTX0lXR1JQOjE2LFNfSVhHUlA6OCxTX0lSV1hPOjcsU19JUk9USDo0LFNfSVdPVEg6MixTX0lYT1RIOjEsRTJCSUc6NyxFQUNDRVM6MTMsRUFERFJJTlVTRTo0OCxFQUREUk5PVEFWQUlMOjQ5LEVBRk5PU1VQUE9SVDo0NyxFQUdBSU46MzUsRUFMUkVBRFk6MzcsRUJBREY6OSxFQkFETVNHOjk0LEVCVVNZOjE2LEVDQU5DRUxFRDo4OSxFQ0hJTEQ6MTAsRUNPTk5BQk9SVEVEOjUzLEVDT05OUkVGVVNFRDo2MSxFQ09OTlJFU0VUOjU0LEVERUFETEs6MTEsRURFU1RBRERSUkVROjM5LEVET006MzMsRURRVU9UOjY5LEVFWElTVDoxNyxFRkFVTFQ6MTQsRUZCSUc6MjcsRUhPU1RVTlJFQUNIOjY1LEVJRFJNOjkwLEVJTFNFUTo5MixFSU5QUk9HUkVTUzozNixFSU5UUjo0LEVJTlZBTDoyMixFSU86NSxFSVNDT05OOjU2LEVJU0RJUjoyMSxFTE9PUDo2MixFTUZJTEU6MjQsRU1MSU5LOjMxLEVNU0dTSVpFOjQwLEVNVUxUSUhPUDo5NSxFTkFNRVRPT0xPTkc6NjMsRU5FVERPV046NTAsRU5FVFJFU0VUOjUyLEVORVRVTlJFQUNIOjUxLEVORklMRToyMyxFTk9CVUZTOjU1LEVOT0RBVEE6OTYsRU5PREVWOjE5LEVOT0VOVDoyLEVOT0VYRUM6OCxFTk9MQ0s6NzcsRU5PTElOSzo5NyxFTk9NRU06MTIsRU5PTVNHOjkxLEVOT1BST1RPT1BUOjQyLEVOT1NQQzoyOCxFTk9TUjo5OCxFTk9TVFI6OTksRU5PU1lTOjc4LEVOT1RDT05OOjU3LEVOT1RESVI6MjAsRU5PVEVNUFRZOjY2LEVOT1RTT0NLOjM4LEVOT1RTVVA6NDUsRU5PVFRZOjI1LEVOWElPOjYsRU9QTk9UU1VQUDoxMDIsRU9WRVJGTE9XOjg0LEVQRVJNOjEsRVBJUEU6MzIsRVBST1RPOjEwMCxFUFJPVE9OT1NVUFBPUlQ6NDMsRVBST1RPVFlQRTo0MSxFUkFOR0U6MzQsRVJPRlM6MzAsRVNQSVBFOjI5LEVTUkNIOjMsRVNUQUxFOjcwLEVUSU1FOjEwMSxFVElNRURPVVQ6NjAsRVRYVEJTWToyNixFV09VTERCTE9DSzozNSxFWERFVjoxOCxTSUdIVVA6MSxTSUdJTlQ6MixTSUdRVUlUOjMsU0lHSUxMOjQsU0lHVFJBUDo1LFNJR0FCUlQ6NixTSUdJT1Q6NixTSUdCVVM6MTAsU0lHRlBFOjgsU0lHS0lMTDo5LFNJR1VTUjE6MzAsU0lHU0VHVjoxMSxTSUdVU1IyOjMxLFNJR1BJUEU6MTMsU0lHQUxSTToxNCxTSUdURVJNOjE1LFNJR0NITEQ6MjAsU0lHQ09OVDoxOSxTSUdTVE9QOjE3LFNJR1RTVFA6MTgsU0lHVFRJTjoyMSxTSUdUVE9VOjIyLFNJR1VSRzoxNixTSUdYQ1BVOjI0LFNJR1hGU1o6MjUsU0lHVlRBTFJNOjI2LFNJR1BST0Y6MjcsU0lHV0lOQ0g6MjgsU0lHSU86MjMsU0lHU1lTOjEyLFNTTF9PUF9BTEw6MjE0NzQ4NjcxOSxTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OOjI2MjE0NCxTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFOjQxOTQzMDQsU1NMX09QX0NJU0NPX0FOWUNPTk5FQ1Q6MzI3NjgsU1NMX09QX0NPT0tJRV9FWENIQU5HRTo4MTkyLFNTTF9PUF9DUllQVE9QUk9fVExTRVhUX0JVRzoyMTQ3NDgzNjQ4LFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFM6MjA0OCxTU0xfT1BfRVBIRU1FUkFMX1JTQTowLFNTTF9PUF9MRUdBQ1lfU0VSVkVSX0NPTk5FQ1Q6NCxTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVI6MzIsU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRzoxLFNTTF9PUF9NU0lFX1NTTFYyX1JTQV9QQURESU5HOjAsU1NMX09QX05FVFNDQVBFX0NBX0ROX0JVRzo1MzY4NzA5MTIsU1NMX09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUc6MixTU0xfT1BfTkVUU0NBUEVfREVNT19DSVBIRVJfQ0hBTkdFX0JVRzoxMDczNzQxODI0LFNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRzo4LFNTTF9PUF9OT19DT01QUkVTU0lPTjoxMzEwNzIsU1NMX09QX05PX1FVRVJZX01UVTo0MDk2LFNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTjo2NTUzNixTU0xfT1BfTk9fU1NMdjI6MTY3NzcyMTYsU1NMX09QX05PX1NTTHYzOjMzNTU0NDMyLFNTTF9PUF9OT19USUNLRVQ6MTYzODQsU1NMX09QX05PX1RMU3YxOjY3MTA4ODY0LFNTTF9PUF9OT19UTFN2MV8xOjI2ODQzNTQ1NixTU0xfT1BfTk9fVExTdjFfMjoxMzQyMTc3MjgsU1NMX09QX1BLQ1MxX0NIRUNLXzE6MCxTU0xfT1BfUEtDUzFfQ0hFQ0tfMjowLFNTTF9PUF9TSU5HTEVfREhfVVNFOjEwNDg1NzYsU1NMX09QX1NJTkdMRV9FQ0RIX1VTRTo1MjQyODgsU1NMX09QX1NTTEVBWV8wODBfQ0xJRU5UX0RIX0JVRzoxMjgsU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRzowLFNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUc6NTEyLFNTTF9PUF9UTFNfRDVfQlVHOjI1NixTU0xfT1BfVExTX1JPTExCQUNLX0JVRzo4Mzg4NjA4LEVOR0lORV9NRVRIT0RfRFNBOjIsRU5HSU5FX01FVEhPRF9ESDo0LEVOR0lORV9NRVRIT0RfUkFORDo4LEVOR0lORV9NRVRIT0RfRUNESDoxNixFTkdJTkVfTUVUSE9EX0VDRFNBOjMyLEVOR0lORV9NRVRIT0RfQ0lQSEVSUzo2NCxFTkdJTkVfTUVUSE9EX0RJR0VTVFM6MTI4LEVOR0lORV9NRVRIT0RfU1RPUkU6MjU2LEVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUzo1MTIsRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFM6MTAyNCxFTkdJTkVfTUVUSE9EX0FMTDo2NTUzNSxFTkdJTkVfTUVUSE9EX05PTkU6MCxESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2LEZfT0s6MCxSX09LOjQsV19PSzoyLFhfT0s6MSxVVl9VRFBfUkVVU0VBRERSOjR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17bmFtZTpcImVsbGlwdGljXCIsdmVyc2lvbjpcIjYuMy4yXCIsZGVzY3JpcHRpb246XCJFQyBjcnlwdG9ncmFwaHlcIixtYWluOlwibGliL2VsbGlwdGljLmpzXCIsZmlsZXM6W1wibGliXCJdLHNjcmlwdHM6e2pzY3M6XCJqc2NzIGJlbmNobWFya3MvKi5qcyBsaWIvKi5qcyBsaWIvKiovKi5qcyBsaWIvKiovKiovKi5qcyB0ZXN0L2luZGV4LmpzXCIsanNoaW50OlwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLGxpbnQ6XCJucG0gcnVuIGpzY3MgJiYgbnBtIHJ1biBqc2hpbnRcIix1bml0OlwiaXN0YW5idWwgdGVzdCBfbW9jaGEgLS1yZXBvcnRlcj1zcGVjIHRlc3QvaW5kZXguanNcIix0ZXN0OlwibnBtIHJ1biBsaW50ICYmIG5wbSBydW4gdW5pdFwiLHZlcnNpb246XCJncnVudCBkaXN0ICYmIGdpdCBhZGQgZGlzdC9cIn0scmVwb3NpdG9yeTp7dHlwZTpcImdpdFwiLHVybDpcImdpdCtzc2g6Ly9naXRAZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljLmdpdFwifSxrZXl3b3JkczpbXCJFQ1wiLFwiRWxsaXB0aWNcIixcImN1cnZlXCIsXCJDcnlwdG9ncmFwaHlcIl0sYXV0aG9yOntuYW1lOlwiRmVkb3IgSW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn0sbGljZW5zZTpcIk1JVFwiLGJ1Z3M6e3VybDpcImh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljL2lzc3Vlc1wifSxob21lcGFnZTpcImh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljXCIsZGV2RGVwZW5kZW5jaWVzOnticmZzOlwiXjEuNC4zXCIsY292ZXJhbGxzOlwiXjIuMTEuM1wiLGdydW50OlwiXjAuNC41XCIsXCJncnVudC1icm93c2VyaWZ5XCI6XCJeNS4wLjBcIixcImdydW50LWNvbnRyaWItY29ubmVjdFwiOlwiXjEuMC4wXCIsXCJncnVudC1jb250cmliLWNvcHlcIjpcIl4xLjAuMFwiLFwiZ3J1bnQtY29udHJpYi11Z2xpZnlcIjpcIl4xLjAuMVwiLFwiZ3J1bnQtbW9jaGEtaXN0YW5idWxcIjpcIl4zLjAuMVwiLFwiZ3J1bnQtc2F1Y2VsYWJzXCI6XCJeOC42LjJcIixpc3RhbmJ1bDpcIl4wLjQuMlwiLGpzY3M6XCJeMi45LjBcIixqc2hpbnQ6XCJeMi42LjBcIixtb2NoYTpcIl4yLjEuMFwifSxkZXBlbmRlbmNpZXM6e1wiYm4uanNcIjpcIl40LjQuMFwiLGJyb3JhbmQ6XCJeMS4wLjFcIixcImhhc2guanNcIjpcIl4xLjAuMFwiLGluaGVyaXRzOlwiXjIuMC4xXCJ9LGdpdEhlYWQ6XCJjYmFjZTQ2ODNhNGE1NDhkYzAzMDZlZjM2NzU2MTUxYTIwMjk5Y2Q1XCIsX2lkOlwiZWxsaXB0aWNANi4zLjJcIixfc2hhc3VtOlwiZTRjODFlMDgyOWNmMGE2NWFiNzBlOTk4YjgyMzI3MjNiNWMxYmM0OFwiLF9mcm9tOlwiZWxsaXB0aWNAPj02LjAuMCA8Ny4wLjBcIixfbnBtVmVyc2lvbjpcIjMuMTAuM1wiLF9ub2RlVmVyc2lvbjpcIjYuMy4wXCIsX25wbVVzZXI6e25hbWU6XCJpbmR1dG55XCIsZW1haWw6XCJmZWRvckBpbmR1dG55LmNvbVwifSxkaXN0OntzaGFzdW06XCJlNGM4MWUwODI5Y2YwYTY1YWI3MGU5OThiODIzMjcyM2I1YzFiYzQ4XCIsdGFyYmFsbDpcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VsbGlwdGljLy0vZWxsaXB0aWMtNi4zLjIudGd6XCJ9LG1haW50YWluZXJzOlt7bmFtZTpcImluZHV0bnlcIixlbWFpbDpcImZlZG9yQGluZHV0bnkuY29tXCJ9XSxfbnBtT3BlcmF0aW9uYWxJbnRlcm5hbDp7aG9zdDpcInBhY2thZ2VzLTE2LWVhc3QuaW50ZXJuYWwubnBtanMuY29tXCIsdG1wOlwidG1wL2VsbGlwdGljLTYuMy4yLnRnel8xNDczOTM4ODM3MjA1XzAuMzEwODkwMzQ2Mjk5ODU2OVwifSxkaXJlY3Rvcmllczp7fSxfcmVzb2x2ZWQ6XCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuMy4yLnRnelwifX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e1wiMi4xNi44NDAuMS4xMDEuMy40LjEuMVwiOlwiYWVzLTEyOC1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjJcIjpcImFlcy0xMjgtY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zXCI6XCJhZXMtMTI4LW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNFwiOlwiYWVzLTEyOC1jZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxXCI6XCJhZXMtMTkyLWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjJcIjpcImFlcy0xOTItY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yM1wiOlwiYWVzLTE5Mi1vZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0XCI6XCJhZXMtMTkyLWNmYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDFcIjpcImFlcy0yNTYtZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MlwiOlwiYWVzLTI1Ni1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzXCI6XCJhZXMtMjU2LW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDRcIjpcImFlcy0yNTYtY2ZiXCJ9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17bmFtZTpcImVsbGlwdGljXCIsdmVyc2lvbjpcIjYuMy4yXCIsZGVzY3JpcHRpb246XCJFQyBjcnlwdG9ncmFwaHlcIixtYWluOlwibGliL2VsbGlwdGljLmpzXCIsZmlsZXM6W1wibGliXCJdLHNjcmlwdHM6e2pzY3M6XCJqc2NzIGJlbmNobWFya3MvKi5qcyBsaWIvKi5qcyBsaWIvKiovKi5qcyBsaWIvKiovKiovKi5qcyB0ZXN0L2luZGV4LmpzXCIsanNoaW50OlwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLGxpbnQ6XCJucG0gcnVuIGpzY3MgJiYgbnBtIHJ1biBqc2hpbnRcIix1bml0OlwiaXN0YW5idWwgdGVzdCBfbW9jaGEgLS1yZXBvcnRlcj1zcGVjIHRlc3QvaW5kZXguanNcIix0ZXN0OlwibnBtIHJ1biBsaW50ICYmIG5wbSBydW4gdW5pdFwiLHZlcnNpb246XCJncnVudCBkaXN0ICYmIGdpdCBhZGQgZGlzdC9cIn0scmVwb3NpdG9yeTp7dHlwZTpcImdpdFwiLHVybDpcImdpdCtzc2g6Ly9naXRAZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljLmdpdFwifSxrZXl3b3JkczpbXCJFQ1wiLFwiRWxsaXB0aWNcIixcImN1cnZlXCIsXCJDcnlwdG9ncmFwaHlcIl0sYXV0aG9yOntuYW1lOlwiRmVkb3IgSW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn0sbGljZW5zZTpcIk1JVFwiLGJ1Z3M6e3VybDpcImh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljL2lzc3Vlc1wifSxob21lcGFnZTpcImh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljXCIsZGV2RGVwZW5kZW5jaWVzOnticmZzOlwiXjEuNC4zXCIsY292ZXJhbGxzOlwiXjIuMTEuM1wiLGdydW50OlwiXjAuNC41XCIsXCJncnVudC1icm93c2VyaWZ5XCI6XCJeNS4wLjBcIixcImdydW50LWNvbnRyaWItY29ubmVjdFwiOlwiXjEuMC4wXCIsXCJncnVudC1jb250cmliLWNvcHlcIjpcIl4xLjAuMFwiLFwiZ3J1bnQtY29udHJpYi11Z2xpZnlcIjpcIl4xLjAuMVwiLFwiZ3J1bnQtbW9jaGEtaXN0YW5idWxcIjpcIl4zLjAuMVwiLFwiZ3J1bnQtc2F1Y2VsYWJzXCI6XCJeOC42LjJcIixpc3RhbmJ1bDpcIl4wLjQuMlwiLGpzY3M6XCJeMi45LjBcIixqc2hpbnQ6XCJeMi42LjBcIixtb2NoYTpcIl4yLjEuMFwifSxkZXBlbmRlbmNpZXM6e1wiYm4uanNcIjpcIl40LjQuMFwiLGJyb3JhbmQ6XCJeMS4wLjFcIixcImhhc2guanNcIjpcIl4xLjAuMFwiLGluaGVyaXRzOlwiXjIuMC4xXCJ9LGdpdEhlYWQ6XCJjYmFjZTQ2ODNhNGE1NDhkYzAzMDZlZjM2NzU2MTUxYTIwMjk5Y2Q1XCIsX2lkOlwiZWxsaXB0aWNANi4zLjJcIixfc2hhc3VtOlwiZTRjODFlMDgyOWNmMGE2NWFiNzBlOTk4YjgyMzI3MjNiNWMxYmM0OFwiLF9mcm9tOlwiZWxsaXB0aWNAPj02LjAuMCA8Ny4wLjBcIixfbnBtVmVyc2lvbjpcIjMuMTAuM1wiLF9ub2RlVmVyc2lvbjpcIjYuMy4wXCIsX25wbVVzZXI6e25hbWU6XCJpbmR1dG55XCIsZW1haWw6XCJmZWRvckBpbmR1dG55LmNvbVwifSxkaXN0OntzaGFzdW06XCJlNGM4MWUwODI5Y2YwYTY1YWI3MGU5OThiODIzMjcyM2I1YzFiYzQ4XCIsdGFyYmFsbDpcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VsbGlwdGljLy0vZWxsaXB0aWMtNi4zLjIudGd6XCJ9LG1haW50YWluZXJzOlt7bmFtZTpcImluZHV0bnlcIixlbWFpbDpcImZlZG9yQGluZHV0bnkuY29tXCJ9XSxfbnBtT3BlcmF0aW9uYWxJbnRlcm5hbDp7aG9zdDpcInBhY2thZ2VzLTE2LWVhc3QuaW50ZXJuYWwubnBtanMuY29tXCIsdG1wOlwidG1wL2VsbGlwdGljLTYuMy4yLnRnel8xNDczOTM4ODM3MjA1XzAuMzEwODkwMzQ2Mjk5ODU2OVwifSxkaXJlY3Rvcmllczp7fSxfcmVzb2x2ZWQ6XCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuMy4yLnRnelwifX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e21vZHAxOntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHAyOntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwNTp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwMTQ6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwMTU6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDE2OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZlwiXG59LG1vZHAxNzp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwMTg6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZlwifX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjFcIjpcImFlcy0xMjgtZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yXCI6XCJhZXMtMTI4LWNiY1wiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuM1wiOlwiYWVzLTEyOC1vZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjRcIjpcImFlcy0xMjgtY2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMVwiOlwiYWVzLTE5Mi1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIyXCI6XCJhZXMtMTkyLWNiY1wiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjNcIjpcImFlcy0xOTItb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNFwiOlwiYWVzLTE5Mi1jZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxXCI6XCJhZXMtMjU2LWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDJcIjpcImFlcy0yNTYtY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40M1wiOlwiYWVzLTI1Ni1vZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0XCI6XCJhZXMtMjU2LWNmYlwifX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9cigxOTUpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLE9iamVjdC5nZXRQcm90b3R5cGVPZihlKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoMTk1KSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcyxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDE5NiksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtuKHRoaXMsdCksdGhpcy5zaXplPTB9cmV0dXJuIGkodCxbe2tleTpcIndyaXRlVUludFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5zaXplKz1lfX0se2tleTpcIndyaXRlVmFyVUludFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKGUuaXNCdWZmZXIodCkpcmV0dXJuIHZvaWQgdGhpcy53cml0ZVZhck9jdGV0U3RyaW5nKHQpO2lmKCFvKHQpKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbXVzdCBiZSBhbiBpbnRlZ2VyXCIpO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoXCJVSW50IG11c3QgYmUgcG9zaXRpdmVcIik7dmFyIHI9TWF0aC5jZWlsKHQudG9TdHJpbmcoMikubGVuZ3RoLzgpO3RoaXMud3JpdGVWYXJPY3RldFN0cmluZyh7bGVuZ3RoOnJ9KX19LHtrZXk6XCJ3cml0ZU9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLnNraXAoZSl9fSx7a2V5Olwid3JpdGVWYXJPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuc2tpcCgxKSx0Lmxlbmd0aD4xMjcpe3ZhciBlPU1hdGguY2VpbCh0Lmxlbmd0aC50b1N0cmluZygyKS5sZW5ndGgvOCk7dGhpcy5za2lwKGUpfXRoaXMuc2tpcCh0Lmxlbmd0aCl9fSx7a2V5Olwid3JpdGVcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNpemUrPXQubGVuZ3RofX0se2tleTpcInNraXBcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNpemUrPXR9fSx7a2V5OlwiZ2V0U2l6ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX19XSksdH0oKTtbMSwyLDQsOF0uZm9yRWFjaChmdW5jdGlvbih0KXthLnByb3RvdHlwZVtcIndyaXRlVUludFwiKzgqdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMud3JpdGVVSW50KGUsdCl9fSksdC5leHBvcnRzPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDQ3MSksYT1yKDQ3MCksZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7bih0aGlzLHQpLHRoaXMuYnVmZmVyPWUsdGhpcy5jdXJzb3I9MCx0aGlzLmJvb2ttYXJrcz1bXX1yZXR1cm4gaSh0LFt7a2V5OlwiYm9va21hcmtcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYm9va21hcmtzLnB1c2godGhpcy5jdXJzb3IpfX0se2tleTpcInJlc3RvcmVcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY3Vyc29yPXRoaXMuYm9va21hcmtzLnBvcCgpfX0se2tleTpcImVuc3VyZUF2YWlsYWJsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuYnVmZmVyLmxlbmd0aDx0aGlzLmN1cnNvcit0KXRocm93IG5ldyBvKFwiVHJpZWQgdG8gcmVhZCBcIit0K1wiIGJ5dGVzLCBidXQgb25seSBcIisodGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuY3Vyc29yKStcIiBieXRlcyBhdmFpbGFibGVcIil9fSx7a2V5OlwicmVhZFVJbnRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBlZWtVSW50KHQpO3JldHVybiB0aGlzLmN1cnNvcis9dCxlfX0se2tleTpcInBlZWtVSW50XCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoMD09PWUpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBFcnJvcihcIlRyaWVkIHRvIHJlYWQgaW50ZWdlciB3aXRoIG5lZ2F0aXZlIGxlbmd0aCAocHJvdmlkZWQ6IFwiK2UrXCIpXCIpO2lmKGU+dC5NQVhfSU5UX0JZVEVTKXRocm93IG5ldyBFcnJvcihcIlRyaWVkIHRvIHJlYWQgdG9vIGxhcmdlIGludGVnZXIgKHJlcXVlc3RlZDogXCIrZStcIiwgbWF4OiBcIit0Lk1BWF9JTlRfQllURVMrXCIpXCIpO3RoaXMuZW5zdXJlQXZhaWxhYmxlKGUpO3ZhciByPXRoaXMuYnVmZmVyLnJlYWRVSW50QkUodGhpcy5jdXJzb3IsZSk7cmV0dXJuIHJ9fSx7a2V5Olwic2tpcFVJbnRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNraXAodCl9fSx7a2V5OlwicmVhZFVJbnQ2NFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucmVhZFVJbnQzMigpLHRoaXMucmVhZFVJbnQzMigpXX19LHtrZXk6XCJwZWVrVUludDY0XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJvb2ttYXJrKCk7dmFyIHQ9dGhpcy5yZWFkVUludDY0KCk7cmV0dXJuIHRoaXMucmVzdG9yZSgpLHR9fSx7a2V5Olwic2tpcFVJbnQ2NFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5za2lwKDgpfX0se2tleTpcInJlYWRWYXJVSW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRWYXJPY3RldFN0cmluZygpO2lmKGUubGVuZ3RoPnQuTUFYX0lOVF9CWVRFUyl0aHJvdyBuZXcgYShcIlVJbnQgb2YgbGVuZ3RoIFwiK2UubGVuZ3RoK1wiIHRvbyBsYXJnZSB0byBwYXJzZSBhcyBpbnRlZ2VyIChtYXg6IFwiK3QuTUFYX0lOVF9CWVRFUytcIilcIik7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBhKFwiVUludCBvZiBsZW5ndGggMCBpcyBpbnZhbGlkXCIpO3JldHVybiBlLnJlYWRVSW50QkUoMCxlLmxlbmd0aCl9fSx7a2V5OlwicGVla1ZhclVJbnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYm9va21hcmsoKTt2YXIgdD10aGlzLnJlYWRWYXJVSW50KCk7cmV0dXJuIHRoaXMucmVzdG9yZSgpLHR9fSx7a2V5Olwic2tpcFZhclVJbnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2tpcFZhck9jdGV0U3RyaW5nKCl9fSx7a2V5OlwicmVhZE9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVhZCh0KX19LHtrZXk6XCJwZWVrT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wZWVrKHQpfX0se2tleTpcInNraXBPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNraXAodCl9fSx7a2V5OlwicmVhZExlbmd0aFByZWZpeFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVUludDgoKTtpZihlJnQuSElHSF9CSVQpe3ZhciByPWUmdC5MT1dFUl9TRVZFTl9CSVRTLG49dGhpcy5yZWFkVUludChyKSxpPU1hdGgubWF4KDEyOCwxPDw4KihyLTEpKTtpZihuPGkpdGhyb3cgbmV3IGEoXCJMZW5ndGggcHJlZml4IGVuY29kaW5nIGlzIG5vdCBjYW5vbmljYWw6IFwiK24rXCIgZW5jb2RlZCBpbiBcIityK1wiIGJ5dGVzXCIpO3JldHVybiBufXJldHVybiBlfX0se2tleTpcInJlYWRWYXJPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkTGVuZ3RoUHJlZml4KCk7cmV0dXJuIHRoaXMucmVhZCh0KX19LHtrZXk6XCJwZWVrVmFyT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYm9va21hcmsoKTt2YXIgdD10aGlzLnJlYWRWYXJPY3RldFN0cmluZygpO3JldHVybiB0aGlzLnJlc3RvcmUoKSx0fX0se2tleTpcInNraXBWYXJPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkTGVuZ3RoUHJlZml4KCk7cmV0dXJuIHRoaXMuc2tpcCh0KX19LHtrZXk6XCJyZWFkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5lbnN1cmVBdmFpbGFibGUodCk7dmFyIGU9dGhpcy5idWZmZXIuc2xpY2UodGhpcy5jdXJzb3IsdGhpcy5jdXJzb3IrdCk7cmV0dXJuIHRoaXMuY3Vyc29yKz10LGV9fSx7a2V5OlwicGVla1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVuc3VyZUF2YWlsYWJsZSh0KSx0aGlzLmJ1ZmZlci5zbGljZSh0aGlzLmN1cnNvcix0aGlzLmN1cnNvcit0KX19LHtrZXk6XCJza2lwXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5lbnN1cmVBdmFpbGFibGUodCksdGhpcy5jdXJzb3IrPXR9fV0sW3trZXk6XCJmcm9tXCIsdmFsdWU6ZnVuY3Rpb24ocil7aWYoZS5pc0J1ZmZlcihyKSlyZXR1cm4gbmV3IHQocik7aWYociBpbnN0YW5jZW9mIHQpcmV0dXJuIG5ldyB0KHIuYnVmZmVyLnNsaWNlKHIuY3Vyc29yKSk7dGhyb3cgbmV3IEVycm9yKFwiUmVhZGVyIG11c3QgYmUgZ2l2ZW4gYSBCdWZmZXJcIil9fV0pLHR9KCk7Zi5ISUdIX0JJVD0xMjgsZi5MT1dFUl9TRVZFTl9CSVRTPTEyNyxmLk1BWF9JTlRfQllURVM9NixbXCJyZWFkXCIsXCJwZWVrXCIsXCJza2lwXCJdLmZvckVhY2goZnVuY3Rpb24odCl7WzEsMiw0XS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2YucHJvdG90eXBlW3QrXCJVSW50XCIrOCplXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW3QrXCJVSW50XCJdKGUpfX0pfSksdC5leHBvcnRzPWZ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDE5NiksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtuKHRoaXMsdCksdGhpcy5jb21wb25lbnRzPVtdfXJldHVybiBpKHQsW3trZXk6XCJ3cml0ZVVJbnRcIix2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKCFvKHQpKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbXVzdCBiZSBhbiBpbnRlZ2VyXCIpO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoXCJVSW50IG11c3QgYmUgcG9zaXRpdmVcIik7aWYocjw9MCl0aHJvdyBuZXcgRXJyb3IoXCJVSW50IGxlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvXCIpO2lmKHQudG9TdHJpbmcoMikubGVuZ3RoPjgqcil0aHJvdyBuZXcgRXJyb3IoXCJVSW50IFwiK3QrXCIgZG9lcyBub3QgZml0IGluIFwiK3IrXCIgYnl0ZXNcIik7dmFyIG49bmV3IGUocik7bi53cml0ZVVJbnRCRSh0LDAsciksdGhpcy53cml0ZShuKX19LHtrZXk6XCJ3cml0ZVZhclVJbnRcIix2YWx1ZTpmdW5jdGlvbihyKXtpZihlLmlzQnVmZmVyKHIpKXJldHVybiB2b2lkIHRoaXMud3JpdGVWYXJPY3RldFN0cmluZyhyKTtpZighbyhyKSl0aHJvdyBuZXcgRXJyb3IoXCJVSW50IG11c3QgYmUgYW4gaW50ZWdlclwiKTtpZihyPDApdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIHBvc2l0aXZlXCIpO2lmKHI+dC5NQVhfU0FGRV9JTlRFR0VSKXRocm93IG5ldyBFcnJvcihcIlVJbnQgaXMgdG9vIGxhcmdlXCIpO3ZhciBuPU1hdGguY2VpbChyLnRvU3RyaW5nKDIpLmxlbmd0aC84KSxpPW5ldyBlKG4pO2kud3JpdGVVSW50QkUociwwLG4pLHRoaXMud3JpdGVWYXJPY3RldFN0cmluZyhpKX19LHtrZXk6XCJ3cml0ZVVJbnQ2NFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKG8oZSkmJmU8PXQuTUFYX1NBRkVfSU5URUdFUilyZXR1cm4gdGhpcy53cml0ZVVJbnQzMihNYXRoLmZsb29yKGUvNDI5NDk2NzI5NikpLHZvaWQgdGhpcy53cml0ZVVJbnQzMig0Mjk0OTY3Mjk1JmUpO2lmKCFBcnJheS5pc0FycmF5KGUpfHwyIT09ZS5sZW5ndGh8fCFvKGVbMF0pfHwhbyhlWzFdKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgNjQtYml0IGludGVnZXIgYXMgYW4gYXJyYXkgb2YgdHdvIDMyLWJpdCB3b3Jkc1wiKTt0aGlzLndyaXRlVUludDMyKGVbMF0pLHRoaXMud3JpdGVVSW50MzIoZVsxXSl9fSx7a2V5Olwid3JpdGVPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGghPT1lKXRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCBsZW5ndGggZm9yIG9jdGV0IHN0cmluZyAoYWN0dWFsOiBcIit0Lmxlbmd0aCtcIiwgZXhwZWN0ZWQ6IFwiK2UrXCIpXCIpO3RoaXMud3JpdGUodCl9fSx7a2V5Olwid3JpdGVWYXJPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RzIGEgYnVmZmVyXCIpO3ZhciByPTEyODtpZih0Lmxlbmd0aDw9MTI3KXRoaXMud3JpdGVVSW50OCh0Lmxlbmd0aCk7ZWxzZXt2YXIgbj1NYXRoLmNlaWwodC5sZW5ndGgudG9TdHJpbmcoMikubGVuZ3RoLzgpO3RoaXMud3JpdGVVSW50OChyfG4pLHRoaXMud3JpdGVVSW50KHQubGVuZ3RoLG4pfXRoaXMud3JpdGUodCl9fSx7a2V5Olwid3JpdGVcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmNvbXBvbmVudHMucHVzaCh0KX19LHtrZXk6XCJnZXRCdWZmZXJcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlLmNvbmNhdCh0aGlzLmNvbXBvbmVudHMpfX1dKSx0fSgpO2EuTUFYX1NBRkVfSU5URUdFUj1yKDQ3NSksWzEsMiw0XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2EucHJvdG90eXBlW1wid3JpdGVVSW50XCIrOCp0XT1mdW5jdGlvbihlKXt0aGlzLndyaXRlVUludChlLHQpfX0pLHQuZXhwb3J0cz1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe3IoNDg3KSx0LmV4cG9ydHM9OTAwNzE5OTI1NDc0MDk5MX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDc2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG4odCksdm9pZCAwPT09ZSlyZXR1cm4gdDtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5jYWxsKGUscil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdC5jYWxsKGUscixuKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihyLG4saSl7cmV0dXJuIHQuY2FsbChlLHIsbixpKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDg5KSxpPXIoMjAwKS5kb2N1bWVudCxvPW4oaSkmJm4oaS5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG8/aS5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDgzKSxpPXIoNDg0KTt0LmV4cG9ydHM9cigxNDQpP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbi5mKHQsZSxpKDEscikpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cix0fX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz0hcigxNDQpJiYhcigxOTkpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyKDQ3OSkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODkpLGk9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIW4odCkmJmlzRmluaXRlKHQpJiZpKHQpPT09dH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ3NyksaT1yKDQ4MSksbz1yKDQ4NSksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5mPXIoMTQ0KT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLHIpe2lmKG4odCksZT1vKGUsITApLG4ociksaSl0cnl7cmV0dXJuIGEodCxlLHIpfWNhdGNoKHQpe31pZihcImdldFwiaW4gcnx8XCJzZXRcImluIHIpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIHImJih0W2VdPXIudmFsdWUpLHR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDg5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighbih0KSlyZXR1cm4gdDt2YXIgcixpO2lmKGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudmFsdWVPZikmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTtpZighZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE5OCk7bihuLlMsXCJOdW1iZXJcIix7aXNJbnRlZ2VyOnIoNDgyKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxOTgpO24obi5TLFwiTnVtYmVyXCIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSxmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUodCxlLHIsbil7dFtlXT1yPj4yNCYyNTUsdFtlKzFdPXI+PjE2JjI1NSx0W2UrMl09cj4+OCYyNTUsdFtlKzNdPTI1NSZyLHRbZSs0XT1uPj4yNCYyNTUsdFtlKzVdPW4+PjE2JjI1NSx0W2UrNl09bj4+OCYyNTUsdFtlKzddPTI1NSZufWZ1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgbyxhPTA7Zm9yKG89MDtvPGk7bysrKWF8PXRbZStvXV5yW24rb107cmV0dXJuKDEmYS0xPj4+OCktMX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuKHQsZSxyLGksMTYpfWZ1bmN0aW9uIG8odCxlLHIsaSl7cmV0dXJuIG4odCxlLHIsaSwzMil9ZnVuY3Rpb24gYSh0LGUscixuKXtmb3IodmFyIGksbz0yNTUmblswXXwoMjU1Jm5bMV0pPDw4fCgyNTUmblsyXSk8PDE2fCgyNTUmblszXSk8PDI0LGE9MjU1JnJbMF18KDI1NSZyWzFdKTw8OHwoMjU1JnJbMl0pPDwxNnwoMjU1JnJbM10pPDwyNCxmPTI1NSZyWzRdfCgyNTUmcls1XSk8PDh8KDI1NSZyWzZdKTw8MTZ8KDI1NSZyWzddKTw8MjQscz0yNTUmcls4XXwoMjU1JnJbOV0pPDw4fCgyNTUmclsxMF0pPDwxNnwoMjU1JnJbMTFdKTw8MjQsdT0yNTUmclsxMl18KDI1NSZyWzEzXSk8PDh8KDI1NSZyWzE0XSk8PDE2fCgyNTUmclsxNV0pPDwyNCxoPTI1NSZuWzRdfCgyNTUmbls1XSk8PDh8KDI1NSZuWzZdKTw8MTZ8KDI1NSZuWzddKTw8MjQsYz0yNTUmZVswXXwoMjU1JmVbMV0pPDw4fCgyNTUmZVsyXSk8PDE2fCgyNTUmZVszXSk8PDI0LGQ9MjU1JmVbNF18KDI1NSZlWzVdKTw8OHwoMjU1JmVbNl0pPDwxNnwoMjU1JmVbN10pPDwyNCxsPTI1NSZlWzhdfCgyNTUmZVs5XSk8PDh8KDI1NSZlWzEwXSk8PDE2fCgyNTUmZVsxMV0pPDwyNCxwPTI1NSZlWzEyXXwoMjU1JmVbMTNdKTw8OHwoMjU1JmVbMTRdKTw8MTZ8KDI1NSZlWzE1XSk8PDI0LGI9MjU1Jm5bOF18KDI1NSZuWzldKTw8OHwoMjU1Jm5bMTBdKTw8MTZ8KDI1NSZuWzExXSk8PDI0LHY9MjU1JnJbMTZdfCgyNTUmclsxN10pPDw4fCgyNTUmclsxOF0pPDwxNnwoMjU1JnJbMTldKTw8MjQseT0yNTUmclsyMF18KDI1NSZyWzIxXSk8PDh8KDI1NSZyWzIyXSk8PDE2fCgyNTUmclsyM10pPDwyNCxtPTI1NSZyWzI0XXwoMjU1JnJbMjVdKTw8OHwoMjU1JnJbMjZdKTw8MTZ8KDI1NSZyWzI3XSk8PDI0LGc9MjU1JnJbMjhdfCgyNTUmclsyOV0pPDw4fCgyNTUmclszMF0pPDwxNnwoMjU1JnJbMzFdKTw8MjQsdz0yNTUmblsxMl18KDI1NSZuWzEzXSk8PDh8KDI1NSZuWzE0XSk8PDE2fCgyNTUmblsxNV0pPDwyNCxfPW8sTT1hLFM9ZixFPXMsQT11LGs9aCx4PWMsST1kLEI9bCxPPXAsUj1iLFA9dixUPXksaj1tLEM9ZyxOPXcsTD0wO0w8MjA7TCs9MilpPV8rVHwwLEFePWk8PDd8aT4+PjI1LGk9QStffDAsQl49aTw8OXxpPj4+MjMsaT1CK0F8MCxUXj1pPDwxM3xpPj4+MTksaT1UK0J8MCxfXj1pPDwxOHxpPj4+MTQsaT1rK018MCxPXj1pPDw3fGk+Pj4yNSxpPU8ra3wwLGpePWk8PDl8aT4+PjIzLGk9aitPfDAsTV49aTw8MTN8aT4+PjE5LGk9TStqfDAsa149aTw8MTh8aT4+PjE0LGk9Uit4fDAsQ149aTw8N3xpPj4+MjUsaT1DK1J8MCxTXj1pPDw5fGk+Pj4yMyxpPVMrQ3wwLHhePWk8PDEzfGk+Pj4xOSxpPXgrU3wwLFJePWk8PDE4fGk+Pj4xNCxpPU4rUHwwLEVePWk8PDd8aT4+PjI1LGk9RStOfDAsSV49aTw8OXxpPj4+MjMsaT1JK0V8MCxQXj1pPDwxM3xpPj4+MTksaT1QK0l8MCxOXj1pPDwxOHxpPj4+MTQsaT1fK0V8MCxNXj1pPDw3fGk+Pj4yNSxpPU0rX3wwLFNePWk8PDl8aT4+PjIzLGk9UytNfDAsRV49aTw8MTN8aT4+PjE5LGk9RStTfDAsX149aTw8MTh8aT4+PjE0LGk9aytBfDAseF49aTw8N3xpPj4+MjUsaT14K2t8MCxJXj1pPDw5fGk+Pj4yMyxpPUkreHwwLEFePWk8PDEzfGk+Pj4xOSxpPUErSXwwLGtePWk8PDE4fGk+Pj4xNCxpPVIrT3wwLFBePWk8PDd8aT4+PjI1LGk9UCtSfDAsQl49aTw8OXxpPj4+MjMsaT1CK1B8MCxPXj1pPDwxM3xpPj4+MTksaT1PK0J8MCxSXj1pPDwxOHxpPj4+MTQsaT1OK0N8MCxUXj1pPDw3fGk+Pj4yNSxpPVQrTnwwLGpePWk8PDl8aT4+PjIzLGk9aitUfDAsQ149aTw8MTN8aT4+PjE5LGk9QytqfDAsTl49aTw8MTh8aT4+PjE0O189XytvfDAsTT1NK2F8MCxTPVMrZnwwLEU9RStzfDAsQT1BK3V8MCxrPWsraHwwLHg9eCtjfDAsST1JK2R8MCxCPUIrbHwwLE89TytwfDAsUj1SK2J8MCxQPVArdnwwLFQ9VCt5fDAsaj1qK218MCxDPUMrZ3wwLE49Tit3fDAsdFswXT1fPj4+MCYyNTUsdFsxXT1fPj4+OCYyNTUsdFsyXT1fPj4+MTYmMjU1LHRbM109Xz4+PjI0JjI1NSx0WzRdPU0+Pj4wJjI1NSx0WzVdPU0+Pj44JjI1NSx0WzZdPU0+Pj4xNiYyNTUsdFs3XT1NPj4+MjQmMjU1LHRbOF09Uz4+PjAmMjU1LHRbOV09Uz4+PjgmMjU1LHRbMTBdPVM+Pj4xNiYyNTUsdFsxMV09Uz4+PjI0JjI1NSx0WzEyXT1FPj4+MCYyNTUsdFsxM109RT4+PjgmMjU1LHRbMTRdPUU+Pj4xNiYyNTUsdFsxNV09RT4+PjI0JjI1NSx0WzE2XT1BPj4+MCYyNTUsdFsxN109QT4+PjgmMjU1LHRbMThdPUE+Pj4xNiYyNTUsdFsxOV09QT4+PjI0JjI1NSx0WzIwXT1rPj4+MCYyNTUsdFsyMV09az4+PjgmMjU1LHRbMjJdPWs+Pj4xNiYyNTUsdFsyM109az4+PjI0JjI1NSx0WzI0XT14Pj4+MCYyNTUsdFsyNV09eD4+PjgmMjU1LHRbMjZdPXg+Pj4xNiYyNTUsdFsyN109eD4+PjI0JjI1NSx0WzI4XT1JPj4+MCYyNTUsdFsyOV09ST4+PjgmMjU1LHRbMzBdPUk+Pj4xNiYyNTUsdFszMV09ST4+PjI0JjI1NSx0WzMyXT1CPj4+MCYyNTUsdFszM109Qj4+PjgmMjU1LHRbMzRdPUI+Pj4xNiYyNTUsdFszNV09Qj4+PjI0JjI1NSx0WzM2XT1PPj4+MCYyNTUsdFszN109Tz4+PjgmMjU1LHRbMzhdPU8+Pj4xNiYyNTUsdFszOV09Tz4+PjI0JjI1NSx0WzQwXT1SPj4+MCYyNTUsdFs0MV09Uj4+PjgmMjU1LHRbNDJdPVI+Pj4xNiYyNTUsdFs0M109Uj4+PjI0JjI1NSx0WzQ0XT1QPj4+MCYyNTUsdFs0NV09UD4+PjgmMjU1LHRbNDZdPVA+Pj4xNiYyNTUsdFs0N109UD4+PjI0JjI1NSx0WzQ4XT1UPj4+MCYyNTUsdFs0OV09VD4+PjgmMjU1LHRbNTBdPVQ+Pj4xNiYyNTUsdFs1MV09VD4+PjI0JjI1NSx0WzUyXT1qPj4+MCYyNTUsdFs1M109aj4+PjgmMjU1LHRbNTRdPWo+Pj4xNiYyNTUsdFs1NV09aj4+PjI0JjI1NSx0WzU2XT1DPj4+MCYyNTUsdFs1N109Qz4+PjgmMjU1LHRbNThdPUM+Pj4xNiYyNTUsdFs1OV09Qz4+PjI0JjI1NSx0WzYwXT1OPj4+MCYyNTUsdFs2MV09Tj4+PjgmMjU1LHRbNjJdPU4+Pj4xNiYyNTUsdFs2M109Tj4+PjI0JjI1NX1mdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaSxvPTI1NSZuWzBdfCgyNTUmblsxXSk8PDh8KDI1NSZuWzJdKTw8MTZ8KDI1NSZuWzNdKTw8MjQsYT0yNTUmclswXXwoMjU1JnJbMV0pPDw4fCgyNTUmclsyXSk8PDE2fCgyNTUmclszXSk8PDI0LGY9MjU1JnJbNF18KDI1NSZyWzVdKTw8OHwoMjU1JnJbNl0pPDwxNnwoMjU1JnJbN10pPDwyNCxzPTI1NSZyWzhdfCgyNTUmcls5XSk8PDh8KDI1NSZyWzEwXSk8PDE2fCgyNTUmclsxMV0pPDwyNCx1PTI1NSZyWzEyXXwoMjU1JnJbMTNdKTw8OHwoMjU1JnJbMTRdKTw8MTZ8KDI1NSZyWzE1XSk8PDI0LGg9MjU1Jm5bNF18KDI1NSZuWzVdKTw8OHwoMjU1Jm5bNl0pPDwxNnwoMjU1Jm5bN10pPDwyNCxjPTI1NSZlWzBdfCgyNTUmZVsxXSk8PDh8KDI1NSZlWzJdKTw8MTZ8KDI1NSZlWzNdKTw8MjQsZD0yNTUmZVs0XXwoMjU1JmVbNV0pPDw4fCgyNTUmZVs2XSk8PDE2fCgyNTUmZVs3XSk8PDI0LGw9MjU1JmVbOF18KDI1NSZlWzldKTw8OHwoMjU1JmVbMTBdKTw8MTZ8KDI1NSZlWzExXSk8PDI0LHA9MjU1JmVbMTJdfCgyNTUmZVsxM10pPDw4fCgyNTUmZVsxNF0pPDwxNnwoMjU1JmVbMTVdKTw8MjQsYj0yNTUmbls4XXwoMjU1Jm5bOV0pPDw4fCgyNTUmblsxMF0pPDwxNnwoMjU1Jm5bMTFdKTw8MjQsdj0yNTUmclsxNl18KDI1NSZyWzE3XSk8PDh8KDI1NSZyWzE4XSk8PDE2fCgyNTUmclsxOV0pPDwyNCx5PTI1NSZyWzIwXXwoMjU1JnJbMjFdKTw8OHwoMjU1JnJbMjJdKTw8MTZ8KDI1NSZyWzIzXSk8PDI0LG09MjU1JnJbMjRdfCgyNTUmclsyNV0pPDw4fCgyNTUmclsyNl0pPDwxNnwoMjU1JnJbMjddKTw8MjQsZz0yNTUmclsyOF18KDI1NSZyWzI5XSk8PDh8KDI1NSZyWzMwXSk8PDE2fCgyNTUmclszMV0pPDwyNCx3PTI1NSZuWzEyXXwoMjU1Jm5bMTNdKTw8OHwoMjU1Jm5bMTRdKTw8MTZ8KDI1NSZuWzE1XSk8PDI0LF89byxNPWEsUz1mLEU9cyxBPXUsaz1oLHg9YyxJPWQsQj1sLE89cCxSPWIsUD12LFQ9eSxqPW0sQz1nLE49dyxMPTA7TDwyMDtMKz0yKWk9XytUfDAsQV49aTw8N3xpPj4+MjUsaT1BK198MCxCXj1pPDw5fGk+Pj4yMyxpPUIrQXwwLFRePWk8PDEzfGk+Pj4xOSxpPVQrQnwwLF9ePWk8PDE4fGk+Pj4xNCxpPWsrTXwwLE9ePWk8PDd8aT4+PjI1LGk9TytrfDAsal49aTw8OXxpPj4+MjMsaT1qK098MCxNXj1pPDwxM3xpPj4+MTksaT1NK2p8MCxrXj1pPDwxOHxpPj4+MTQsaT1SK3h8MCxDXj1pPDw3fGk+Pj4yNSxpPUMrUnwwLFNePWk8PDl8aT4+PjIzLGk9UytDfDAseF49aTw8MTN8aT4+PjE5LGk9eCtTfDAsUl49aTw8MTh8aT4+PjE0LGk9TitQfDAsRV49aTw8N3xpPj4+MjUsaT1FK058MCxJXj1pPDw5fGk+Pj4yMyxpPUkrRXwwLFBePWk8PDEzfGk+Pj4xOSxpPVArSXwwLE5ePWk8PDE4fGk+Pj4xNCxpPV8rRXwwLE1ePWk8PDd8aT4+PjI1LGk9TStffDAsU149aTw8OXxpPj4+MjMsaT1TK018MCxFXj1pPDwxM3xpPj4+MTksaT1FK1N8MCxfXj1pPDwxOHxpPj4+MTQsaT1rK0F8MCx4Xj1pPDw3fGk+Pj4yNSxpPXgra3wwLElePWk8PDl8aT4+PjIzLGk9SSt4fDAsQV49aTw8MTN8aT4+PjE5LGk9QStJfDAsa149aTw8MTh8aT4+PjE0LGk9UitPfDAsUF49aTw8N3xpPj4+MjUsaT1QK1J8MCxCXj1pPDw5fGk+Pj4yMyxpPUIrUHwwLE9ePWk8PDEzfGk+Pj4xOSxpPU8rQnwwLFJePWk8PDE4fGk+Pj4xNCxpPU4rQ3wwLFRePWk8PDd8aT4+PjI1LGk9VCtOfDAsal49aTw8OXxpPj4+MjMsaT1qK1R8MCxDXj1pPDwxM3xpPj4+MTksaT1DK2p8MCxOXj1pPDwxOHxpPj4+MTQ7dFswXT1fPj4+MCYyNTUsdFsxXT1fPj4+OCYyNTUsdFsyXT1fPj4+MTYmMjU1LHRbM109Xz4+PjI0JjI1NSx0WzRdPWs+Pj4wJjI1NSx0WzVdPWs+Pj44JjI1NSx0WzZdPWs+Pj4xNiYyNTUsdFs3XT1rPj4+MjQmMjU1LHRbOF09Uj4+PjAmMjU1LHRbOV09Uj4+PjgmMjU1LHRbMTBdPVI+Pj4xNiYyNTUsdFsxMV09Uj4+PjI0JjI1NSx0WzEyXT1OPj4+MCYyNTUsdFsxM109Tj4+PjgmMjU1LHRbMTRdPU4+Pj4xNiYyNTUsdFsxNV09Tj4+PjI0JjI1NSx0WzE2XT14Pj4+MCYyNTUsdFsxN109eD4+PjgmMjU1LHRbMThdPXg+Pj4xNiYyNTUsdFsxOV09eD4+PjI0JjI1NSx0WzIwXT1JPj4+MCYyNTUsdFsyMV09ST4+PjgmMjU1LHRbMjJdPUk+Pj4xNiYyNTUsdFsyM109ST4+PjI0JjI1NSx0WzI0XT1CPj4+MCYyNTUsdFsyNV09Qj4+PjgmMjU1LHRbMjZdPUI+Pj4xNiYyNTUsdFsyN109Qj4+PjI0JjI1NSx0WzI4XT1PPj4+MCYyNTUsdFsyOV09Tz4+PjgmMjU1LHRbMzBdPU8+Pj4xNiYyNTUsdFszMV09Tz4+PjI0JjI1NX1mdW5jdGlvbiBzKHQsZSxyLG4pe2EodCxlLHIsbil9ZnVuY3Rpb24gdSh0LGUscixuKXtmKHQsZSxyLG4pfWZ1bmN0aW9uIGgodCxlLHIsbixpLG8sYSl7dmFyIGYsdSxoPW5ldyBVaW50OEFycmF5KDE2KSxjPW5ldyBVaW50OEFycmF5KDY0KTtmb3IodT0wO3U8MTY7dSsrKWhbdV09MDtmb3IodT0wO3U8ODt1KyspaFt1XT1vW3VdO2Zvcig7aT49NjQ7KXtmb3IocyhjLGgsYSxkdCksdT0wO3U8NjQ7dSsrKXRbZSt1XT1yW24rdV1eY1t1XTtmb3IoZj0xLHU9ODt1PDE2O3UrKylmPWYrKDI1NSZoW3VdKXwwLGhbdV09MjU1JmYsZj4+Pj04O2ktPTY0LGUrPTY0LG4rPTY0fWlmKGk+MClmb3IocyhjLGgsYSxkdCksdT0wO3U8aTt1KyspdFtlK3VdPXJbbit1XV5jW3VdO3JldHVybiAwfWZ1bmN0aW9uIGModCxlLHIsbixpKXt2YXIgbyxhLGY9bmV3IFVpbnQ4QXJyYXkoMTYpLHU9bmV3IFVpbnQ4QXJyYXkoNjQpO2ZvcihhPTA7YTwxNjthKyspZlthXT0wO2ZvcihhPTA7YTw4O2ErKylmW2FdPW5bYV07Zm9yKDtyPj02NDspe2ZvcihzKHUsZixpLGR0KSxhPTA7YTw2NDthKyspdFtlK2FdPXVbYV07Zm9yKG89MSxhPTg7YTwxNjthKyspbz1vKygyNTUmZlthXSl8MCxmW2FdPTI1NSZvLG8+Pj49ODtyLT02NCxlKz02NH1pZihyPjApZm9yKHModSxmLGksZHQpLGE9MDthPHI7YSsrKXRbZSthXT11W2FdO3JldHVybiAwfWZ1bmN0aW9uIGQodCxlLHIsbixpKXt2YXIgbz1uZXcgVWludDhBcnJheSgzMik7dShvLG4saSxkdCk7Zm9yKHZhciBhPW5ldyBVaW50OEFycmF5KDgpLGY9MDtmPDg7ZisrKWFbZl09bltmKzE2XTtyZXR1cm4gYyh0LGUscixhLG8pfWZ1bmN0aW9uIGwodCxlLHIsbixpLG8sYSl7dmFyIGY9bmV3IFVpbnQ4QXJyYXkoMzIpO3UoZixvLGEsZHQpO2Zvcih2YXIgcz1uZXcgVWludDhBcnJheSg4KSxjPTA7Yzw4O2MrKylzW2NdPW9bYysxNl07cmV0dXJuIGgodCxlLHIsbixpLHMsZil9ZnVuY3Rpb24gcCh0LGUscixuLGksbyl7dmFyIGE9bmV3IGx0KG8pO3JldHVybiBhLnVwZGF0ZShyLG4saSksYS5maW5pc2godCxlKSwwfWZ1bmN0aW9uIGIodCxlLHIsbixvLGEpe3ZhciBmPW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gcChmLDAscixuLG8sYSksaSh0LGUsZiwwKX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIG87aWYocjwzMilyZXR1cm4tMTtmb3IobCh0LDAsZSwwLHIsbixpKSxwKHQsMTYsdCwzMixyLTMyLHQpLG89MDtvPDE2O28rKyl0W29dPTA7cmV0dXJuIDB9ZnVuY3Rpb24geSh0LGUscixuLGkpe3ZhciBvLGE9bmV3IFVpbnQ4QXJyYXkoMzIpO2lmKHI8MzIpcmV0dXJuLTE7aWYoZChhLDAsMzIsbixpKSwwIT09YihlLDE2LGUsMzIsci0zMixhKSlyZXR1cm4tMTtmb3IobCh0LDAsZSwwLHIsbixpKSxvPTA7bzwzMjtvKyspdFtvXT0wO3JldHVybiAwfWZ1bmN0aW9uIG0odCxlKXt2YXIgcjtmb3Iocj0wO3I8MTY7cisrKXRbcl09MHxlW3JdfWZ1bmN0aW9uIGcodCl7dmFyIGUscixuPTE7Zm9yKGU9MDtlPDE2O2UrKylyPXRbZV0rbis2NTUzNSxuPU1hdGguZmxvb3Ioci82NTUzNiksdFtlXT1yLTY1NTM2Km47dFswXSs9bi0xKzM3KihuLTEpfWZ1bmN0aW9uIHcodCxlLHIpe2Zvcih2YXIgbixpPX4oci0xKSxvPTA7bzwxNjtvKyspbj1pJih0W29dXmVbb10pLHRbb11ePW4sZVtvXV49bn1mdW5jdGlvbiBfKHQsZSl7dmFyIHIsbixpLG89dHQoKSxhPXR0KCk7Zm9yKHI9MDtyPDE2O3IrKylhW3JdPWVbcl07Zm9yKGcoYSksZyhhKSxnKGEpLG49MDtuPDI7bisrKXtmb3Iob1swXT1hWzBdLTY1NTE3LHI9MTtyPDE1O3IrKylvW3JdPWFbcl0tNjU1MzUtKG9bci0xXT4+MTYmMSksb1tyLTFdJj02NTUzNTtvWzE1XT1hWzE1XS0zMjc2Ny0ob1sxNF0+PjE2JjEpLGk9b1sxNV0+PjE2JjEsb1sxNF0mPTY1NTM1LHcoYSxvLDEtaSl9Zm9yKHI9MDtyPDE2O3IrKyl0WzIqcl09MjU1JmFbcl0sdFsyKnIrMV09YVtyXT4+OH1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoMzIpLG49bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBfKHIsdCksXyhuLGUpLG8ociwwLG4sMCl9ZnVuY3Rpb24gUyh0KXt2YXIgZT1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIF8oZSx0KSwxJmVbMF19ZnVuY3Rpb24gRSh0LGUpe3ZhciByO2ZvcihyPTA7cjwxNjtyKyspdFtyXT1lWzIqcl0rKGVbMipyKzFdPDw4KTt0WzE1XSY9MzI3Njd9ZnVuY3Rpb24gQSh0LGUscil7Zm9yKHZhciBuPTA7bjwxNjtuKyspdFtuXT1lW25dK3Jbbl19ZnVuY3Rpb24gayh0LGUscil7Zm9yKHZhciBuPTA7bjwxNjtuKyspdFtuXT1lW25dLXJbbl19ZnVuY3Rpb24geCh0LGUscil7dmFyIG4saSxvPTAsYT0wLGY9MCxzPTAsdT0wLGg9MCxjPTAsZD0wLGw9MCxwPTAsYj0wLHY9MCx5PTAsbT0wLGc9MCx3PTAsXz0wLE09MCxTPTAsRT0wLEE9MCxrPTAseD0wLEk9MCxCPTAsTz0wLFI9MCxQPTAsVD0wLGo9MCxDPTAsTj1yWzBdLEw9clsxXSxVPXJbMl0sej1yWzNdLEQ9cls0XSxxPXJbNV0sRj1yWzZdLEs9cls3XSxHPXJbOF0sVj1yWzldLEg9clsxMF0sWD1yWzExXSxZPXJbMTJdLFc9clsxM10sWj1yWzE0XSxKPXJbMTVdO249ZVswXSxvKz1uKk4sYSs9bipMLGYrPW4qVSxzKz1uKnosdSs9bipELGgrPW4qcSxjKz1uKkYsZCs9bipLLGwrPW4qRyxwKz1uKlYsYis9bipILHYrPW4qWCx5Kz1uKlksbSs9bipXLGcrPW4qWix3Kz1uKkosbj1lWzFdLGErPW4qTixmKz1uKkwscys9bipVLHUrPW4qeixoKz1uKkQsYys9bipxLGQrPW4qRixsKz1uKksscCs9bipHLGIrPW4qVix2Kz1uKkgseSs9bipYLG0rPW4qWSxnKz1uKlcsdys9bipaLF8rPW4qSixuPWVbMl0sZis9bipOLHMrPW4qTCx1Kz1uKlUsaCs9bip6LGMrPW4qRCxkKz1uKnEsbCs9bipGLHArPW4qSyxiKz1uKkcsdis9bipWLHkrPW4qSCxtKz1uKlgsZys9bipZLHcrPW4qVyxfKz1uKlosTSs9bipKLG49ZVszXSxzKz1uKk4sdSs9bipMLGgrPW4qVSxjKz1uKnosZCs9bipELGwrPW4qcSxwKz1uKkYsYis9bipLLHYrPW4qRyx5Kz1uKlYsbSs9bipILGcrPW4qWCx3Kz1uKlksXys9bipXLE0rPW4qWixTKz1uKkosbj1lWzRdLHUrPW4qTixoKz1uKkwsYys9bipVLGQrPW4qeixsKz1uKkQscCs9bipxLGIrPW4qRix2Kz1uKksseSs9bipHLG0rPW4qVixnKz1uKkgsdys9bipYLF8rPW4qWSxNKz1uKlcsUys9bipaLEUrPW4qSixuPWVbNV0saCs9bipOLGMrPW4qTCxkKz1uKlUsbCs9bip6LHArPW4qRCxiKz1uKnEsdis9bipGLHkrPW4qSyxtKz1uKkcsZys9bipWLHcrPW4qSCxfKz1uKlgsTSs9bipZLFMrPW4qVyxFKz1uKlosQSs9bipKLG49ZVs2XSxjKz1uKk4sZCs9bipMLGwrPW4qVSxwKz1uKnosYis9bipELHYrPW4qcSx5Kz1uKkYsbSs9bipLLGcrPW4qRyx3Kz1uKlYsXys9bipILE0rPW4qWCxTKz1uKlksRSs9bipXLEErPW4qWixrKz1uKkosbj1lWzddLGQrPW4qTixsKz1uKkwscCs9bipVLGIrPW4qeix2Kz1uKkQseSs9bipxLG0rPW4qRixnKz1uKkssdys9bipHLF8rPW4qVixNKz1uKkgsUys9bipYLEUrPW4qWSxBKz1uKlcsays9bipaLHgrPW4qSixuPWVbOF0sbCs9bipOLHArPW4qTCxiKz1uKlUsdis9bip6LHkrPW4qRCxtKz1uKnEsZys9bipGLHcrPW4qSyxfKz1uKkcsTSs9bipWLFMrPW4qSCxFKz1uKlgsQSs9bipZLGsrPW4qVyx4Kz1uKlosSSs9bipKLG49ZVs5XSxwKz1uKk4sYis9bipMLHYrPW4qVSx5Kz1uKnosbSs9bipELGcrPW4qcSx3Kz1uKkYsXys9bipLLE0rPW4qRyxTKz1uKlYsRSs9bipILEErPW4qWCxrKz1uKlkseCs9bipXLEkrPW4qWixCKz1uKkosbj1lWzEwXSxiKz1uKk4sdis9bipMLHkrPW4qVSxtKz1uKnosZys9bipELHcrPW4qcSxfKz1uKkYsTSs9bipLLFMrPW4qRyxFKz1uKlYsQSs9bipILGsrPW4qWCx4Kz1uKlksSSs9bipXLEIrPW4qWixPKz1uKkosbj1lWzExXSx2Kz1uKk4seSs9bipMLG0rPW4qVSxnKz1uKnosdys9bipELF8rPW4qcSxNKz1uKkYsUys9bipLLEUrPW4qRyxBKz1uKlYsays9bipILHgrPW4qWDtJKz1uKlk7Qis9bipXLE8rPW4qWixSKz1uKkosbj1lWzEyXSx5Kz1uKk4sbSs9bipMLGcrPW4qVSx3Kz1uKnosXys9bipELE0rPW4qcSxTKz1uKkYsRSs9bipLLEErPW4qRyxrKz1uKlYseCs9bipILEkrPW4qWCxCKz1uKlksTys9bipXLFIrPW4qWixQKz1uKkosbj1lWzEzXSxtKz1uKk4sZys9bipMLHcrPW4qVSxfKz1uKnosTSs9bipELFMrPW4qcSxFKz1uKkYsQSs9bipLLGsrPW4qRyx4Kz1uKlYsSSs9bipILEIrPW4qWCxPKz1uKlksUis9bipXLFArPW4qWixUKz1uKkosbj1lWzE0XSxnKz1uKk4sdys9bipMLF8rPW4qVSxNKz1uKnosUys9bipELEUrPW4qcSxBKz1uKkYsays9bipLLHgrPW4qRyxJKz1uKlYsQis9bipILE8rPW4qWCxSKz1uKlksUCs9bipXLFQrPW4qWixqKz1uKkosbj1lWzE1XSx3Kz1uKk4sXys9bipMLE0rPW4qVSxTKz1uKnosRSs9bipELEErPW4qcSxrKz1uKkYseCs9bipLLEkrPW4qRyxCKz1uKlYsTys9bipILFIrPW4qWCxQKz1uKlksVCs9bipXLGorPW4qWixDKz1uKkosbys9MzgqXyxhKz0zOCpNLGYrPTM4KlMscys9MzgqRSx1Kz0zOCpBLGgrPTM4KmssYys9MzgqeCxkKz0zOCpJLGwrPTM4KkIscCs9MzgqTyxiKz0zOCpSLHYrPTM4KlAseSs9MzgqVCxtKz0zOCpqLGcrPTM4KkMsaT0xLG49bytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxvPW4tNjU1MzYqaSxuPWEraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksYT1uLTY1NTM2Kmksbj1mK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGY9bi02NTUzNippLG49cytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxzPW4tNjU1MzYqaSxuPXUraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksdT1uLTY1NTM2Kmksbj1oK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGg9bi02NTUzNippLG49YytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxjPW4tNjU1MzYqaSxuPWQraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksZD1uLTY1NTM2Kmksbj1sK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGw9bi02NTUzNippLG49cCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxwPW4tNjU1MzYqaSxuPWIraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksYj1uLTY1NTM2Kmksbj12K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHY9bi02NTUzNippLG49eStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx5PW4tNjU1MzYqaSxuPW0raSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksbT1uLTY1NTM2Kmksbj1nK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGc9bi02NTUzNippLG49dytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx3PW4tNjU1MzYqaSxvKz1pLTErMzcqKGktMSksaT0xLG49bytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxvPW4tNjU1MzYqaSxuPWEraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksYT1uLTY1NTM2Kmksbj1mK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGY9bi02NTUzNippLG49cytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxzPW4tNjU1MzYqaSxuPXUraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksdT1uLTY1NTM2Kmksbj1oK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGg9bi02NTUzNippLG49YytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxjPW4tNjU1MzYqaSxuPWQraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksZD1uLTY1NTM2Kmksbj1sK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGw9bi02NTUzNippLG49cCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxwPW4tNjU1MzYqaSxuPWIraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksYj1uLTY1NTM2Kmksbj12K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHY9bi02NTUzNippLG49eStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx5PW4tNjU1MzYqaSxuPW0raSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksbT1uLTY1NTM2Kmksbj1nK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGc9bi02NTUzNippLG49dytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx3PW4tNjU1MzYqaSxvKz1pLTErMzcqKGktMSksdFswXT1vLHRbMV09YSx0WzJdPWYsdFszXT1zLHRbNF09dSx0WzVdPWgsdFs2XT1jLHRbN109ZCx0WzhdPWwsdFs5XT1wLHRbMTBdPWIsdFsxMV09dix0WzEyXT15LHRbMTNdPW07dFsxNF09Zzt0WzE1XT13fWZ1bmN0aW9uIEkodCxlKXt4KHQsZSxlKX1mdW5jdGlvbiBCKHQsZSl7dmFyIHIsbj10dCgpO2ZvcihyPTA7cjwxNjtyKyspbltyXT1lW3JdO2ZvcihyPTI1MztyPj0wO3ItLSlJKG4sbiksMiE9PXImJjQhPT1yJiZ4KG4sbixlKTtmb3Iocj0wO3I8MTY7cisrKXRbcl09bltyXX1mdW5jdGlvbiBPKHQsZSl7dmFyIHIsbj10dCgpO2ZvcihyPTA7cjwxNjtyKyspbltyXT1lW3JdO2ZvcihyPTI1MDtyPj0wO3ItLSlJKG4sbiksMSE9PXImJngobixuLGUpO2ZvcihyPTA7cjwxNjtyKyspdFtyXT1uW3JdfWZ1bmN0aW9uIFIodCxlLHIpe3ZhciBuLGksbz1uZXcgVWludDhBcnJheSgzMiksYT1uZXcgRmxvYXQ2NEFycmF5KDgwKSxmPXR0KCkscz10dCgpLHU9dHQoKSxoPXR0KCksYz10dCgpLGQ9dHQoKTtmb3IoaT0wO2k8MzE7aSsrKW9baV09ZVtpXTtmb3Iob1szMV09MTI3JmVbMzFdfDY0LG9bMF0mPTI0OCxFKGEsciksaT0wO2k8MTY7aSsrKXNbaV09YVtpXSxoW2ldPWZbaV09dVtpXT0wO2ZvcihmWzBdPWhbMF09MSxpPTI1NDtpPj0wOy0taSluPW9baT4+PjNdPj4+KDcmaSkmMSx3KGYscyxuKSx3KHUsaCxuKSxBKGMsZix1KSxrKGYsZix1KSxBKHUscyxoKSxrKHMscyxoKSxJKGgsYyksSShkLGYpLHgoZix1LGYpLHgodSxzLGMpLEEoYyxmLHUpLGsoZixmLHUpLEkocyxmKSxrKHUsaCxkKSx4KGYsdSxhdCksQShmLGYsaCkseCh1LHUsZikseChmLGgsZCkseChoLHMsYSksSShzLGMpLHcoZixzLG4pLHcodSxoLG4pO2ZvcihpPTA7aTwxNjtpKyspYVtpKzE2XT1mW2ldLGFbaSszMl09dVtpXSxhW2krNDhdPXNbaV0sYVtpKzY0XT1oW2ldO3ZhciBsPWEuc3ViYXJyYXkoMzIpLHA9YS5zdWJhcnJheSgxNik7cmV0dXJuIEIobCxsKSx4KHAscCxsKSxfKHQscCksMH1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuIFIodCxlLG50KX1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuIGV0KGUsMzIpLFAodCxlKX1mdW5jdGlvbiBqKHQsZSxyKXt2YXIgbj1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIFIobixyLGUpLHUodCxydCxuLGR0KX1mdW5jdGlvbiBDKHQsZSxyLG4saSxvKXt2YXIgYT1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIGooYSxpLG8pLHB0KHQsZSxyLG4sYSl9ZnVuY3Rpb24gTih0LGUscixuLGksbyl7dmFyIGE9bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBqKGEsaSxvKSxidCh0LGUscixuLGEpfWZ1bmN0aW9uIEwodCxlLHIsbil7Zm9yKHZhciBpLG8sYSxmLHMsdSxoLGMsZCxsLHAsYix2LHksbSxnLHcsXyxNLFMsRSxBLGsseCxJLEIsTz1uZXcgSW50MzJBcnJheSgxNiksUj1uZXcgSW50MzJBcnJheSgxNiksUD10WzBdLFQ9dFsxXSxqPXRbMl0sQz10WzNdLE49dFs0XSxMPXRbNV0sVT10WzZdLHo9dFs3XSxEPWVbMF0scT1lWzFdLEY9ZVsyXSxLPWVbM10sRz1lWzRdLFY9ZVs1XSxIPWVbNl0sWD1lWzddLFk9MDtuPj0xMjg7KXtmb3IoTT0wO008MTY7TSsrKVM9OCpNK1ksT1tNXT1yW1MrMF08PDI0fHJbUysxXTw8MTZ8cltTKzJdPDw4fHJbUyszXSxSW01dPXJbUys0XTw8MjR8cltTKzVdPDwxNnxyW1MrNl08PDh8cltTKzddO2ZvcihNPTA7TTw4MDtNKyspaWYoaT1QLG89VCxhPWosZj1DLHM9Tix1PUwsaD1VLGM9eixkPUQsbD1xLHA9RixiPUssdj1HLHk9VixtPUgsZz1YLEU9eixBPVgsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPShOPj4+MTR8Rzw8MTgpXihOPj4+MTh8Rzw8MTQpXihHPj4+OXxOPDwyMyksQT0oRz4+PjE0fE48PDE4KV4oRz4+PjE4fE48PDE0KV4oTj4+Pjl8Rzw8MjMpLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LEU9TiZMXn5OJlUsQT1HJlZefkcmSCxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNixFPXZ0WzIqTV0sQT12dFsyKk0rMV0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYsRT1PW00lMTZdLEE9UltNJTE2XSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNix3PTY1NTM1Jkl8Qjw8MTYsXz02NTUzNSZrfHg8PDE2LEU9dyxBPV8saz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPShQPj4+Mjh8RDw8NCleKEQ+Pj4yfFA8PDMwKV4oRD4+Pjd8UDw8MjUpLEE9KEQ+Pj4yOHxQPDw0KV4oUD4+PjJ8RDw8MzApXihQPj4+N3xEPDwyNSksays9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYsRT1QJlReUCZqXlQmaixBPUQmcV5EJkZecSZGLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LGM9NjU1MzUmSXxCPDwxNixnPTY1NTM1Jmt8eDw8MTYsRT1mLEE9YixrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dyxBPV8says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsZj02NTUzNSZJfEI8PDE2LGI9NjU1MzUma3x4PDwxNixUPWksaj1vLEM9YSxOPWYsTD1zLFU9dSx6PWgsUD1jLHE9ZCxGPWwsSz1wLEc9YixWPXYsSD15LFg9bSxEPWcsTSUxNj09PTE1KWZvcihTPTA7UzwxNjtTKyspRT1PW1NdLEE9UltTXSxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9T1soUys5KSUxNl0sQT1SWyhTKzkpJTE2XSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix3PU9bKFMrMSklMTZdLF89UlsoUysxKSUxNl0sRT0odz4+PjF8Xzw8MzEpXih3Pj4+OHxfPDwyNCledz4+PjcsQT0oXz4+PjF8dzw8MzEpXihfPj4+OHx3PDwyNCleKF8+Pj43fHc8PDI1KSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix3PU9bKFMrMTQpJTE2XSxfPVJbKFMrMTQpJTE2XSxFPSh3Pj4+MTl8Xzw8MTMpXihfPj4+Mjl8dzw8Myledz4+PjYsQT0oXz4+PjE5fHc8PDEzKV4odz4+PjI5fF88PDMpXihfPj4+Nnx3PDwyNiksays9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsT1tTXT02NTUzNSZJfEI8PDE2LFJbU109NjU1MzUma3x4PDwxNjtFPVAsQT1ELGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT10WzBdLEE9ZVswXSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNix0WzBdPVA9NjU1MzUmSXxCPDwxNixlWzBdPUQ9NjU1MzUma3x4PDwxNixFPVQsQT1xLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT10WzFdLEE9ZVsxXSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNix0WzFdPVQ9NjU1MzUmSXxCPDwxNixlWzFdPXE9NjU1MzUma3x4PDwxNixFPWosQT1GLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT10WzJdLEE9ZVsyXSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNix0WzJdPWo9NjU1MzUmSXxCPDwxNixlWzJdPUY9NjU1MzUma3x4PDwxNixFPUMsQT1LLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT10WzNdLEE9ZVszXSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNix0WzNdPUM9NjU1MzUmSXxCPDwxNixlWzNdPUs9NjU1MzUma3x4PDwxNixFPU4sQT1HLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT10WzRdLEE9ZVs0XSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNix0WzRdPU49NjU1MzUmSXxCPDwxNixlWzRdPUc9NjU1MzUma3x4PDwxNixFPUwsQT1WLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT10WzVdLEE9ZVs1XSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNix0WzVdPUw9NjU1MzUmSXxCPDwxNixlWzVdPVY9NjU1MzUma3x4PDwxNixFPVUsQT1ILGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT10WzZdLEE9ZVs2XSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNix0WzZdPVU9NjU1MzUmSXxCPDwxNixlWzZdPUg9NjU1MzUma3x4PDwxNixFPXosQT1YLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT10WzddLEE9ZVs3XSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNix0WzddPXo9NjU1MzUmSXxCPDwxNixlWzddPVg9NjU1MzUma3x4PDwxNixZKz0xMjgsbi09MTI4fXJldHVybiBufWZ1bmN0aW9uIFUodCxyLG4pe3ZhciBpLG89bmV3IEludDMyQXJyYXkoOCksYT1uZXcgSW50MzJBcnJheSg4KSxmPW5ldyBVaW50OEFycmF5KDI1Nikscz1uO2ZvcihvWzBdPTE3NzkwMzM3MDMsb1sxXT0zMTQ0MTM0Mjc3LG9bMl09MTAxMzkwNDI0MixvWzNdPTI3NzM0ODA3NjIsb1s0XT0xMzU5ODkzMTE5LG9bNV09MjYwMDgyMjkyNCxvWzZdPTUyODczNDYzNSxvWzddPTE1NDE0NTkyMjUsYVswXT00MDg5MjM1NzIwLGFbMV09MjIyNzg3MzU5NSxhWzJdPTQyNzExNzU3MjMsYVszXT0xNTk1NzUwMTI5LGFbNF09MjkxNzU2NTEzNyxhWzVdPTcyNTUxMTE5OSxhWzZdPTQyMTUzODk1NDcsYVs3XT0zMjcwMzMyMDksTChvLGEscixuKSxuJT0xMjgsaT0wO2k8bjtpKyspZltpXT1yW3MtbitpXTtmb3IoZltuXT0xMjgsbj0yNTYtMTI4KihuPDExMj8xOjApLGZbbi05XT0wLGUoZixuLTgscy81MzY4NzA5MTJ8MCxzPDwzKSxMKG8sYSxmLG4pLGk9MDtpPDg7aSsrKWUodCw4Kmksb1tpXSxhW2ldKTtyZXR1cm4gMH1mdW5jdGlvbiB6KHQsZSl7dmFyIHI9dHQoKSxuPXR0KCksaT10dCgpLG89dHQoKSxhPXR0KCksZj10dCgpLHM9dHQoKSx1PXR0KCksaD10dCgpO2socix0WzFdLHRbMF0pLGsoaCxlWzFdLGVbMF0pLHgocixyLGgpLEEobix0WzBdLHRbMV0pLEEoaCxlWzBdLGVbMV0pLHgobixuLGgpLHgoaSx0WzNdLGVbM10pLHgoaSxpLHN0KSx4KG8sdFsyXSxlWzJdKSxBKG8sbyxvKSxrKGEsbixyKSxrKGYsbyxpKSxBKHMsbyxpKSxBKHUsbixyKSx4KHRbMF0sYSxmKSx4KHRbMV0sdSxzKSx4KHRbMl0scyxmKSx4KHRbM10sYSx1KX1mdW5jdGlvbiBEKHQsZSxyKXt2YXIgbjtmb3Iobj0wO248NDtuKyspdyh0W25dLGVbbl0scil9ZnVuY3Rpb24gcSh0LGUpe3ZhciByPXR0KCksbj10dCgpLGk9dHQoKTtCKGksZVsyXSkseChyLGVbMF0saSkseChuLGVbMV0saSksXyh0LG4pLHRbMzFdXj1TKHIpPDw3fWZ1bmN0aW9uIEYodCxlLHIpe3ZhciBuLGk7Zm9yKG0odFswXSxpdCksbSh0WzFdLG90KSxtKHRbMl0sb3QpLG0odFszXSxpdCksaT0yNTU7aT49MDstLWkpbj1yW2kvOHwwXT4+KDcmaSkmMSxEKHQsZSxuKSx6KGUsdCkseih0LHQpLEQodCxlLG4pfWZ1bmN0aW9uIEsodCxlKXt2YXIgcj1bdHQoKSx0dCgpLHR0KCksdHQoKV07XG5tKHJbMF0sdXQpLG0oclsxXSxodCksbShyWzJdLG90KSx4KHJbM10sdXQsaHQpLEYodCxyLGUpfWZ1bmN0aW9uIEcodCxlLHIpe3ZhciBuLGk9bmV3IFVpbnQ4QXJyYXkoNjQpLG89W3R0KCksdHQoKSx0dCgpLHR0KCldO2ZvcihyfHxldChlLDMyKSxVKGksZSwzMiksaVswXSY9MjQ4LGlbMzFdJj0xMjcsaVszMV18PTY0LEsobyxpKSxxKHQsbyksbj0wO248MzI7bisrKWVbbiszMl09dFtuXTtyZXR1cm4gMH1mdW5jdGlvbiBWKHQsZSl7dmFyIHIsbixpLG87Zm9yKG49NjM7bj49MzI7LS1uKXtmb3Iocj0wLGk9bi0zMixvPW4tMTI7aTxvOysraSllW2ldKz1yLTE2KmVbbl0qeXRbaS0obi0zMildLHI9ZVtpXSsxMjg+PjgsZVtpXS09MjU2KnI7ZVtpXSs9cixlW25dPTB9Zm9yKHI9MCxpPTA7aTwzMjtpKyspZVtpXSs9ci0oZVszMV0+PjQpKnl0W2ldLHI9ZVtpXT4+OCxlW2ldJj0yNTU7Zm9yKGk9MDtpPDMyO2krKyllW2ldLT1yKnl0W2ldO2ZvcihuPTA7bjwzMjtuKyspZVtuKzFdKz1lW25dPj44LHRbbl09MjU1JmVbbl19ZnVuY3Rpb24gSCh0KXt2YXIgZSxyPW5ldyBGbG9hdDY0QXJyYXkoNjQpO2ZvcihlPTA7ZTw2NDtlKyspcltlXT10W2VdO2ZvcihlPTA7ZTw2NDtlKyspdFtlXT0wO1YodCxyKX1mdW5jdGlvbiBYKHQsZSxyLG4pe3ZhciBpLG8sYT1uZXcgVWludDhBcnJheSg2NCksZj1uZXcgVWludDhBcnJheSg2NCkscz1uZXcgVWludDhBcnJheSg2NCksdT1uZXcgRmxvYXQ2NEFycmF5KDY0KSxoPVt0dCgpLHR0KCksdHQoKSx0dCgpXTtVKGEsbiwzMiksYVswXSY9MjQ4LGFbMzFdJj0xMjcsYVszMV18PTY0O3ZhciBjPXIrNjQ7Zm9yKGk9MDtpPHI7aSsrKXRbNjQraV09ZVtpXTtmb3IoaT0wO2k8MzI7aSsrKXRbMzIraV09YVszMitpXTtmb3IoVShzLHQuc3ViYXJyYXkoMzIpLHIrMzIpLEgocyksSyhoLHMpLHEodCxoKSxpPTMyO2k8NjQ7aSsrKXRbaV09bltpXTtmb3IoVShmLHQscis2NCksSChmKSxpPTA7aTw2NDtpKyspdVtpXT0wO2ZvcihpPTA7aTwzMjtpKyspdVtpXT1zW2ldO2ZvcihpPTA7aTwzMjtpKyspZm9yKG89MDtvPDMyO28rKyl1W2krb10rPWZbaV0qYVtvXTtyZXR1cm4gVih0LnN1YmFycmF5KDMyKSx1KSxjfWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10dCgpLG49dHQoKSxpPXR0KCksbz10dCgpLGE9dHQoKSxmPXR0KCkscz10dCgpO3JldHVybiBtKHRbMl0sb3QpLEUodFsxXSxlKSxJKGksdFsxXSkseChvLGksZnQpLGsoaSxpLHRbMl0pLEEobyx0WzJdLG8pLEkoYSxvKSxJKGYsYSkseChzLGYsYSkseChyLHMsaSkseChyLHIsbyksTyhyLHIpLHgocixyLGkpLHgocixyLG8pLHgocixyLG8pLHgodFswXSxyLG8pLEkobix0WzBdKSx4KG4sbixvKSxNKG4saSkmJngodFswXSx0WzBdLGN0KSxJKG4sdFswXSkseChuLG4sbyksTShuLGkpPy0xOihTKHRbMF0pPT09ZVszMV0+PjcmJmsodFswXSxpdCx0WzBdKSx4KHRbM10sdFswXSx0WzFdKSwwKX1mdW5jdGlvbiBXKHQsZSxyLG4pe3ZhciBpLGEsZj1uZXcgVWludDhBcnJheSgzMikscz1uZXcgVWludDhBcnJheSg2NCksdT1bdHQoKSx0dCgpLHR0KCksdHQoKV0saD1bdHQoKSx0dCgpLHR0KCksdHQoKV07aWYoYT0tMSxyPDY0KXJldHVybi0xO2lmKFkoaCxuKSlyZXR1cm4tMTtmb3IoaT0wO2k8cjtpKyspdFtpXT1lW2ldO2ZvcihpPTA7aTwzMjtpKyspdFtpKzMyXT1uW2ldO2lmKFUocyx0LHIpLEgocyksRih1LGgscyksSyhoLGUuc3ViYXJyYXkoMzIpKSx6KHUsaCkscShmLHUpLHItPTY0LG8oZSwwLGYsMCkpe2ZvcihpPTA7aTxyO2krKyl0W2ldPTA7cmV0dXJuLTF9Zm9yKGk9MDtpPHI7aSsrKXRbaV09ZVtpKzY0XTtyZXR1cm4gYT1yfWZ1bmN0aW9uIFoodCxlKXtpZih0Lmxlbmd0aCE9PW10KXRocm93IG5ldyBFcnJvcihcImJhZCBrZXkgc2l6ZVwiKTtpZihlLmxlbmd0aCE9PWd0KXRocm93IG5ldyBFcnJvcihcImJhZCBub25jZSBzaXplXCIpfWZ1bmN0aW9uIEoodCxlKXtpZih0Lmxlbmd0aCE9PUV0KXRocm93IG5ldyBFcnJvcihcImJhZCBwdWJsaWMga2V5IHNpemVcIik7aWYoZS5sZW5ndGghPT1BdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VjcmV0IGtleSBzaXplXCIpfWZ1bmN0aW9uICQoKXt2YXIgdCxlO2ZvcihlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylpZihcIltvYmplY3QgVWludDhBcnJheV1cIiE9PSh0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHNbZV0pKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5leHBlY3RlZCB0eXBlIFwiK3QrXCIsIHVzZSBVaW50OEFycmF5XCIpfWZ1bmN0aW9uIFEodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT0wfXZhciB0dD1mdW5jdGlvbih0KXt2YXIgZSxyPW5ldyBGbG9hdDY0QXJyYXkoMTYpO2lmKHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKylyW2VdPXRbZV07cmV0dXJuIHJ9LGV0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwibm8gUFJOR1wiKX0scnQ9bmV3IFVpbnQ4QXJyYXkoMTYpLG50PW5ldyBVaW50OEFycmF5KDMyKTtudFswXT05O3ZhciBpdD10dCgpLG90PXR0KFsxXSksYXQ9dHQoWzU2MTI5LDFdKSxmdD10dChbMzA4ODMsNDk1MywxOTkxNCwzMDE4Nyw1NTQ2NywxNjcwNSwyNjM3LDExMiw1OTU0NCwzMDU4NSwxNjUwNSwzNjAzOSw2NTEzOSwxMTExOSwyNzg4NiwyMDk5NV0pLHN0PXR0KFs2MTc4NSw5OTA2LDM5ODI4LDYwMzc0LDQ1Mzk4LDMzNDExLDUyNzQsMjI0LDUzNTUyLDYxMTcxLDMzMDEwLDY1NDIsNjQ3NDMsMjIyMzksNTU3NzIsOTIyMl0pLHV0PXR0KFs1NDU1NCwzNjY0NSwxMTYxNiw1MTU0Miw0MjkzMCwzODE4MSw1MTA0MCwyNjkyNCw1NjQxMiw2NDk4Miw1NzkwNSw0OTMxNiwyMTUwMiw1MjU5MCwxNDAzNSw4NTUzXSksaHQ9dHQoWzI2MjAwLDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0LDI2MjE0XSksY3Q9dHQoWzQxMTM2LDE4OTU4LDY5NTEsNTA0MTQsNTg0ODgsNDQzMzUsNjE1MCwxMjA5OSw1NTIwNywxNTg2NywxNTMsMTEwODUsNTcwOTksMjA0MTcsOTM0NCwxMTEzOV0pLGR0PW5ldyBVaW50OEFycmF5KFsxMDEsMTIwLDExMiw5NywxMTAsMTAwLDMyLDUxLDUwLDQ1LDk4LDEyMSwxMTYsMTAxLDMyLDEwN10pLGx0PWZ1bmN0aW9uKHQpe3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KSx0aGlzLnI9bmV3IFVpbnQxNkFycmF5KDEwKSx0aGlzLmg9bmV3IFVpbnQxNkFycmF5KDEwKSx0aGlzLnBhZD1uZXcgVWludDE2QXJyYXkoOCksdGhpcy5sZWZ0b3Zlcj0wLHRoaXMuZmluPTA7dmFyIGUscixuLGksbyxhLGYscztlPTI1NSZ0WzBdfCgyNTUmdFsxXSk8PDgsdGhpcy5yWzBdPTgxOTEmZSxyPTI1NSZ0WzJdfCgyNTUmdFszXSk8PDgsdGhpcy5yWzFdPTgxOTEmKGU+Pj4xM3xyPDwzKSxuPTI1NSZ0WzRdfCgyNTUmdFs1XSk8PDgsdGhpcy5yWzJdPTc5MzkmKHI+Pj4xMHxuPDw2KSxpPTI1NSZ0WzZdfCgyNTUmdFs3XSk8PDgsdGhpcy5yWzNdPTgxOTEmKG4+Pj43fGk8PDkpLG89MjU1JnRbOF18KDI1NSZ0WzldKTw8OCx0aGlzLnJbNF09MjU1JihpPj4+NHxvPDwxMiksdGhpcy5yWzVdPW8+Pj4xJjgxOTAsYT0yNTUmdFsxMF18KDI1NSZ0WzExXSk8PDgsdGhpcy5yWzZdPTgxOTEmKG8+Pj4xNHxhPDwyKSxmPTI1NSZ0WzEyXXwoMjU1JnRbMTNdKTw8OCx0aGlzLnJbN109ODA2NSYoYT4+PjExfGY8PDUpLHM9MjU1JnRbMTRdfCgyNTUmdFsxNV0pPDw4LHRoaXMucls4XT04MTkxJihmPj4+OHxzPDw4KSx0aGlzLnJbOV09cz4+PjUmMTI3LHRoaXMucGFkWzBdPTI1NSZ0WzE2XXwoMjU1JnRbMTddKTw8OCx0aGlzLnBhZFsxXT0yNTUmdFsxOF18KDI1NSZ0WzE5XSk8PDgsdGhpcy5wYWRbMl09MjU1JnRbMjBdfCgyNTUmdFsyMV0pPDw4LHRoaXMucGFkWzNdPTI1NSZ0WzIyXXwoMjU1JnRbMjNdKTw8OCx0aGlzLnBhZFs0XT0yNTUmdFsyNF18KDI1NSZ0WzI1XSk8PDgsdGhpcy5wYWRbNV09MjU1JnRbMjZdfCgyNTUmdFsyN10pPDw4LHRoaXMucGFkWzZdPTI1NSZ0WzI4XXwoMjU1JnRbMjldKTw8OCx0aGlzLnBhZFs3XT0yNTUmdFszMF18KDI1NSZ0WzMxXSk8PDh9O2x0LnByb3RvdHlwZS5ibG9ja3M9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLG8sYSxmLHMsdSxoLGMsZCxsLHAsYix2LHksbSxnLHcsXyxNPXRoaXMuZmluPzA6MjA0OCxTPXRoaXMuaFswXSxFPXRoaXMuaFsxXSxBPXRoaXMuaFsyXSxrPXRoaXMuaFszXSx4PXRoaXMuaFs0XSxJPXRoaXMuaFs1XSxCPXRoaXMuaFs2XSxPPXRoaXMuaFs3XSxSPXRoaXMuaFs4XSxQPXRoaXMuaFs5XSxUPXRoaXMuclswXSxqPXRoaXMuclsxXSxDPXRoaXMuclsyXSxOPXRoaXMuclszXSxMPXRoaXMucls0XSxVPXRoaXMucls1XSx6PXRoaXMucls2XSxEPXRoaXMucls3XSxxPXRoaXMucls4XSxGPXRoaXMucls5XTtyPj0xNjspbj0yNTUmdFtlKzBdfCgyNTUmdFtlKzFdKTw8OCxTKz04MTkxJm4saT0yNTUmdFtlKzJdfCgyNTUmdFtlKzNdKTw8OCxFKz04MTkxJihuPj4+MTN8aTw8Myksbz0yNTUmdFtlKzRdfCgyNTUmdFtlKzVdKTw8OCxBKz04MTkxJihpPj4+MTB8bzw8NiksYT0yNTUmdFtlKzZdfCgyNTUmdFtlKzddKTw8OCxrKz04MTkxJihvPj4+N3xhPDw5KSxmPTI1NSZ0W2UrOF18KDI1NSZ0W2UrOV0pPDw4LHgrPTgxOTEmKGE+Pj40fGY8PDEyKSxJKz1mPj4+MSY4MTkxLHM9MjU1JnRbZSsxMF18KDI1NSZ0W2UrMTFdKTw8OCxCKz04MTkxJihmPj4+MTR8czw8MiksdT0yNTUmdFtlKzEyXXwoMjU1JnRbZSsxM10pPDw4LE8rPTgxOTEmKHM+Pj4xMXx1PDw1KSxoPTI1NSZ0W2UrMTRdfCgyNTUmdFtlKzE1XSk8PDgsUis9ODE5MSYodT4+Pjh8aDw8OCksUCs9aD4+PjV8TSxjPTAsZD1jLGQrPVMqVCxkKz1FKig1KkYpLGQrPUEqKDUqcSksZCs9ayooNSpEKSxkKz14Kig1KnopLGM9ZD4+PjEzLGQmPTgxOTEsZCs9SSooNSpVKSxkKz1CKig1KkwpLGQrPU8qKDUqTiksZCs9UiooNSpDKSxkKz1QKig1KmopLGMrPWQ+Pj4xMyxkJj04MTkxLGw9YyxsKz1TKmosbCs9RSpULGwrPUEqKDUqRiksbCs9ayooNSpxKSxsKz14Kig1KkQpLGM9bD4+PjEzLGwmPTgxOTEsbCs9SSooNSp6KSxsKz1CKig1KlUpLGwrPU8qKDUqTCksbCs9UiooNSpOKSxsKz1QKig1KkMpLGMrPWw+Pj4xMyxsJj04MTkxLHA9YyxwKz1TKkMscCs9RSpqLHArPUEqVCxwKz1rKig1KkYpLHArPXgqKDUqcSksYz1wPj4+MTMscCY9ODE5MSxwKz1JKig1KkQpLHArPUIqKDUqeikscCs9TyooNSpVKSxwKz1SKig1KkwpLHArPVAqKDUqTiksYys9cD4+PjEzLHAmPTgxOTEsYj1jLGIrPVMqTixiKz1FKkMsYis9QSpqLGIrPWsqVCxiKz14Kig1KkYpLGM9Yj4+PjEzLGImPTgxOTEsYis9SSooNSpxKSxiKz1CKig1KkQpLGIrPU8qKDUqeiksYis9UiooNSpVKSxiKz1QKig1KkwpLGMrPWI+Pj4xMyxiJj04MTkxLHY9Yyx2Kz1TKkwsdis9RSpOLHYrPUEqQyx2Kz1rKmosdis9eCpULGM9dj4+PjEzLHYmPTgxOTEsdis9SSooNSpGKSx2Kz1CKig1KnEpLHYrPU8qKDUqRCksdis9UiooNSp6KSx2Kz1QKig1KlUpLGMrPXY+Pj4xMyx2Jj04MTkxLHk9Yyx5Kz1TKlUseSs9RSpMLHkrPUEqTix5Kz1rKkMseSs9eCpqLGM9eT4+PjEzLHkmPTgxOTEseSs9SSpULHkrPUIqKDUqRikseSs9TyooNSpxKSx5Kz1SKig1KkQpLHkrPVAqKDUqeiksYys9eT4+PjEzLHkmPTgxOTEsbT1jLG0rPVMqeixtKz1FKlUsbSs9QSpMLG0rPWsqTixtKz14KkMsYz1tPj4+MTMsbSY9ODE5MSxtKz1JKmosbSs9QipULG0rPU8qKDUqRiksbSs9UiooNSpxKSxtKz1QKig1KkQpLGMrPW0+Pj4xMyxtJj04MTkxLGc9YyxnKz1TKkQsZys9RSp6LGcrPUEqVSxnKz1rKkwsZys9eCpOLGM9Zz4+PjEzLGcmPTgxOTEsZys9SSpDLGcrPUIqaixnKz1PKlQsZys9UiooNSpGKSxnKz1QKig1KnEpLGMrPWc+Pj4xMyxnJj04MTkxLHc9Yyx3Kz1TKnEsdys9RSpELHcrPUEqeix3Kz1rKlUsdys9eCpMLGM9dz4+PjEzLHcmPTgxOTEsdys9SSpOLHcrPUIqQyx3Kz1PKmosdys9UipULHcrPVAqKDUqRiksYys9dz4+PjEzLHcmPTgxOTEsXz1jLF8rPVMqRixfKz1FKnEsXys9QSpELF8rPWsqeixfKz14KlUsYz1fPj4+MTMsXyY9ODE5MSxfKz1JKkwsXys9QipOLF8rPU8qQyxfKz1SKmosXys9UCpULGMrPV8+Pj4xMyxfJj04MTkxLGM9KGM8PDIpK2N8MCxjPWMrZHwwLGQ9ODE5MSZjLGM+Pj49MTMsbCs9YyxTPWQsRT1sLEE9cCxrPWIseD12LEk9eSxCPW0sTz1nLFI9dyxQPV8sZSs9MTYsci09MTY7dGhpcy5oWzBdPVMsdGhpcy5oWzFdPUUsdGhpcy5oWzJdPUEsdGhpcy5oWzNdPWssdGhpcy5oWzRdPXgsdGhpcy5oWzVdPUksdGhpcy5oWzZdPUIsdGhpcy5oWzddPU8sdGhpcy5oWzhdPVIsdGhpcy5oWzldPVB9LGx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksbyxhPW5ldyBVaW50MTZBcnJheSgxMCk7aWYodGhpcy5sZWZ0b3Zlcil7Zm9yKG89dGhpcy5sZWZ0b3Zlcix0aGlzLmJ1ZmZlcltvKytdPTE7bzwxNjtvKyspdGhpcy5idWZmZXJbb109MDt0aGlzLmZpbj0xLHRoaXMuYmxvY2tzKHRoaXMuYnVmZmVyLDAsMTYpfWZvcihyPXRoaXMuaFsxXT4+PjEzLHRoaXMuaFsxXSY9ODE5MSxvPTI7bzwxMDtvKyspdGhpcy5oW29dKz1yLHI9dGhpcy5oW29dPj4+MTMsdGhpcy5oW29dJj04MTkxO2Zvcih0aGlzLmhbMF0rPTUqcixyPXRoaXMuaFswXT4+PjEzLHRoaXMuaFswXSY9ODE5MSx0aGlzLmhbMV0rPXIscj10aGlzLmhbMV0+Pj4xMyx0aGlzLmhbMV0mPTgxOTEsdGhpcy5oWzJdKz1yLGFbMF09dGhpcy5oWzBdKzUscj1hWzBdPj4+MTMsYVswXSY9ODE5MSxvPTE7bzwxMDtvKyspYVtvXT10aGlzLmhbb10rcixyPWFbb10+Pj4xMyxhW29dJj04MTkxO2ZvcihhWzldLT04MTkyLG49KDFeciktMSxvPTA7bzwxMDtvKyspYVtvXSY9bjtmb3Iobj1+bixvPTA7bzwxMDtvKyspdGhpcy5oW29dPXRoaXMuaFtvXSZufGFbb107Zm9yKHRoaXMuaFswXT02NTUzNSYodGhpcy5oWzBdfHRoaXMuaFsxXTw8MTMpLHRoaXMuaFsxXT02NTUzNSYodGhpcy5oWzFdPj4+M3x0aGlzLmhbMl08PDEwKSx0aGlzLmhbMl09NjU1MzUmKHRoaXMuaFsyXT4+PjZ8dGhpcy5oWzNdPDw3KSx0aGlzLmhbM109NjU1MzUmKHRoaXMuaFszXT4+Pjl8dGhpcy5oWzRdPDw0KSx0aGlzLmhbNF09NjU1MzUmKHRoaXMuaFs0XT4+PjEyfHRoaXMuaFs1XTw8MXx0aGlzLmhbNl08PDE0KSx0aGlzLmhbNV09NjU1MzUmKHRoaXMuaFs2XT4+PjJ8dGhpcy5oWzddPDwxMSksdGhpcy5oWzZdPTY1NTM1Jih0aGlzLmhbN10+Pj41fHRoaXMuaFs4XTw8OCksdGhpcy5oWzddPTY1NTM1Jih0aGlzLmhbOF0+Pj44fHRoaXMuaFs5XTw8NSksaT10aGlzLmhbMF0rdGhpcy5wYWRbMF0sdGhpcy5oWzBdPTY1NTM1Jmksbz0xO288ODtvKyspaT0odGhpcy5oW29dK3RoaXMucGFkW29dfDApKyhpPj4+MTYpfDAsdGhpcy5oW29dPTY1NTM1Jmk7dFtlKzBdPXRoaXMuaFswXT4+PjAmMjU1LHRbZSsxXT10aGlzLmhbMF0+Pj44JjI1NSx0W2UrMl09dGhpcy5oWzFdPj4+MCYyNTUsdFtlKzNdPXRoaXMuaFsxXT4+PjgmMjU1LHRbZSs0XT10aGlzLmhbMl0+Pj4wJjI1NSx0W2UrNV09dGhpcy5oWzJdPj4+OCYyNTUsdFtlKzZdPXRoaXMuaFszXT4+PjAmMjU1LHRbZSs3XT10aGlzLmhbM10+Pj44JjI1NSx0W2UrOF09dGhpcy5oWzRdPj4+MCYyNTUsdFtlKzldPXRoaXMuaFs0XT4+PjgmMjU1LHRbZSsxMF09dGhpcy5oWzVdPj4+MCYyNTUsdFtlKzExXT10aGlzLmhbNV0+Pj44JjI1NSx0W2UrMTJdPXRoaXMuaFs2XT4+PjAmMjU1LHRbZSsxM109dGhpcy5oWzZdPj4+OCYyNTUsdFtlKzE0XT10aGlzLmhbN10+Pj4wJjI1NSx0W2UrMTVdPXRoaXMuaFs3XT4+PjgmMjU1fSxsdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKHRoaXMubGVmdG92ZXIpe2ZvcihpPTE2LXRoaXMubGVmdG92ZXIsaT5yJiYoaT1yKSxuPTA7bjxpO24rKyl0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyK25dPXRbZStuXTtpZihyLT1pLGUrPWksdGhpcy5sZWZ0b3Zlcis9aSx0aGlzLmxlZnRvdmVyPDE2KXJldHVybjt0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwwLDE2KSx0aGlzLmxlZnRvdmVyPTB9aWYocj49MTYmJihpPXItciUxNix0aGlzLmJsb2Nrcyh0LGUsaSksZSs9aSxyLT1pKSxyKXtmb3Iobj0wO248cjtuKyspdGhpcy5idWZmZXJbdGhpcy5sZWZ0b3ZlcituXT10W2Urbl07dGhpcy5sZWZ0b3Zlcis9cn19O3ZhciBwdD12LGJ0PXksdnQ9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSx5dD1uZXcgRmxvYXQ2NEFycmF5KFsyMzcsMjExLDI0NSw5MiwyNiw5OSwxOCw4OCwyMTQsMTU2LDI0NywxNjIsMjIyLDI0OSwyMjIsMjAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTZdKSxtdD0zMixndD0yNCx3dD0zMixfdD0xNixNdD0zMixTdD0zMixFdD0zMixBdD0zMixrdD0zMix4dD1ndCxJdD13dCxCdD1fdCxPdD02NCxSdD0zMixQdD02NCxUdD0zMixqdD02NDt0Lmxvd2xldmVsPXtjcnlwdG9fY29yZV9oc2Fsc2EyMDp1LGNyeXB0b19zdHJlYW1feG9yOmwsY3J5cHRvX3N0cmVhbTpkLGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3I6aCxjcnlwdG9fc3RyZWFtX3NhbHNhMjA6YyxjcnlwdG9fb25ldGltZWF1dGg6cCxjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5OmIsY3J5cHRvX3ZlcmlmeV8xNjppLGNyeXB0b192ZXJpZnlfMzI6byxjcnlwdG9fc2VjcmV0Ym94OnYsY3J5cHRvX3NlY3JldGJveF9vcGVuOnksY3J5cHRvX3NjYWxhcm11bHQ6UixjcnlwdG9fc2NhbGFybXVsdF9iYXNlOlAsY3J5cHRvX2JveF9iZWZvcmVubTpqLGNyeXB0b19ib3hfYWZ0ZXJubTpwdCxjcnlwdG9fYm94OkMsY3J5cHRvX2JveF9vcGVuOk4sY3J5cHRvX2JveF9rZXlwYWlyOlQsY3J5cHRvX2hhc2g6VSxjcnlwdG9fc2lnbjpYLGNyeXB0b19zaWduX2tleXBhaXI6RyxjcnlwdG9fc2lnbl9vcGVuOlcsY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUzptdCxjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVM6Z3QsY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVM6d3QsY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVM6X3QsY3J5cHRvX3NjYWxhcm11bHRfQllURVM6TXQsY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM6U3QsY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUzpFdCxjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTOkF0LGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUzprdCxjcnlwdG9fYm94X05PTkNFQllURVM6eHQsY3J5cHRvX2JveF9aRVJPQllURVM6SXQsY3J5cHRvX2JveF9CT1haRVJPQllURVM6QnQsY3J5cHRvX3NpZ25fQllURVM6T3QsY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVM6UnQsY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVM6UHQsY3J5cHRvX3NpZ25fU0VFREJZVEVTOlR0LGNyeXB0b19oYXNoX0JZVEVTOmp0fSx0LnV0aWx8fCh0LnV0aWw9e30sdC51dGlsLmRlY29kZVVURjg9dC51dGlsLmVuY29kZVVURjg9dC51dGlsLmVuY29kZUJhc2U2ND10LnV0aWwuZGVjb2RlQmFzZTY0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwibmFjbC51dGlsIG1vdmVkIGludG8gc2VwYXJhdGUgcGFja2FnZTogaHR0cHM6Ly9naXRodWIuY29tL2RjaGVzdC90d2VldG5hY2wtdXRpbC1qc1wiKX0pLHQucmFuZG9tQnl0ZXM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIGV0KGUsdCksZX0sdC5zZWNyZXRib3g9ZnVuY3Rpb24odCxlLHIpeyQodCxlLHIpLFoocixlKTtmb3IodmFyIG49bmV3IFVpbnQ4QXJyYXkod3QrdC5sZW5ndGgpLGk9bmV3IFVpbnQ4QXJyYXkobi5sZW5ndGgpLG89MDtvPHQubGVuZ3RoO28rKyluW28rd3RdPXRbb107cmV0dXJuIHYoaSxuLG4ubGVuZ3RoLGUsciksaS5zdWJhcnJheShfdCl9LHQuc2VjcmV0Ym94Lm9wZW49ZnVuY3Rpb24odCxlLHIpeyQodCxlLHIpLFoocixlKTtmb3IodmFyIG49bmV3IFVpbnQ4QXJyYXkoX3QrdC5sZW5ndGgpLGk9bmV3IFVpbnQ4QXJyYXkobi5sZW5ndGgpLG89MDtvPHQubGVuZ3RoO28rKyluW28rX3RdPXRbb107cmV0dXJuIShuLmxlbmd0aDwzMikmJigwPT09eShpLG4sbi5sZW5ndGgsZSxyKSYmaS5zdWJhcnJheSh3dCkpfSx0LnNlY3JldGJveC5rZXlMZW5ndGg9bXQsdC5zZWNyZXRib3gubm9uY2VMZW5ndGg9Z3QsdC5zZWNyZXRib3gub3ZlcmhlYWRMZW5ndGg9X3QsdC5zY2FsYXJNdWx0PWZ1bmN0aW9uKHQsZSl7aWYoJCh0LGUpLHQubGVuZ3RoIT09U3QpdGhyb3cgbmV3IEVycm9yKFwiYmFkIG4gc2l6ZVwiKTtpZihlLmxlbmd0aCE9PU10KXRocm93IG5ldyBFcnJvcihcImJhZCBwIHNpemVcIik7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoTXQpO3JldHVybiBSKHIsdCxlKSxyfSx0LnNjYWxhck11bHQuYmFzZT1mdW5jdGlvbih0KXtpZigkKHQpLHQubGVuZ3RoIT09U3QpdGhyb3cgbmV3IEVycm9yKFwiYmFkIG4gc2l6ZVwiKTt2YXIgZT1uZXcgVWludDhBcnJheShNdCk7cmV0dXJuIFAoZSx0KSxlfSx0LnNjYWxhck11bHQuc2NhbGFyTGVuZ3RoPVN0LHQuc2NhbGFyTXVsdC5ncm91cEVsZW1lbnRMZW5ndGg9TXQsdC5ib3g9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIG89dC5ib3guYmVmb3JlKG4saSk7cmV0dXJuIHQuc2VjcmV0Ym94KGUscixvKX0sdC5ib3guYmVmb3JlPWZ1bmN0aW9uKHQsZSl7JCh0LGUpLEoodCxlKTt2YXIgcj1uZXcgVWludDhBcnJheShrdCk7cmV0dXJuIGoocix0LGUpLHJ9LHQuYm94LmFmdGVyPXQuc2VjcmV0Ym94LHQuYm94Lm9wZW49ZnVuY3Rpb24oZSxyLG4saSl7dmFyIG89dC5ib3guYmVmb3JlKG4saSk7cmV0dXJuIHQuc2VjcmV0Ym94Lm9wZW4oZSxyLG8pfSx0LmJveC5vcGVuLmFmdGVyPXQuc2VjcmV0Ym94Lm9wZW4sdC5ib3gua2V5UGFpcj1mdW5jdGlvbigpe3ZhciB0PW5ldyBVaW50OEFycmF5KEV0KSxlPW5ldyBVaW50OEFycmF5KEF0KTtyZXR1cm4gVCh0LGUpLHtwdWJsaWNLZXk6dCxzZWNyZXRLZXk6ZX19LHQuYm94LmtleVBhaXIuZnJvbVNlY3JldEtleT1mdW5jdGlvbih0KXtpZigkKHQpLHQubGVuZ3RoIT09QXQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHNlY3JldCBrZXkgc2l6ZVwiKTt2YXIgZT1uZXcgVWludDhBcnJheShFdCk7cmV0dXJuIFAoZSx0KSx7cHVibGljS2V5OmUsc2VjcmV0S2V5Om5ldyBVaW50OEFycmF5KHQpfX0sdC5ib3gucHVibGljS2V5TGVuZ3RoPUV0LHQuYm94LnNlY3JldEtleUxlbmd0aD1BdCx0LmJveC5zaGFyZWRLZXlMZW5ndGg9a3QsdC5ib3gubm9uY2VMZW5ndGg9eHQsdC5ib3gub3ZlcmhlYWRMZW5ndGg9dC5zZWNyZXRib3gub3ZlcmhlYWRMZW5ndGgsdC5zaWduPWZ1bmN0aW9uKHQsZSl7aWYoJCh0LGUpLGUubGVuZ3RoIT09UHQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHNlY3JldCBrZXkgc2l6ZVwiKTt2YXIgcj1uZXcgVWludDhBcnJheShPdCt0Lmxlbmd0aCk7cmV0dXJuIFgocix0LHQubGVuZ3RoLGUpLHJ9LHQuc2lnbi5vcGVuPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwibmFjbC5zaWduLm9wZW4gYWNjZXB0cyAyIGFyZ3VtZW50czsgZGlkIHlvdSBtZWFuIHRvIHVzZSBuYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5P1wiKTtpZigkKHQsZSksZS5sZW5ndGghPT1SdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcHVibGljIGtleSBzaXplXCIpO3ZhciByPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKSxuPVcocix0LHQubGVuZ3RoLGUpO2lmKG48MClyZXR1cm4gbnVsbDtmb3IodmFyIGk9bmV3IFVpbnQ4QXJyYXkobiksbz0wO288aS5sZW5ndGg7bysrKWlbb109cltvXTtyZXR1cm4gaX0sdC5zaWduLmRldGFjaGVkPWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXQuc2lnbihlLHIpLGk9bmV3IFVpbnQ4QXJyYXkoT3QpLG89MDtvPGkubGVuZ3RoO28rKylpW29dPW5bb107cmV0dXJuIGl9LHQuc2lnbi5kZXRhY2hlZC52ZXJpZnk9ZnVuY3Rpb24odCxlLHIpe2lmKCQodCxlLHIpLGUubGVuZ3RoIT09T3QpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHNpZ25hdHVyZSBzaXplXCIpO2lmKHIubGVuZ3RoIT09UnQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHB1YmxpYyBrZXkgc2l6ZVwiKTt2YXIgbixpPW5ldyBVaW50OEFycmF5KE90K3QubGVuZ3RoKSxvPW5ldyBVaW50OEFycmF5KE90K3QubGVuZ3RoKTtmb3Iobj0wO248T3Q7bisrKWlbbl09ZVtuXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlbbitPdF09dFtuXTtyZXR1cm4gVyhvLGksaS5sZW5ndGgscik+PTB9LHQuc2lnbi5rZXlQYWlyPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoUnQpLGU9bmV3IFVpbnQ4QXJyYXkoUHQpO3JldHVybiBHKHQsZSkse3B1YmxpY0tleTp0LHNlY3JldEtleTplfX0sdC5zaWduLmtleVBhaXIuZnJvbVNlY3JldEtleT1mdW5jdGlvbih0KXtpZigkKHQpLHQubGVuZ3RoIT09UHQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHNlY3JldCBrZXkgc2l6ZVwiKTtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkoUnQpLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdPXRbMzIrcl07cmV0dXJue3B1YmxpY0tleTplLHNlY3JldEtleTpuZXcgVWludDhBcnJheSh0KX19LHQuc2lnbi5rZXlQYWlyLmZyb21TZWVkPWZ1bmN0aW9uKHQpe2lmKCQodCksdC5sZW5ndGghPT1UdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VlZCBzaXplXCIpO2Zvcih2YXIgZT1uZXcgVWludDhBcnJheShSdCkscj1uZXcgVWludDhBcnJheShQdCksbj0wO248MzI7bisrKXJbbl09dFtuXTtyZXR1cm4gRyhlLHIsITApLHtwdWJsaWNLZXk6ZSxzZWNyZXRLZXk6cn19LHQuc2lnbi5wdWJsaWNLZXlMZW5ndGg9UnQsdC5zaWduLnNlY3JldEtleUxlbmd0aD1QdCx0LnNpZ24uc2VlZExlbmd0aD1UdCx0LnNpZ24uc2lnbmF0dXJlTGVuZ3RoPU90LHQuaGFzaD1mdW5jdGlvbih0KXskKHQpO3ZhciBlPW5ldyBVaW50OEFycmF5KGp0KTtyZXR1cm4gVShlLHQsdC5sZW5ndGgpLGV9LHQuaGFzaC5oYXNoTGVuZ3RoPWp0LHQudmVyaWZ5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuICQodCxlKSwwIT09dC5sZW5ndGgmJjAhPT1lLmxlbmd0aCYmKHQubGVuZ3RoPT09ZS5sZW5ndGgmJjA9PT1uKHQsMCxlLDAsdC5sZW5ndGgpKX0sdC5zZXRQUk5HPWZ1bmN0aW9uKHQpe2V0PXR9LGZ1bmN0aW9uKCl7dmFyIGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZi5jcnlwdG98fHNlbGYubXNDcnlwdG86bnVsbDtpZihlJiZlLmdldFJhbmRvbVZhbHVlcyl7dmFyIG49NjU1MzY7dC5zZXRQUk5HKGZ1bmN0aW9uKHQscil7dmFyIGksbz1uZXcgVWludDhBcnJheShyKTtmb3IoaT0wO2k8cjtpKz1uKWUuZ2V0UmFuZG9tVmFsdWVzKG8uc3ViYXJyYXkoaSxpK01hdGgubWluKHItaSxuKSkpO2ZvcihpPTA7aTxyO2krKyl0W2ldPW9baV07UShvKX0pfWVsc2UgZT1yKDYwOCksZSYmZS5yYW5kb21CeXRlcyYmdC5zZXRQUk5HKGZ1bmN0aW9uKHQscil7dmFyIG4saT1lLnJhbmRvbUJ5dGVzKHIpO2ZvcihuPTA7bjxyO24rKyl0W25dPWlbbl07UShpKX0pfSgpfShcInVuZGVmaW5lZFwiIT10eXBlb2YgdCYmdC5leHBvcnRzP3QuZXhwb3J0czpzZWxmLm5hY2w9c2VsZi5uYWNsfHx7fSl9LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCl7dmFyIGU9dC5sZW5ndGg7aWYoZSU0PjApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNFwiKTtyZXR1cm5cIj1cIj09PXRbZS0yXT8yOlwiPVwiPT09dFtlLTFdPzE6MH1mdW5jdGlvbiBuKHQpe3JldHVybiAzKnQubGVuZ3RoLzQtcih0KX1mdW5jdGlvbiBpKHQpe3ZhciBlLG4saSxvLGEsZixzPXQubGVuZ3RoO2E9cih0KSxmPW5ldyBoKDMqcy80LWEpLGk9YT4wP3MtNDpzO3ZhciBjPTA7Zm9yKGU9MCxuPTA7ZTxpO2UrPTQsbis9MylvPXVbdC5jaGFyQ29kZUF0KGUpXTw8MTh8dVt0LmNoYXJDb2RlQXQoZSsxKV08PDEyfHVbdC5jaGFyQ29kZUF0KGUrMildPDw2fHVbdC5jaGFyQ29kZUF0KGUrMyldLGZbYysrXT1vPj4xNiYyNTUsZltjKytdPW8+PjgmMjU1LGZbYysrXT0yNTUmbztyZXR1cm4gMj09PWE/KG89dVt0LmNoYXJDb2RlQXQoZSldPDwyfHVbdC5jaGFyQ29kZUF0KGUrMSldPj40LGZbYysrXT0yNTUmbyk6MT09PWEmJihvPXVbdC5jaGFyQ29kZUF0KGUpXTw8MTB8dVt0LmNoYXJDb2RlQXQoZSsxKV08PDR8dVt0LmNoYXJDb2RlQXQoZSsyKV0+PjIsZltjKytdPW8+PjgmMjU1LGZbYysrXT0yNTUmbyksZn1mdW5jdGlvbiBvKHQpe3JldHVybiBzW3Q+PjE4JjYzXStzW3Q+PjEyJjYzXStzW3Q+PjYmNjNdK3NbNjMmdF19ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuLGk9W10sYT1lO2E8cjthKz0zKW49KHRbYV08PDE2KSsodFthKzFdPDw4KSt0W2ErMl0saS5wdXNoKG8obikpO3JldHVybiBpLmpvaW4oXCJcIil9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPXIlMyxpPVwiXCIsbz1bXSxmPTE2MzgzLHU9MCxoPXItbjt1PGg7dSs9ZilvLnB1c2goYSh0LHUsdStmPmg/aDp1K2YpKTtyZXR1cm4gMT09PW4/KGU9dFtyLTFdLGkrPXNbZT4+Ml0saSs9c1tlPDw0JjYzXSxpKz1cIj09XCIpOjI9PT1uJiYoZT0odFtyLTJdPDw4KSt0W3ItMV0saSs9c1tlPj4xMF0saSs9c1tlPj40JjYzXSxpKz1zW2U8PDImNjNdLGkrPVwiPVwiKSxvLnB1c2goaSksby5qb2luKFwiXCIpfWUuYnl0ZUxlbmd0aD1uLGUudG9CeXRlQXJyYXk9aSxlLmZyb21CeXRlQXJyYXk9Zjtmb3IodmFyIHM9W10sdT1bXSxoPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksYz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIixkPTAsbD1jLmxlbmd0aDtkPGw7KytkKXNbZF09Y1tkXSx1W2MuY2hhckNvZGVBdChkKV09ZDt1W1wiLVwiLmNoYXJDb2RlQXQoMCldPTYyLHVbXCJfXCIuY2hhckNvZGVBdCgwKV09NjN9LGZ1bmN0aW9uKHQsZSl7ZS5yZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG8sYSxmPTgqaS1uLTEscz0oMTw8ZiktMSx1PXM+PjEsaD0tNyxjPXI/aS0xOjAsZD1yPy0xOjEsbD10W2UrY107Zm9yKGMrPWQsbz1sJigxPDwtaCktMSxsPj49LWgsaCs9ZjtoPjA7bz0yNTYqbyt0W2UrY10sYys9ZCxoLT04KTtmb3IoYT1vJigxPDwtaCktMSxvPj49LWgsaCs9bjtoPjA7YT0yNTYqYSt0W2UrY10sYys9ZCxoLT04KTtpZigwPT09bylvPTEtdTtlbHNle2lmKG89PT1zKXJldHVybiBhP05hTjoobD8tMToxKSooMS8wKTthKz1NYXRoLnBvdygyLG4pLG8tPXV9cmV0dXJuKGw/LTE6MSkqYSpNYXRoLnBvdygyLG8tbil9LGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbixpLG8pe3ZhciBhLGYscyx1PTgqby1pLTEsaD0oMTw8dSktMSxjPWg+PjEsZD0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGw9bj8wOm8tMSxwPW4/MTotMSxiPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8oZj1pc05hTihlKT8xOjAsYT1oKTooYT1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihzPU1hdGgucG93KDIsLWEpKTwxJiYoYS0tLHMqPTIpLGUrPWErYz49MT9kL3M6ZCpNYXRoLnBvdygyLDEtYyksZSpzPj0yJiYoYSsrLHMvPTIpLGErYz49aD8oZj0wLGE9aCk6YStjPj0xPyhmPShlKnMtMSkqTWF0aC5wb3coMixpKSxhKz1jKTooZj1lKk1hdGgucG93KDIsYy0xKSpNYXRoLnBvdygyLGkpLGE9MCkpO2k+PTg7dFtyK2xdPTI1NSZmLGwrPXAsZi89MjU2LGktPTgpO2ZvcihhPWE8PGl8Zix1Kz1pO3U+MDt0W3IrbF09MjU1JmEsbCs9cCxhLz0yNTYsdS09OCk7dFtyK2wtcF18PTEyOCpifX0sZnVuY3Rpb24odCxlKXt2YXIgcj17fS50b1N0cmluZzt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT1yLmNhbGwodCl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByLG47aWYodD10LnRvTG93ZXJDYXNlKCksZFt0XSlyPWRbdF0ua2V5LG49ZFt0XS5pdjtlbHNle2lmKCFjW3RdKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7cj04KmNbdF0ua2V5LG49Y1t0XS5pdn12YXIgaT1zKGUsITEscixuKTtyZXR1cm4gbyh0LGkua2V5LGkuaXYpfWZ1bmN0aW9uIGkodCxlKXt2YXIgcixuO2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGRbdF0pcj1kW3RdLmtleSxuPWRbdF0uaXY7ZWxzZXtpZighY1t0XSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3I9OCpjW3RdLmtleSxuPWNbdF0uaXZ9dmFyIGk9cyhlLCExLHIsbik7cmV0dXJuIGEodCxpLmtleSxpLml2KX1mdW5jdGlvbiBvKHQsZSxyKXtpZih0PXQudG9Mb3dlckNhc2UoKSxkW3RdKXJldHVybiB1LmNyZWF0ZUNpcGhlcml2KHQsZSxyKTtpZihjW3RdKXJldHVybiBuZXcgaCh7a2V5OmUsaXY6cixtb2RlOnR9KTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpfWZ1bmN0aW9uIGEodCxlLHIpe2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGRbdF0pcmV0dXJuIHUuY3JlYXRlRGVjaXBoZXJpdih0LGUscik7aWYoY1t0XSlyZXR1cm4gbmV3IGgoe2tleTplLGl2OnIsbW9kZTp0LGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpfWZ1bmN0aW9uIGYoKXtyZXR1cm4gT2JqZWN0LmtleXMoYykuY29uY2F0KHUuZ2V0Q2lwaGVycygpKX12YXIgcz1yKDE0NiksdT1yKDQ5NCksaD1yKDQ5OCksYz1yKDQ5OSksZD1yKDk1KTtlLmNyZWF0ZUNpcGhlcj1lLkNpcGhlcj1uLGUuY3JlYXRlQ2lwaGVyaXY9ZS5DaXBoZXJpdj1vLGUuY3JlYXRlRGVjaXBoZXI9ZS5EZWNpcGhlcj1pLGUuY3JlYXRlRGVjaXBoZXJpdj1lLkRlY2lwaGVyaXY9YSxlLmxpc3RDaXBoZXJzPWUuZ2V0Q2lwaGVycz1mfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBPYmplY3Qua2V5cyhhKX12YXIgaT1yKDQ5Nik7ZS5jcmVhdGVDaXBoZXI9ZS5DaXBoZXI9aS5jcmVhdGVDaXBoZXIsZS5jcmVhdGVDaXBoZXJpdj1lLkNpcGhlcml2PWkuY3JlYXRlQ2lwaGVyaXY7dmFyIG89cig0OTUpO2UuY3JlYXRlRGVjaXBoZXI9ZS5EZWNpcGhlcj1vLmNyZWF0ZURlY2lwaGVyLGUuY3JlYXRlRGVjaXBoZXJpdj1lLkRlY2lwaGVyaXY9by5jcmVhdGVEZWNpcGhlcml2O3ZhciBhPXIoOTUpO2UubGlzdENpcGhlcnM9ZS5nZXRDaXBoZXJzPW59LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh1LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBzLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyB0KG8ubGVuZ3RoKSxvLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT1lLHZvaWQodGhpcy5fYXV0b3BhZGRpbmc9ITApKTpuZXcgbihlLHIsbyl9ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT92b2lkKHRoaXMuY2FjaGU9bmV3IHQoXCJcIikpOm5ldyBpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXRbMTVdLHI9LTE7KytyPGU7KWlmKHRbcisoMTYtZSldIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhXCIpO2lmKDE2IT09ZSlyZXR1cm4gdC5zbGljZSgwLDE2LWUpfWZ1bmN0aW9uIGEoZSxyLGkpe3ZhciBvPWNbZS50b0xvd2VyQ2FzZSgpXTtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT1uZXcgdChpKSksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyB0KHIpKSxyLmxlbmd0aCE9PW8ua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQga2V5IGxlbmd0aCBcIityLmxlbmd0aCk7aWYoaS5sZW5ndGghPT1vLml2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGl2IGxlbmd0aCBcIitpLmxlbmd0aCk7cmV0dXJuXCJzdHJlYW1cIj09PW8udHlwZT9uZXcgZChiW28ubW9kZV0scixpLCEwKTpcImF1dGhcIj09PW8udHlwZT9uZXcgbChiW28ubW9kZV0scixpLCEwKTpuZXcgbihiW28ubW9kZV0scixpKX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9Y1t0LnRvTG93ZXJDYXNlKCldO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7dmFyIG49cChlLCExLHIua2V5LHIuaXYpO3JldHVybiBhKHQsbi5rZXksbi5pdil9dmFyIHM9cig5NCksdT1yKDk3KSxoPXIoMiksYz1yKDk1KSxkPXIoMjEwKSxsPXIoMjAzKSxwPXIoMTQ2KTtoKG4sdSksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9jYWNoZS5hZGQoZSk7Zm9yKHZhciByLG4saT1bXTtyPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KW49dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gbyh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyx0KSk7aWYodCl0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXQsdGhpc30saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9dC5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYodCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIGU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLGV9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIGU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLGU7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9O3ZhciBiPXtFQ0I6cigyMDgpLENCQzpyKDIwNCksQ0ZCOnIoMjA1KSxDRkI4OnIoMjA3KSxDRkIxOnIoMjA2KSxPRkI6cigyMDkpLENUUjpyKDk2KSxHQ006cig5Nil9O2UuY3JlYXRlRGVjaXBoZXI9ZixlLmNyZWF0ZURlY2lwaGVyaXY9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhzLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fY2lwaGVyPW5ldyBmLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyB0KG8ubGVuZ3RoKSxvLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT1lLHZvaWQodGhpcy5fYXV0b3BhZGRpbmc9ITApKTpuZXcgbihlLHIsbyl9ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT92b2lkKHRoaXMuY2FjaGU9bmV3IHQoXCJcIikpOm5ldyBpfWZ1bmN0aW9uIG8oZSxyLGkpe3ZhciBvPWhbZS50b0xvd2VyQ2FzZSgpXTtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT1uZXcgdChpKSksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyB0KHIpKSxyLmxlbmd0aCE9PW8ua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQga2V5IGxlbmd0aCBcIityLmxlbmd0aCk7aWYoaS5sZW5ndGghPT1vLml2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGl2IGxlbmd0aCBcIitpLmxlbmd0aCk7cmV0dXJuXCJzdHJlYW1cIj09PW8udHlwZT9uZXcgZChwW28ubW9kZV0scixpKTpcImF1dGhcIj09PW8udHlwZT9uZXcgbChwW28ubW9kZV0scixpKTpuZXcgbihwW28ubW9kZV0scixpKX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9aFt0LnRvTG93ZXJDYXNlKCldO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7dmFyIG49YyhlLCExLHIua2V5LHIuaXYpO3JldHVybiBvKHQsbi5rZXksbi5pdil9dmFyIGY9cig5NCkscz1yKDk3KSx1PXIoMiksaD1yKDk1KSxjPXIoMTQ2KSxkPXIoMjEwKSxsPXIoMjAzKTt1KG4scyksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9jYWNoZS5hZGQoZSk7Zm9yKHZhciByLG4saT1bXTtyPXRoaXMuX2NhY2hlLmdldCgpOyluPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHIpLGkucHVzaChuKTtyZXR1cm4gdC5jb25jYXQoaSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIHQ9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCksdGhpcy5fY2lwaGVyLnNjcnViKCksdDtpZihcIjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwXCIhPT10LnRvU3RyaW5nKFwiaGV4XCIpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcihcImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aFwiKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhdCx0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZT10LmNvbmNhdChbdGhpcy5jYWNoZSxlXSl9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgdD10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHR9cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTE2LXRoaXMuY2FjaGUubGVuZ3RoLHI9bmV3IHQoZSksbj0tMTsrK248ZTspci53cml0ZVVJbnQ4KGUsbik7dmFyIGk9dC5jb25jYXQoW3RoaXMuY2FjaGUscl0pO3JldHVybiBpfTt2YXIgcD17RUNCOnIoMjA4KSxDQkM6cigyMDQpLENGQjpyKDIwNSksQ0ZCODpyKDIwNyksQ0ZCMTpyKDIwNiksT0ZCOnIoMjA5KSxDVFI6cig5NiksR0NNOnIoOTYpfTtlLmNyZWF0ZUNpcGhlcml2PW8sZS5jcmVhdGVDaXBoZXI9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0KXt0aGlzLmg9dCx0aGlzLnN0YXRlPW5ldyBlKDE2KSx0aGlzLnN0YXRlLmZpbGwoMCksdGhpcy5jYWNoZT1uZXcgZShcIlwiKX1mdW5jdGlvbiBuKHQpe3JldHVyblt0LnJlYWRVSW50MzJCRSgwKSx0LnJlYWRVSW50MzJCRSg0KSx0LnJlYWRVSW50MzJCRSg4KSx0LnJlYWRVSW50MzJCRSgxMildfWZ1bmN0aW9uIGkodCl7dD10Lm1hcChvKTt2YXIgcj1uZXcgZSgxNik7cmV0dXJuIHIud3JpdGVVSW50MzJCRSh0WzBdLDApLHIud3JpdGVVSW50MzJCRSh0WzFdLDQpLHIud3JpdGVVSW50MzJCRSh0WzJdLDgpLHIud3JpdGVVSW50MzJCRSh0WzNdLDEyKSxyfWZ1bmN0aW9uIG8odCl7dmFyIGUscjtyZXR1cm4gZT10PnN8fHQ8MD8ocj1NYXRoLmFicyh0KSVzLHQ8MD9zLXI6cik6dH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuW3RbMF1eZVswXSx0WzFdXmVbMV0sdFsyXV5lWzJdLHRbM11eZVszXV19dmFyIGY9bmV3IGUoMTYpO2YuZmlsbCgwKSx0LmV4cG9ydHM9cixyLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9LTE7KytlPHQubGVuZ3RoOyl0aGlzLnN0YXRlW2VdXj10W2VdO3RoaXMuX211bHRpcGx5KCl9LHIucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbz1uKHRoaXMuaCksZj1bMCwwLDAsMF0scz0tMTsrK3M8MTI4Oyl7Zm9yKGU9MCE9PSh0aGlzLnN0YXRlW35+KHMvOCldJjE8PDctcyU4KSxlJiYoZj1hKGYsbykpLHI9MCE9PSgxJm9bM10pLHQ9Mzt0PjA7dC0tKW9bdF09b1t0XT4+PjF8KDEmb1t0LTFdKTw8MzE7b1swXT1vWzBdPj4+MSxyJiYob1swXT1vWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9aShmKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuY2FjaGU9ZS5jb25jYXQoW3RoaXMuY2FjaGUsdF0pO2Zvcih2YXIgcjt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KXI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2gocil9LHIucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKGUuY29uY2F0KFt0aGlzLmNhY2hlLGZdLDE2KSksdGhpcy5naGFzaChpKFswLHQsMCxyXSkpLHRoaXMuc3RhdGV9O3ZhciBzPU1hdGgucG93KDIsMzIpfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKTt2YXIgcixuPXQubW9kZS50b0xvd2VyQ2FzZSgpLG89ZltuXTtyPXQuZGVjcnlwdD9cImRlY3J5cHRcIjpcImVuY3J5cHRcIjt2YXIgYT10LmtleTtcImRlcy1lZGVcIiE9PW4mJlwiZGVzLWVkZS1jYmNcIiE9PW58fChhPWUuY29uY2F0KFthLGEuc2xpY2UoMCw4KV0pKTt2YXIgcz10Lml2O3RoaXMuX2Rlcz1vLmNyZWF0ZSh7a2V5OmEsaXY6cyx0eXBlOnJ9KX12YXIgaT1yKDUwMCksbz1yKDE0NSksYT1yKDIpLGY9e1wiZGVzLWVkZTMtY2JjXCI6by5DQkMuaW5zdGFudGlhdGUoby5FREUpLFwiZGVzLWVkZTNcIjpvLkVERSxcImRlcy1lZGUtY2JjXCI6by5DQkMuaW5zdGFudGlhdGUoby5FREUpLFwiZGVzLWVkZVwiOm8uRURFLFwiZGVzLWNiY1wiOm8uQ0JDLmluc3RhbnRpYXRlKG8uREVTKSxcImRlcy1lY2JcIjpvLkRFU307Zi5kZXM9ZltcImRlcy1jYmNcIl0sZi5kZXMzPWZbXCJkZXMtZWRlMy1jYmNcIl0sdC5leHBvcnRzPW4sYShuLGkpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlKHRoaXMuX2Rlcy51cGRhdGUodCkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcy5fZGVzLmZpbmFsKCkpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZVtcImRlcy1lY2JcIl09e2tleTo4LGl2OjB9LGVbXCJkZXMtY2JjXCJdPWUuZGVzPXtrZXk6OCxpdjo4fSxlW1wiZGVzLWVkZTMtY2JjXCJdPWUuZGVzMz17a2V5OjI0LGl2Ojh9LGVbXCJkZXMtZWRlM1wiXT17a2V5OjI0LGl2OjB9LGVbXCJkZXMtZWRlLWNiY1wiXT17a2V5OjE2LGl2Ojh9LGVbXCJkZXMtZWRlXCJdPXtrZXk6MTYsaXY6MH19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT1cInN0cmluZ1wiPT10eXBlb2YgdCx0aGlzLmhhc2hNb2RlP3RoaXNbdF09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9dmFyIGk9cigzMSkuVHJhbnNmb3JtLG89cigyKSxhPXIoNTIpLlN0cmluZ0RlY29kZXI7dC5leHBvcnRzPW4sbyhuLGkpLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LHIsbil7XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQscikpO3ZhciBpPXRoaXMuX3VwZGF0ZSh0KTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihuJiYoaT10aGlzLl90b1N0cmluZyhpLG4pKSxpKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3ZhciBuO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh0KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHQpKX1jYXRjaCh0KXtuPXR9ZmluYWxseXtyKG4pfX0sbi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0aGlzLnB1c2godGhpcy5fZmluYWwoKSl9Y2F0Y2godCl7ZT10fWZpbmFsbHl7dChlKX19LG4ucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX2ZpbmFsKCl8fG5ldyBlKFwiXCIpO3JldHVybiB0JiYocj10aGlzLl90b1N0cmluZyhyLHQsITApKSxyfSxuLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBhKGUpLHRoaXMuX2VuY29kaW5nPWUpLHRoaXMuX2VuY29kaW5nIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzXCIpO3ZhciBuPXRoaXMuX2RlY29kZXIud3JpdGUodCk7cmV0dXJuIHImJihuKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxufX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe28uZXF1YWwodC5sZW5ndGgsOCxcIkludmFsaWQgSVYgbGVuZ3RoXCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgZT0wO2U8dGhpcy5pdi5sZW5ndGg7ZSsrKXRoaXMuaXZbZV09dFtlXX1mdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSksdGhpcy5fY2JjSW5pdCgpfWEoZSx0KTtmb3IodmFyIHI9T2JqZWN0LmtleXMoZiksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2UucHJvdG90eXBlW2ldPWZbaV19cmV0dXJuIGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0KX0sZX12YXIgbz1yKDk4KSxhPXIoMiksZj17fTtlLmluc3RhbnRpYXRlPWksZi5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciB0PW5ldyBuKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2JjU3RhdGU9dH0sZi5fdXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuX2NiY1N0YXRlLG89dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLGE9aS5pdjtpZihcImVuY3J5cHRcIj09PXRoaXMudHlwZSl7Zm9yKHZhciBmPTA7Zjx0aGlzLmJsb2NrU2l6ZTtmKyspYVtmXV49dFtlK2ZdO28uX3VwZGF0ZS5jYWxsKHRoaXMsYSwwLHIsbik7Zm9yKHZhciBmPTA7Zjx0aGlzLmJsb2NrU2l6ZTtmKyspYVtmXT1yW24rZl19ZWxzZXtvLl91cGRhdGUuY2FsbCh0aGlzLHQsZSxyLG4pO2Zvcih2YXIgZj0wO2Y8dGhpcy5ibG9ja1NpemU7ZisrKXJbbitmXV49YVtmXTtmb3IodmFyIGY9MDtmPHRoaXMuYmxvY2tTaXplO2YrKylhW2ZdPXRbZStmXX19fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt0aGlzLm9wdGlvbnM9dCx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wfXZhciBpPXIoOTgpO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10Lmxlbmd0aD9bXTpcImRlY3J5cHRcIj09PXRoaXMudHlwZT90aGlzLl91cGRhdGVEZWNyeXB0KHQpOnRoaXMuX3VwZGF0ZUVuY3J5cHQodCl9LG4ucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLHQubGVuZ3RoLWUpLG49MDtuPHI7bisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmK25dPXRbZStuXTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPXIscn0sbi5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLHQsZSksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0sbi5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQ9ZnVuY3Rpb24odCl7dmFyIGU9MCxyPTAsbj0odGhpcy5idWZmZXJPZmYrdC5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDAsaT1uZXcgQXJyYXkobip0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYoZSs9dGhpcy5fYnVmZmVyKHQsZSksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihyKz10aGlzLl9mbHVzaEJ1ZmZlcihpLHIpKSk7Zm9yKHZhciBvPXQubGVuZ3RoLSh0Lmxlbmd0aC1lKSV0aGlzLmJsb2NrU2l6ZTtlPG87ZSs9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKHQsZSxpLHIpLHIrPXRoaXMuYmxvY2tTaXplO2Zvcig7ZTx0Lmxlbmd0aDtlKyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09dFtlXTtyZXR1cm4gaX0sbi5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZit0Lmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsaT1uZXcgQXJyYXkobip0aGlzLmJsb2NrU2l6ZSk7bj4wO24tLSllKz10aGlzLl9idWZmZXIodCxlKSxyKz10aGlzLl9mbHVzaEJ1ZmZlcihpLHIpO3JldHVybiBlKz10aGlzLl9idWZmZXIodCxlKSxpfSxuLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbih0KXt2YXIgZTt0JiYoZT10aGlzLnVwZGF0ZSh0KSk7dmFyIHI7cmV0dXJuIHI9XCJlbmNyeXB0XCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksZT9lLmNvbmNhdChyKTpyfSxuLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKHQsZSl7aWYoMD09PWUpcmV0dXJuITE7Zm9yKDtlPHQubGVuZ3RoOyl0W2UrK109MDtyZXR1cm4hMH0sbi5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciB0PW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLHQsMCksdH0sbi5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxuLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7aS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSxcIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNyeXB0XCIpO3ZhciB0PW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKHQsMCksdGhpcy5fdW5wYWQodCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbigpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBpKHQpe3UuY2FsbCh0aGlzLHQpO3ZhciBlPW5ldyBuO3RoaXMuX2Rlc1N0YXRlPWUsdGhpcy5kZXJpdmVLZXlzKGUsdC5rZXkpfXZhciBvPXIoOTgpLGE9cigyKSxmPXIoMTQ1KSxzPWYudXRpbHMsdT1mLkNpcGhlcjthKGksdSksdC5leHBvcnRzPWksaS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHQpfTt2YXIgaD1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07aS5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbih0LGUpe3Qua2V5cz1uZXcgQXJyYXkoMzIpLG8uZXF1YWwoZS5sZW5ndGgsdGhpcy5ibG9ja1NpemUsXCJJbnZhbGlkIGtleSBsZW5ndGhcIik7dmFyIHI9cy5yZWFkVUludDMyQkUoZSwwKSxuPXMucmVhZFVJbnQzMkJFKGUsNCk7cy5wYzEocixuLHQudG1wLDApLHI9dC50bXBbMF0sbj10LnRtcFsxXTtmb3IodmFyIGk9MDtpPHQua2V5cy5sZW5ndGg7aSs9Mil7dmFyIGE9aFtpPj4+MV07cj1zLnIyOHNobChyLGEpLG49cy5yMjhzaGwobixhKSxzLnBjMihyLG4sdC5rZXlzLGkpfX0saS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLl9kZXNTdGF0ZSxvPXMucmVhZFVJbnQzMkJFKHQsZSksYT1zLnJlYWRVSW50MzJCRSh0LGUrNCk7cy5pcChvLGEsaS50bXAsMCksbz1pLnRtcFswXSxhPWkudG1wWzFdLFwiZW5jcnlwdFwiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQoaSxvLGEsaS50bXAsMCk6dGhpcy5fZGVjcnlwdChpLG8sYSxpLnRtcCwwKSxvPWkudG1wWzBdLGE9aS50bXBbMV0scy53cml0ZVVJbnQzMkJFKHIsbyxuKSxzLndyaXRlVUludDMyQkUocixhLG4rNCl9LGkucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgtZSxuPWU7bjx0Lmxlbmd0aDtuKyspdFtuXT1yO3JldHVybiEwfSxpLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbdC5sZW5ndGgtMV0scj10Lmxlbmd0aC1lO3I8dC5sZW5ndGg7cisrKW8uZXF1YWwodFtyXSxlKTtyZXR1cm4gdC5zbGljZSgwLHQubGVuZ3RoLWUpfSxpLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgbz1lLGE9cixmPTA7Zjx0LmtleXMubGVuZ3RoO2YrPTIpe3ZhciB1PXQua2V5c1tmXSxoPXQua2V5c1tmKzFdO3MuZXhwYW5kKGEsdC50bXAsMCksdV49dC50bXBbMF0saF49dC50bXBbMV07dmFyIGM9cy5zdWJzdGl0dXRlKHUsaCksZD1zLnBlcm11dGUoYyksbD1hO2E9KG9eZCk+Pj4wLG89bH1zLnJpcChhLG8sbixpKX0saS5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIG89cixhPWUsZj10LmtleXMubGVuZ3RoLTI7Zj49MDtmLT0yKXt2YXIgdT10LmtleXNbZl0saD10LmtleXNbZisxXTtzLmV4cGFuZChvLHQudG1wLDApLHVePXQudG1wWzBdLGhePXQudG1wWzFdO3ZhciBjPXMuc3Vic3RpdHV0ZSh1LGgpLGQ9cy5wZXJtdXRlKGMpLGw9bztvPShhXmQpPj4+MCxhPWx9cy5yaXAobyxhLG4saSl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe28uZXF1YWwoZS5sZW5ndGgsMjQsXCJJbnZhbGlkIGtleSBsZW5ndGhcIik7dmFyIHI9ZS5zbGljZSgwLDgpLG49ZS5zbGljZSg4LDE2KSxpPWUuc2xpY2UoMTYsMjQpO1wiZW5jcnlwdFwiPT09dD90aGlzLmNpcGhlcnM9W3UuY3JlYXRlKHt0eXBlOlwiZW5jcnlwdFwiLGtleTpyfSksdS5jcmVhdGUoe3R5cGU6XCJkZWNyeXB0XCIsa2V5Om59KSx1LmNyZWF0ZSh7dHlwZTpcImVuY3J5cHRcIixrZXk6aX0pXTp0aGlzLmNpcGhlcnM9W3UuY3JlYXRlKHt0eXBlOlwiZGVjcnlwdFwiLGtleTppfSksdS5jcmVhdGUoe3R5cGU6XCJlbmNyeXB0XCIsa2V5Om59KSx1LmNyZWF0ZSh7dHlwZTpcImRlY3J5cHRcIixrZXk6cn0pXX1mdW5jdGlvbiBpKHQpe3MuY2FsbCh0aGlzLHQpO3ZhciBlPW5ldyBuKHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1lfXZhciBvPXIoOTgpLGE9cigyKSxmPXIoMTQ1KSxzPWYuQ2lwaGVyLHU9Zi5ERVM7YShpLHMpLHQuZXhwb3J0cz1pLGkuY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0KX0saS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLl9lZGVTdGF0ZTtpLmNpcGhlcnNbMF0uX3VwZGF0ZSh0LGUscixuKSxpLmNpcGhlcnNbMV0uX3VwZGF0ZShyLG4scixuKSxpLmNpcGhlcnNbMl0uX3VwZGF0ZShyLG4scixuKX0saS5wcm90b3R5cGUuX3BhZD11LnByb3RvdHlwZS5fcGFkLGkucHJvdG90eXBlLl91bnBhZD11LnByb3RvdHlwZS5fdW5wYWR9LGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzArZV08PDI0fHRbMStlXTw8MTZ8dFsyK2VdPDw4fHRbMytlXTtyZXR1cm4gcj4+PjB9LGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbih0LGUscil7dFswK3JdPWU+Pj4yNCx0WzErcl09ZT4+PjE2JjI1NSx0WzIrcl09ZT4+PjgmMjU1LHRbMytyXT0yNTUmZX0sZS5pcD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MCxvPTAsYT02O2E+PTA7YS09Mil7Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClpPDw9MSxpfD1lPj4+ZithJjE7Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClpPDw9MSxpfD10Pj4+ZithJjF9Zm9yKHZhciBhPTY7YT49MDthLT0yKXtmb3IodmFyIGY9MTtmPD0yNTtmKz04KW88PD0xLG98PWU+Pj5mK2EmMTtmb3IodmFyIGY9MTtmPD0yNTtmKz04KW88PD0xLG98PXQ+Pj5mK2EmMX1yW24rMF09aT4+PjAscltuKzFdPW8+Pj4wfSxlLnJpcD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MCxvPTAsYT0wO2E8NDthKyspZm9yKHZhciBmPTI0O2Y+PTA7Zi09OClpPDw9MSxpfD1lPj4+ZithJjEsaTw8PTEsaXw9dD4+PmYrYSYxO2Zvcih2YXIgYT00O2E8ODthKyspZm9yKHZhciBmPTI0O2Y+PTA7Zi09OClvPDw9MSxvfD1lPj4+ZithJjEsbzw8PTEsb3w9dD4+PmYrYSYxO3JbbiswXT1pPj4+MCxyW24rMV09bz4+PjB9LGUucGMxPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLG89MCxhPTc7YT49NTthLS0pe1xuZm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClpPDw9MSxpfD1lPj5mK2EmMTtmb3IodmFyIGY9MDtmPD0yNDtmKz04KWk8PD0xLGl8PXQ+PmYrYSYxfWZvcih2YXIgZj0wO2Y8PTI0O2YrPTgpaTw8PTEsaXw9ZT4+ZithJjE7Zm9yKHZhciBhPTE7YTw9MzthKyspe2Zvcih2YXIgZj0wO2Y8PTI0O2YrPTgpbzw8PTEsb3w9ZT4+ZithJjE7Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClvPDw9MSxvfD10Pj5mK2EmMX1mb3IodmFyIGY9MDtmPD0yNDtmKz04KW88PD0xLG98PXQ+PmYrYSYxO3JbbiswXT1pPj4+MCxyW24rMV09bz4+PjB9LGUucjI4c2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8PGUmMjY4NDM1NDU1fHQ+Pj4yOC1lfTt2YXIgcj1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtlLnBjMj1mdW5jdGlvbih0LGUsbixpKXtmb3IodmFyIG89MCxhPTAsZj1yLmxlbmd0aD4+PjEscz0wO3M8ZjtzKyspbzw8PTEsb3w9dD4+PnJbc10mMTtmb3IodmFyIHM9ZjtzPHIubGVuZ3RoO3MrKylhPDw9MSxhfD1lPj4+cltzXSYxO25baSswXT1vPj4+MCxuW2krMV09YT4+PjB9LGUuZXhwYW5kPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0wLGk9MDtuPSgxJnQpPDw1fHQ+Pj4yNztmb3IodmFyIG89MjM7bz49MTU7by09NCluPDw9NixufD10Pj4+byY2Mztmb3IodmFyIG89MTE7bz49MztvLT00KWl8PXQ+Pj5vJjYzLGk8PD02O2l8PSgzMSZ0KTw8MXx0Pj4+MzEsZVtyKzBdPW4+Pj4wLGVbcisxXT1pPj4+MH07dmFyIG49WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07ZS5zdWJzdGl0dXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsaT0wO2k8NDtpKyspe3ZhciBvPXQ+Pj4xOC02KmkmNjMsYT1uWzY0Kmkrb107cjw8PTQscnw9YX1mb3IodmFyIGk9MDtpPDQ7aSsrKXt2YXIgbz1lPj4+MTgtNippJjYzLGE9blsyNTYrNjQqaStvXTtyPDw9NCxyfD1hfXJldHVybiByPj4+MH07dmFyIGk9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO2UucGVybXV0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjxpLmxlbmd0aDtyKyspZTw8PTEsZXw9dD4+Pmlbcl0mMTtyZXR1cm4gZT4+PjB9LGUucGFkU3BsaXQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10LnRvU3RyaW5nKDIpO24ubGVuZ3RoPGU7KW49XCIwXCIrbjtmb3IodmFyIGk9W10sbz0wO288ZTtvKz1yKWkucHVzaChuLnNsaWNlKG8sbytyKSk7cmV0dXJuIGkuam9pbihcIiBcIil9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7Yy5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBlPWxbdF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBtZXNzYWdlIGRpZ2VzdFwiKTt0aGlzLl9oYXNoVHlwZT1lLmhhc2gsdGhpcy5faGFzaD1zKGUuaGFzaCksdGhpcy5fdGFnPWUuaWQsdGhpcy5fc2lnblR5cGU9ZS5zaWdufWZ1bmN0aW9uIGkodCl7Yy5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBlPWxbdF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBtZXNzYWdlIGRpZ2VzdFwiKTt0aGlzLl9oYXNoPXMoZS5oYXNoKSx0aGlzLl90YWc9ZS5pZCx0aGlzLl9zaWduVHlwZT1lLnNpZ259ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbmV3IG4odCl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IGkodCl9dmFyIGY9cigyMTEpLHM9cig1OSksdT1yKDIpLGg9cig1NDIpLGM9cigzMSksZD1yKDU0MyksbD17fTtPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09bFt0LnRvTG93ZXJDYXNlKCldPWZbdF19KSx1KG4sYy5Xcml0YWJsZSksbi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9oYXNoLnVwZGF0ZSh0KSxyKCl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LHIpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKSx0aGlzLl9oYXNoLnVwZGF0ZSh0KSx0aGlzfSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQscil7dGhpcy5lbmQoKTt2YXIgbj10aGlzLl9oYXNoLmRpZ2VzdCgpLGk9aChlLmNvbmNhdChbdGhpcy5fdGFnLG5dKSx0LHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlKTtyZXR1cm4gcj9pLnRvU3RyaW5nKHIpOml9LHUoaSxjLldyaXRhYmxlKSxpLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2hhc2gudXBkYXRlKHQpLHIoKX0saS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscil7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQscikpLHRoaXMuX2hhc2gudXBkYXRlKHQpLHRoaXN9LGkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LHIsbil7XCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyBlKHIsbikpLHRoaXMuZW5kKCk7dmFyIGk9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gZChyLGUuY29uY2F0KFt0aGlzLl90YWcsaV0pLHQsdGhpcy5fc2lnblR5cGUpfSx0LmV4cG9ydHM9e1NpZ246byxWZXJpZnk6YSxjcmVhdGVTaWduOm8sY3JlYXRlVmVyaWZ5OmF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3ZhciBlPW8odCkscj1lLnRvUmVkKGEubW9udCh0Lm1vZHVsdXMpKS5yZWRQb3cobmV3IGEodC5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKTtyZXR1cm57YmxpbmRlcjpyLHVuYmxpbmRlcjplLmludm0odC5tb2R1bHVzKX19ZnVuY3Rpb24gaSh0LHIpe3ZhciBpPW4ociksbz1yLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGY9KGEubW9udChyLm1vZHVsdXMpLG5ldyBhKHQpLm11bChpLmJsaW5kZXIpLnVtb2Qoci5tb2R1bHVzKSkscz1mLnRvUmVkKGEubW9udChyLnByaW1lMSkpLHU9Zi50b1JlZChhLm1vbnQoci5wcmltZTIpKSxoPXIuY29lZmZpY2llbnQsYz1yLnByaW1lMSxkPXIucHJpbWUyLGw9cy5yZWRQb3coci5leHBvbmVudDEpLHA9dS5yZWRQb3coci5leHBvbmVudDIpO2w9bC5mcm9tUmVkKCkscD1wLmZyb21SZWQoKTt2YXIgYj1sLmlzdWIocCkuaW11bChoKS51bW9kKGMpO3JldHVybiBiLmltdWwoZCkscC5pYWRkKGIpLG5ldyBlKHAuaW11bChpLnVuYmxpbmRlcikudW1vZChyLm1vZHVsdXMpLnRvQXJyYXkoITEsbykpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXQubW9kdWx1cy5ieXRlTGVuZ3RoKCkscj1uZXcgYShmKGUpKTtyLmNtcCh0Lm1vZHVsdXMpPj0wfHwhci51bW9kKHQucHJpbWUxKXx8IXIudW1vZCh0LnByaW1lMik7KXI9bmV3IGEoZihlKSk7cmV0dXJuIHJ9dmFyIGE9cigxOCksZj1yKDYxKTt0LmV4cG9ydHM9aSxpLmdldHI9b30pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5wPW5ldyBvKGUucCwxNiksdGhpcy5yZWQ9ZS5wcmltZT9vLnJlZChlLnByaW1lKTpvLm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IG8oMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBvKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgbygyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPWUubiYmbmV3IG8oZS5uLDE2KSx0aGlzLmc9ZS5nJiZ0aGlzLnBvaW50RnJvbUpTT04oZS5nLGUuZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KTt2YXIgcj10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshcnx8ci5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBpKHQsZSl7dGhpcy5jdXJ2ZT10LHRoaXMudHlwZT1lLHRoaXMucHJlY29tcHV0ZWQ9bnVsbH12YXIgbz1yKDE4KSxhPXIoMTkpLGY9YS51dGlscyxzPWYuZ2V0TkFGLHU9Zi5nZXRKU0YsaD1mLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LG4ucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5jdGlvbih0LGUpe2godC5wcmVjb21wdXRlZCk7dmFyIHI9dC5fZ2V0RG91YmxlcygpLG49cyhlLDEpLGk9KDE8PHIuc3RlcCsxKS0oci5zdGVwJTI9PT0wPzI6MSk7aS89Mztmb3IodmFyIG89W10sYT0wO2E8bi5sZW5ndGg7YSs9ci5zdGVwKXtmb3IodmFyIGY9MCxlPWErci5zdGVwLTE7ZT49YTtlLS0pZj0oZjw8MSkrbltlXTtvLnB1c2goZil9Zm9yKHZhciB1PXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxjPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxkPWk7ZD4wO2QtLSl7Zm9yKHZhciBhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBmPW9bYV07Zj09PWQ/Yz1jLm1peGVkQWRkKHIucG9pbnRzW2FdKTpmPT09LWQmJihjPWMubWl4ZWRBZGQoci5wb2ludHNbYV0ubmVnKCkpKX11PXUuYWRkKGMpfXJldHVybiB1LnRvUCgpfSxuLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbih0LGUpe3ZhciByPTQsbj10Ll9nZXROQUZQb2ludHMocik7cj1uLnduZDtmb3IodmFyIGk9bi5wb2ludHMsbz1zKGUsciksYT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksZj1vLmxlbmd0aC0xO2Y+PTA7Zi0tKXtmb3IodmFyIGU9MDtmPj0wJiYwPT09b1tmXTtmLS0pZSsrO2lmKGY+PTAmJmUrKyxhPWEuZGJscChlKSxmPDApYnJlYWs7dmFyIHU9b1tmXTtoKDAhPT11KSxhPVwiYWZmaW5lXCI9PT10LnR5cGU/dT4wP2EubWl4ZWRBZGQoaVt1LTE+PjFdKTphLm1peGVkQWRkKGlbLXUtMT4+MV0ubmVnKCkpOnU+MD9hLmFkZChpW3UtMT4+MV0pOmEuYWRkKGlbLXUtMT4+MV0ubmVnKCkpfXJldHVyblwiYWZmaW5lXCI9PT10LnR5cGU/YS50b1AoKTphfSxuLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgbz10aGlzLl93bmFmVDEsYT10aGlzLl93bmFmVDIsZj10aGlzLl93bmFmVDMsaD0wLGM9MDtjPG47YysrKXt2YXIgZD1lW2NdLGw9ZC5fZ2V0TkFGUG9pbnRzKHQpO29bY109bC53bmQsYVtjXT1sLnBvaW50c31mb3IodmFyIGM9bi0xO2M+PTE7Yy09Mil7dmFyIHA9Yy0xLGI9YztpZigxPT09b1twXSYmMT09PW9bYl0pe3ZhciB2PVtlW3BdLG51bGwsbnVsbCxlW2JdXTswPT09ZVtwXS55LmNtcChlW2JdLnkpPyh2WzFdPWVbcF0uYWRkKGVbYl0pLHZbMl09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdLm5lZygpKSk6MD09PWVbcF0ueS5jbXAoZVtiXS55LnJlZE5lZygpKT8odlsxXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0pLHZbMl09ZVtwXS5hZGQoZVtiXS5uZWcoKSkpOih2WzFdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXSksdlsyXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0ubmVnKCkpKTt2YXIgeT1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSxtPXUocltwXSxyW2JdKTtoPU1hdGgubWF4KG1bMF0ubGVuZ3RoLGgpLGZbcF09bmV3IEFycmF5KGgpLGZbYl09bmV3IEFycmF5KGgpO2Zvcih2YXIgZz0wO2c8aDtnKyspe3ZhciB3PTB8bVswXVtnXSxfPTB8bVsxXVtnXTtmW3BdW2ddPXlbMyoodysxKSsoXysxKV0sZltiXVtnXT0wLGFbcF09dn19ZWxzZSBmW3BdPXMocltwXSxvW3BdKSxmW2JdPXMocltiXSxvW2JdKSxoPU1hdGgubWF4KGZbcF0ubGVuZ3RoLGgpLGg9TWF0aC5tYXgoZltiXS5sZW5ndGgsaCl9Zm9yKHZhciBNPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxTPXRoaXMuX3duYWZUNCxjPWg7Yz49MDtjLS0pe2Zvcih2YXIgRT0wO2M+PTA7KXtmb3IodmFyIEE9ITAsZz0wO2c8bjtnKyspU1tnXT0wfGZbZ11bY10sMCE9PVNbZ10mJihBPSExKTtpZighQSlicmVhaztFKyssYy0tfWlmKGM+PTAmJkUrKyxNPU0uZGJscChFKSxjPDApYnJlYWs7Zm9yKHZhciBnPTA7ZzxuO2crKyl7dmFyIGQsaz1TW2ddOzAhPT1rJiYoaz4wP2Q9YVtnXVtrLTE+PjFdOms8MCYmKGQ9YVtnXVstay0xPj4xXS5uZWcoKSksTT1cImFmZmluZVwiPT09ZC50eXBlP00ubWl4ZWRBZGQoZCk6TS5hZGQoZCkpfX1mb3IodmFyIGM9MDtjPG47YysrKWFbY109bnVsbDtyZXR1cm4gaT9NOk0udG9QKCl9LG4uQmFzZVBvaW50PWksaS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LGkucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHQsZSl7dD1mLnRvQXJyYXkodCxlKTt2YXIgcj10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09dFswXXx8Nj09PXRbMF18fDc9PT10WzBdKSYmdC5sZW5ndGgtMT09PTIqcil7Nj09PXRbMF0/aCh0W3QubGVuZ3RoLTFdJTI9PT0wKTo3PT09dFswXSYmaCh0W3QubGVuZ3RoLTFdJTI9PT0xKTt2YXIgbj10aGlzLnBvaW50KHQuc2xpY2UoMSwxK3IpLHQuc2xpY2UoMStyLDErMipyKSk7cmV0dXJuIG59aWYoKDI9PT10WzBdfHwzPT09dFswXSkmJnQubGVuZ3RoLTE9PT1yKXJldHVybiB0aGlzLnBvaW50RnJvbVgodC5zbGljZSgxLDErciksMz09PXRbMF0pO3Rocm93IG5ldyBFcnJvcihcIlVua25vd24gcG9pbnQgZm9ybWF0XCIpfSxpLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVuY29kZSh0LCEwKX0saS5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLHI9dGhpcy5nZXRYKCkudG9BcnJheShcImJlXCIsZSk7cmV0dXJuIHQ/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KHIpOls0XS5jb25jYXQocix0aGlzLmdldFkoKS50b0FycmF5KFwiYmVcIixlKSl9LGkucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiBmLmVuY29kZSh0aGlzLl9lbmNvZGUoZSksdCl9LGkucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24odCl7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgZT17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIGUubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxlLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LHQpLGUuYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1lLHRoaXN9LGkucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBlPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIWUmJmUucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKCh0LmJpdExlbmd0aCgpKzEpL2Uuc3RlcCl9LGkucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciByPVt0aGlzXSxuPXRoaXMsaT0wO2k8ZTtpKz10KXtmb3IodmFyIG89MDtvPHQ7bysrKW49bi5kYmwoKTtyLnB1c2gobil9cmV0dXJue3N0ZXA6dCxwb2ludHM6cn19LGkucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24odCl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgZT1bdGhpc10scj0oMTw8dCktMSxuPTE9PT1yP251bGw6dGhpcy5kYmwoKSxpPTE7aTxyO2krKyllW2ldPWVbaS0xXS5hZGQobik7cmV0dXJue3duZDp0LHBvaW50czplfX0saS5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPTA7cjx0O3IrKyllPWUuZGJsKCk7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt0aGlzLnR3aXN0ZWQ9MSE9PSgwfHQuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJigwfHQuYSk9PT0tMSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsdS5jYWxsKHRoaXMsXCJlZHdhcmRzXCIsdCksdGhpcy5hPW5ldyBmKHQuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IGYodC5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBmKHQuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLGgoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PT0oMHx0LmMpfWZ1bmN0aW9uIGkodCxlLHIsbixpKXt1LkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcInByb2plY3RpdmVcIiksbnVsbD09PWUmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBmKGUsMTYpLHRoaXMueT1uZXcgZihyLDE2KSx0aGlzLno9bj9uZXcgZihuLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9aSYmbmV3IGYoaSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9dmFyIG89cig5OSksYT1yKDE5KSxmPXIoMTgpLHM9cigyKSx1PW8uYmFzZSxoPWEudXRpbHMuYXNzZXJ0O3Mobix1KSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tT25lQT90LnJlZE5lZygpOnRoaXMuYS5yZWRNdWwodCl9LG4ucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9uZUM/dDp0aGlzLmMucmVkTXVsKHQpfSxuLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMucG9pbnQodCxlLHIsbil9LG4ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24odCxlKXt0PW5ldyBmKHQsMTYpLHQucmVkfHwodD10LnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9dC5yZWRTcXIoKSxuPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwocikpLGk9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKHIpKSxvPW4ucmVkTXVsKGkucmVkSW52bSgpKSxhPW8ucmVkU3FydCgpO2lmKDAhPT1hLnJlZFNxcigpLnJlZFN1YihvKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3ZhciBzPWEuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKGUmJiFzfHwhZSYmcykmJihhPWEucmVkTmVnKCkpLHRoaXMucG9pbnQodCxhKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tWT1mdW5jdGlvbih0LGUpe3Q9bmV3IGYodCwxNiksdC5yZWR8fCh0PXQudG9SZWQodGhpcy5yZWQpKTt2YXIgcj10LnJlZFNxcigpLG49ci5yZWRTdWIodGhpcy5vbmUpLGk9ci5yZWRNdWwodGhpcy5kKS5yZWRBZGQodGhpcy5vbmUpLG89bi5yZWRNdWwoaS5yZWRJbnZtKCkpO2lmKDA9PT1vLmNtcCh0aGlzLnplcm8pKXtpZihlKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHQpfXZhciBhPW8ucmVkU3FydCgpO2lmKDAhPT1hLnJlZFNxcigpLnJlZFN1YihvKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3JldHVybiBhLmlzT2RkKCkhPT1lJiYoYT1hLnJlZE5lZygpKSx0aGlzLnBvaW50KGEsdCl9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe2lmKHQuaXNJbmZpbml0eSgpKXJldHVybiEwO3Qubm9ybWFsaXplKCk7dmFyIGU9dC54LnJlZFNxcigpLHI9dC55LnJlZFNxcigpLG49ZS5yZWRNdWwodGhpcy5hKS5yZWRBZGQociksaT10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChlKS5yZWRNdWwocikpKTtyZXR1cm4gMD09PW4uY21wKGkpfSxzKGksdS5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIGkuZnJvbUpTT04odGhpcyx0KX0sbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG5ldyBpKHRoaXMsdCxlLHIsbil9LGkuZnJvbUpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodCxlWzBdLGVbMV0sZVsyXSl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYwPT09dGhpcy55LmNtcCh0aGlzLnopfSxpLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54LnJlZFNxcigpLGU9dGhpcy55LnJlZFNxcigpLHI9dGhpcy56LnJlZFNxcigpO3I9ci5yZWRJQWRkKHIpO3ZhciBuPXRoaXMuY3VydmUuX211bEEodCksaT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1Yih0KS5yZWRJU3ViKGUpLG89bi5yZWRBZGQoZSksYT1vLnJlZFN1YihyKSxmPW4ucmVkU3ViKGUpLHM9aS5yZWRNdWwoYSksdT1vLnJlZE11bChmKSxoPWkucmVkTXVsKGYpLGM9YS5yZWRNdWwobyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocyx1LGMsaCl9LGkucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLGk9dGhpcy54LnJlZFNxcigpLG89dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIGE9dGhpcy5jdXJ2ZS5fbXVsQShpKSxmPWEucmVkQWRkKG8pO2lmKHRoaXMuek9uZSl0PW4ucmVkU3ViKGkpLnJlZFN1YihvKS5yZWRNdWwoZi5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxlPWYucmVkTXVsKGEucmVkU3ViKG8pKSxyPWYucmVkU3FyKCkucmVkU3ViKGYpLnJlZFN1YihmKTtlbHNle3ZhciBzPXRoaXMuei5yZWRTcXIoKSx1PWYucmVkU3ViKHMpLnJlZElTdWIocyk7dD1uLnJlZFN1YihpKS5yZWRJU3ViKG8pLnJlZE11bCh1KSxlPWYucmVkTXVsKGEucmVkU3ViKG8pKSxyPWYucmVkTXVsKHUpfX1lbHNle3ZhciBhPWkucmVkQWRkKG8pLHM9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLmMucmVkTXVsKHRoaXMueikpLnJlZFNxcigpLHU9YS5yZWRTdWIocykucmVkU3ViKHMpO3Q9dGhpcy5jdXJ2ZS5fbXVsQyhuLnJlZElTdWIoYSkpLnJlZE11bCh1KSxlPXRoaXMuY3VydmUuX211bEMoYSkucmVkTXVsKGkucmVkSVN1YihvKSkscj1hLnJlZE11bCh1KX1yZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0LGUscil9LGkucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxpLnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwodC55LnJlZFN1Yih0LngpKSxyPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwodC55LnJlZEFkZCh0LngpKSxuPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKHQudCksaT10aGlzLnoucmVkTXVsKHQuei5yZWRBZGQodC56KSksbz1yLnJlZFN1YihlKSxhPWkucmVkU3ViKG4pLGY9aS5yZWRBZGQobikscz1yLnJlZEFkZChlKSx1PW8ucmVkTXVsKGEpLGg9Zi5yZWRNdWwocyksYz1vLnJlZE11bChzKSxkPWEucmVkTXVsKGYpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHUsaCxkLGMpfSxpLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy56LnJlZE11bCh0LnopLGk9bi5yZWRTcXIoKSxvPXRoaXMueC5yZWRNdWwodC54KSxhPXRoaXMueS5yZWRNdWwodC55KSxmPXRoaXMuY3VydmUuZC5yZWRNdWwobykucmVkTXVsKGEpLHM9aS5yZWRTdWIoZiksdT1pLnJlZEFkZChmKSxoPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwodC54LnJlZEFkZCh0LnkpKS5yZWRJU3ViKG8pLnJlZElTdWIoYSksYz1uLnJlZE11bChzKS5yZWRNdWwoaCk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8oZT1uLnJlZE11bCh1KS5yZWRNdWwoYS5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShvKSkpLHI9cy5yZWRNdWwodSkpOihlPW4ucmVkTXVsKHUpLnJlZE11bChhLnJlZFN1YihvKSkscj10aGlzLmN1cnZlLl9tdWxDKHMpLnJlZE11bCh1KSksdGhpcy5jdXJ2ZS5wb2ludChjLGUscil9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dDp0LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKHQpOnRoaXMuX3Byb2pBZGQodCl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faGFzRG91Ymxlcyh0KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHQpOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx0KX0saS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLGVdLFt0LHJdLDIsITEpfSxpLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLGVdLFt0LHJdLDIsITApfSxpLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodCksdGhpcy55PXRoaXMueS5yZWRNdWwodCksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwodCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30saS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxpLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0saS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8MD09PXRoaXMuZ2V0WCgpLmNtcCh0LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAodC5nZXRZKCkpfSxpLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24odCl7dmFyIGU9dC50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoZSkpcmV0dXJuITA7Zm9yKHZhciByPXQuY2xvbmUoKSxuPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihyLmlhZGQodGhpcy5jdXJ2ZS5uKSxyLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKGUucmVkSUFkZChuKSwwPT09dGhpcy54LmNtcChlKSlyZXR1cm4hMH1yZXR1cm4hMX0saS5wcm90b3R5cGUudG9QPWkucHJvdG90eXBlLm5vcm1hbGl6ZSxpLnByb3RvdHlwZS5taXhlZEFkZD1pLnByb3RvdHlwZS5hZGR9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3MuY2FsbCh0aGlzLFwibW9udFwiLHQpLHRoaXMuYT1uZXcgYSh0LmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IGEodC5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgYSg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBhKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gaSh0LGUscil7cy5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJwcm9qZWN0aXZlXCIpLG51bGw9PT1lJiZudWxsPT09cj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IGEoZSwxNiksdGhpcy56PW5ldyBhKHIsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9dmFyIG89cig5OSksYT1yKDE4KSxmPXIoMikscz1vLmJhc2UsdT1yKDE5KSxoPXUudXRpbHM7ZihuLHMpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9ybWFsaXplKCkueCxyPWUucmVkU3FyKCksbj1yLnJlZE11bChlKS5yZWRBZGQoci5yZWRNdWwodGhpcy5hKSkucmVkQWRkKGUpLGk9bi5yZWRTcXJ0KCk7cmV0dXJuIDA9PT1pLnJlZFNxcigpLmNtcChuKX0sZihpLHMuQmFzZVBvaW50KSxuLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnBvaW50KGgudG9BcnJheSh0LGUpLDEpfSxuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaSh0aGlzLHQsZSl9LG4ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIGkuZnJvbUpTT04odGhpcyx0KX0saS5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30saS5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KFwiYmVcIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0saS5mcm9tSlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaSh0LGVbMF0sZVsxXXx8dC5vbmUpfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIj5cIn0saS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9LGkucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciB0PXRoaXMueC5yZWRBZGQodGhpcy56KSxlPXQucmVkU3FyKCkscj10aGlzLngucmVkU3ViKHRoaXMueiksbj1yLnJlZFNxcigpLGk9ZS5yZWRTdWIobiksbz1lLnJlZE11bChuKSxhPWkucmVkTXVsKG4ucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChpKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KG8sYSl9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0saS5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMueC5yZWRBZGQodGhpcy56KSxuPXRoaXMueC5yZWRTdWIodGhpcy56KSxpPXQueC5yZWRBZGQodC56KSxvPXQueC5yZWRTdWIodC56KSxhPW8ucmVkTXVsKHIpLGY9aS5yZWRNdWwobikscz1lLnoucmVkTXVsKGEucmVkQWRkKGYpLnJlZFNxcigpKSx1PWUueC5yZWRNdWwoYS5yZWRJU3ViKGYpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChzLHUpfSxpLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2xvbmUoKSxyPXRoaXMsbj10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksaT10aGlzLG89W107MCE9PWUuY21wbigwKTtlLml1c2hybigxKSlvLnB1c2goZS5hbmRsbigxKSk7Zm9yKHZhciBhPW8ubGVuZ3RoLTE7YT49MDthLS0pMD09PW9bYV0/KHI9ci5kaWZmQWRkKG4saSksbj1uLmRibCgpKToobj1yLmRpZmZBZGQobixpKSxyPXIuZGJsKCkpO3JldHVybiBufSxpLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmVcIil9LGkucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmVcIil9LGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKHQuZ2V0WCgpKX0saS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxpLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe2guY2FsbCh0aGlzLFwic2hvcnRcIix0KSx0aGlzLmE9bmV3IHModC5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBzKHQuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20odCksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gaSh0LGUscixuKXtoLkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcImFmZmluZVwiKSxudWxsPT09ZSYmbnVsbD09PXI/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBzKGUsMTYpLHRoaXMueT1uZXcgcyhyLDE2KSxuJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIG8odCxlLHIsbil7aC5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJqYWNvYmlhblwiKSxudWxsPT09ZSYmbnVsbD09PXImJm51bGw9PT1uPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgcygwKSk6KHRoaXMueD1uZXcgcyhlLDE2KSx0aGlzLnk9bmV3IHMociwxNiksdGhpcy56PW5ldyBzKG4sMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9dmFyIGE9cig5OSksZj1yKDE5KSxzPXIoMTgpLHU9cigyKSxoPWEuYmFzZSxjPWYudXRpbHMuYXNzZXJ0O3UobixoKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKHQpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBlLHI7aWYodC5iZXRhKWU9bmV3IHModC5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgbj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtlPW5bMF0uY21wKG5bMV0pPDA/blswXTpuWzFdLGU9ZS50b1JlZCh0aGlzLnJlZCl9aWYodC5sYW1iZGEpcj1uZXcgcyh0LmxhbWJkYSwxNik7ZWxzZXt2YXIgaT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChpWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoZSkpP3I9aVswXToocj1pWzFdLGMoMD09PXRoaXMuZy5tdWwocikueC5jbXAodGhpcy5nLngucmVkTXVsKGUpKSkpfXZhciBvO3JldHVybiBvPXQuYmFzaXM/dC5iYXNpcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2E6bmV3IHModC5hLDE2KSxiOm5ldyBzKHQuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKHIpLHtiZXRhOmUsbGFtYmRhOnIsYmFzaXM6b319fSxuLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT10aGlzLnA/dGhpcy5yZWQ6cy5tb250KHQpLHI9bmV3IHMoMikudG9SZWQoZSkucmVkSW52bSgpLG49ci5yZWROZWcoKSxpPW5ldyBzKDMpLnRvUmVkKGUpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwociksbz1uLnJlZEFkZChpKS5mcm9tUmVkKCksYT1uLnJlZFN1YihpKS5mcm9tUmVkKCk7cmV0dXJuW28sYV19LG4ucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLG8sYSxmLHUsaCxjPXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKS8yKSksZD10LGw9dGhpcy5uLmNsb25lKCkscD1uZXcgcygxKSxiPW5ldyBzKDApLHY9bmV3IHMoMCkseT1uZXcgcygxKSxtPTA7MCE9PWQuY21wbigwKTspe3ZhciBnPWwuZGl2KGQpO3U9bC5zdWIoZy5tdWwoZCkpLGg9di5zdWIoZy5tdWwocCkpO3ZhciB3PXkuc3ViKGcubXVsKGIpKTtpZighbiYmdS5jbXAoYyk8MCllPWYubmVnKCkscj1wLG49dS5uZWcoKSxpPWg7ZWxzZSBpZihuJiYyPT09KyttKWJyZWFrO2Y9dSxsPWQsZD11LHY9cCxwPWgseT1iLGI9d31vPXUubmVnKCksYT1oO3ZhciBfPW4uc3FyKCkuYWRkKGkuc3FyKCkpLE09by5zcXIoKS5hZGQoYS5zcXIoKSk7cmV0dXJuIE0uY21wKF8pPj0wJiYobz1lLGE9ciksbi5uZWdhdGl2ZSYmKG49bi5uZWcoKSxpPWkubmVnKCkpLG8ubmVnYXRpdmUmJihvPW8ubmVnKCksYT1hLm5lZygpKSxbe2E6bixiOml9LHthOm8sYjphfV19LG4ucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbmRvLmJhc2lzLHI9ZVswXSxuPWVbMV0saT1uLmIubXVsKHQpLmRpdlJvdW5kKHRoaXMubiksbz1yLmIubmVnKCkubXVsKHQpLmRpdlJvdW5kKHRoaXMubiksYT1pLm11bChyLmEpLGY9by5tdWwobi5hKSxzPWkubXVsKHIuYiksdT1vLm11bChuLmIpLGg9dC5zdWIoYSkuc3ViKGYpLGM9cy5hZGQodSkubmVnKCk7cmV0dXJue2sxOmgsazI6Y319LG4ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24odCxlKXt0PW5ldyBzKHQsMTYpLHQucmVkfHwodD10LnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9dC5yZWRTcXIoKS5yZWRNdWwodCkucmVkSUFkZCh0LnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksbj1yLnJlZFNxcnQoKTtpZigwIT09bi5yZWRTcXIoKS5yZWRTdWIocikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTt2YXIgaT1uLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihlJiYhaXx8IWUmJmkpJiYobj1uLnJlZE5lZygpKSx0aGlzLnBvaW50KHQsbil9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe2lmKHQuaW5mKXJldHVybiEwO3ZhciBlPXQueCxyPXQueSxuPXRoaXMuYS5yZWRNdWwoZSksaT1lLnJlZFNxcigpLnJlZE11bChlKS5yZWRJQWRkKG4pLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PXIucmVkU3FyKCkucmVkSVN1YihpKS5jbXBuKDApfSxuLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10aGlzLl9lbmRvV25hZlQxLGk9dGhpcy5fZW5kb1duYWZUMixvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRoaXMuX2VuZG9TcGxpdChlW29dKSxmPXRbb10scz1mLl9nZXRCZXRhKCk7YS5rMS5uZWdhdGl2ZSYmKGEuazEuaW5lZygpLGY9Zi5uZWcoITApKSxhLmsyLm5lZ2F0aXZlJiYoYS5rMi5pbmVnKCkscz1zLm5lZyghMCkpLG5bMipvXT1mLG5bMipvKzFdPXMsaVsyKm9dPWEuazEsaVsyKm8rMV09YS5rMn1mb3IodmFyIHU9dGhpcy5fd25hZk11bEFkZCgxLG4saSwyKm8sciksaD0wO2g8MipvO2grKyluW2hdPW51bGwsaVtoXT1udWxsO3JldHVybiB1fSx1KGksaC5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IGkodGhpcyx0LGUscil9LG4ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5mcm9tSlNPTih0aGlzLHQsZSl9LGkucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgdD10aGlzLnByZWNvbXB1dGVkO2lmKHQmJnQuYmV0YSlyZXR1cm4gdC5iZXRhO3ZhciBlPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZih0KXt2YXIgcj10aGlzLmN1cnZlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIucG9pbnQodC54LnJlZE11bChyLmVuZG8uYmV0YSksdC55KX07dC5iZXRhPWUsZS5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjp0Lm5hZiYme3duZDp0Lm5hZi53bmQscG9pbnRzOnQubmFmLnBvaW50cy5tYXAobil9LGRvdWJsZXM6dC5kb3VibGVzJiZ7c3RlcDp0LmRvdWJsZXMuc3RlcCxwb2ludHM6dC5kb3VibGVzLnBvaW50cy5tYXAobil9fX1yZXR1cm4gZX19LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LGkuZnJvbUpTT049ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHQucG9pbnQoZVswXSxlWzFdLHIpfVwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1KU09OLnBhcnNlKGUpKTt2YXIgaT10LnBvaW50KGVbMF0sZVsxXSxyKTtpZighZVsyXSlyZXR1cm4gaTt2YXIgbz1lWzJdO3JldHVybiBpLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpvLmRvdWJsZXMmJntzdGVwOm8uZG91Ymxlcy5zdGVwLHBvaW50czpbaV0uY29uY2F0KG8uZG91Ymxlcy5wb2ludHMubWFwKG4pKX0sbmFmOm8ubmFmJiZ7d25kOm8ubmFmLnduZCxwb2ludHM6W2ldLmNvbmNhdChvLm5hZi5wb2ludHMubWFwKG4pKX19LGl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pbmYpcmV0dXJuIHQ7aWYodC5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcSh0KSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKHQpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAodC54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMueS5yZWRTdWIodC55KTswIT09ZS5jbXBuKDApJiYoZT1lLnJlZE11bCh0aGlzLngucmVkU3ViKHQueCkucmVkSW52bSgpKSk7dmFyIHI9ZS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1Yih0LngpLG49ZS5yZWRNdWwodGhpcy54LnJlZFN1YihyKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LGkucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciB0PXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09dC5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIGU9dGhpcy5jdXJ2ZS5hLHI9dGhpcy54LnJlZFNxcigpLG49dC5yZWRJbnZtKCksaT1yLnJlZEFkZChyKS5yZWRJQWRkKHIpLnJlZElBZGQoZSkucmVkTXVsKG4pLG89aS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksYT1pLnJlZE11bCh0aGlzLngucmVkU3ViKG8pKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobyxhKX0saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uZXcgcyh0LDE2KSx0aGlzLl9oYXNEb3VibGVzKHQpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsdCk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbdF0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx0KX0saS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bdGhpcyxlXSxpPVt0LHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIpfSxpLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bdGhpcyxlXSxpPVt0LHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIsITApfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR8fHRoaXMuaW5mPT09dC5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAodC54KSYmMD09PXRoaXMueS5jbXAodC55KSl9LGkucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgZT10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKHQmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciByPXRoaXMucHJlY29tcHV0ZWQsbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZWcoKX07ZS5wcmVjb21wdXRlZD17bmFmOnIubmFmJiZ7d25kOnIubmFmLnduZCxwb2ludHM6ci5uYWYucG9pbnRzLm1hcChuKX0sZG91YmxlczpyLmRvdWJsZXMmJntzdGVwOnIuZG91Ymxlcy5zdGVwLHBvaW50czpyLmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiBlfSxpLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpO3ZhciB0PXRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpO3JldHVybiB0fSx1KG8saC5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBvKHRoaXMsdCxlLHIpfSxvLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciB0PXRoaXMuei5yZWRJbnZtKCksZT10LnJlZFNxcigpLHI9dGhpcy54LnJlZE11bChlKSxuPXRoaXMueS5yZWRNdWwoZSkucmVkTXVsKHQpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LG8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LG8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdDtpZih0LmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgZT10LnoucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj10aGlzLngucmVkTXVsKGUpLGk9dC54LnJlZE11bChyKSxvPXRoaXMueS5yZWRNdWwoZS5yZWRNdWwodC56KSksYT10LnkucmVkTXVsKHIucmVkTXVsKHRoaXMueikpLGY9bi5yZWRTdWIoaSkscz1vLnJlZFN1YihhKTtpZigwPT09Zi5jbXBuKDApKXJldHVybiAwIT09cy5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciB1PWYucmVkU3FyKCksaD11LnJlZE11bChmKSxjPW4ucmVkTXVsKHUpLGQ9cy5yZWRTcXIoKS5yZWRJQWRkKGgpLnJlZElTdWIoYykucmVkSVN1YihjKSxsPXMucmVkTXVsKGMucmVkSVN1YihkKSkucmVkSVN1YihvLnJlZE11bChoKSkscD10aGlzLnoucmVkTXVsKHQueikucmVkTXVsKGYpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChkLGwscCl9LG8ucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0LnRvSigpO2lmKHQuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuei5yZWRTcXIoKSxyPXRoaXMueCxuPXQueC5yZWRNdWwoZSksaT10aGlzLnksbz10LnkucmVkTXVsKGUpLnJlZE11bCh0aGlzLnopLGE9ci5yZWRTdWIobiksZj1pLnJlZFN1YihvKTtpZigwPT09YS5jbXBuKDApKXJldHVybiAwIT09Zi5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBzPWEucmVkU3FyKCksdT1zLnJlZE11bChhKSxoPXIucmVkTXVsKHMpLGM9Zi5yZWRTcXIoKS5yZWRJQWRkKHUpLnJlZElTdWIoaCkucmVkSVN1YihoKSxkPWYucmVkTXVsKGgucmVkSVN1YihjKSkucmVkSVN1YihpLnJlZE11bCh1KSksbD10aGlzLnoucmVkTXVsKGEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChjLGQsbCl9LG8ucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIXQpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe2Zvcih2YXIgZT10aGlzLHI9MDtyPHQ7cisrKWU9ZS5kYmwoKTtyZXR1cm4gZX1mb3IodmFyIG49dGhpcy5jdXJ2ZS5hLGk9dGhpcy5jdXJ2ZS50aW52LG89dGhpcy54LGE9dGhpcy55LGY9dGhpcy56LHM9Zi5yZWRTcXIoKS5yZWRTcXIoKSx1PWEucmVkQWRkKGEpLHI9MDtyPHQ7cisrKXt2YXIgaD1vLnJlZFNxcigpLGM9dS5yZWRTcXIoKSxkPWMucmVkU3FyKCksbD1oLnJlZEFkZChoKS5yZWRJQWRkKGgpLnJlZElBZGQobi5yZWRNdWwocykpLHA9by5yZWRNdWwoYyksYj1sLnJlZFNxcigpLnJlZElTdWIocC5yZWRBZGQocCkpLHY9cC5yZWRJU3ViKGIpLHk9bC5yZWRNdWwodik7eT15LnJlZElBZGQoeSkucmVkSVN1YihkKTt2YXIgbT11LnJlZE11bChmKTtyKzE8dCYmKHM9cy5yZWRNdWwoZCkpLG89YixmPW0sdT15fXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChvLHUucmVkTXVsKGkpLGYpfSxvLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxvLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciB0LGUscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihvKTthPWEucmVkSUFkZChhKTt2YXIgZj1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLHM9Zi5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSksdT1vLnJlZElBZGQobyk7dT11LnJlZElBZGQodSksdT11LnJlZElBZGQodSksdD1zLGU9Zi5yZWRNdWwoYS5yZWRJU3ViKHMpKS5yZWRJU3ViKHUpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGg9dGhpcy54LnJlZFNxcigpLGM9dGhpcy55LnJlZFNxcigpLGQ9Yy5yZWRTcXIoKSxsPXRoaXMueC5yZWRBZGQoYykucmVkU3FyKCkucmVkSVN1YihoKS5yZWRJU3ViKGQpO2w9bC5yZWRJQWRkKGwpO3ZhciBwPWgucmVkQWRkKGgpLnJlZElBZGQoaCksYj1wLnJlZFNxcigpLHY9ZC5yZWRJQWRkKGQpO3Y9di5yZWRJQWRkKHYpLHY9di5yZWRJQWRkKHYpLHQ9Yi5yZWRJU3ViKGwpLnJlZElTdWIobCksZT1wLnJlZE11bChsLnJlZElTdWIodCkpLnJlZElTdWIodikscj10aGlzLnkucmVkTXVsKHRoaXMueikscj1yLnJlZElBZGQocil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHQsZSxyKX0sby5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKG8pO2E9YS5yZWRJQWRkKGEpO3ZhciBmPW4ucmVkQWRkKG4pLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLHM9Zi5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSk7dD1zO3ZhciB1PW8ucmVkSUFkZChvKTt1PXUucmVkSUFkZCh1KSx1PXUucmVkSUFkZCh1KSxlPWYucmVkTXVsKGEucmVkSVN1YihzKSkucmVkSVN1Yih1KSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBoPXRoaXMuei5yZWRTcXIoKSxjPXRoaXMueS5yZWRTcXIoKSxkPXRoaXMueC5yZWRNdWwoYyksbD10aGlzLngucmVkU3ViKGgpLnJlZE11bCh0aGlzLngucmVkQWRkKGgpKTtsPWwucmVkQWRkKGwpLnJlZElBZGQobCk7dmFyIHA9ZC5yZWRJQWRkKGQpO3A9cC5yZWRJQWRkKHApO3ZhciBiPXAucmVkQWRkKHApO3Q9bC5yZWRTcXIoKS5yZWRJU3ViKGIpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoYykucmVkSVN1YihoKTt2YXIgdj1jLnJlZFNxcigpO3Y9di5yZWRJQWRkKHYpLHY9di5yZWRJQWRkKHYpLHY9di5yZWRJQWRkKHYpLGU9bC5yZWRNdWwocC5yZWRJU3ViKHQpKS5yZWRJU3ViKHYpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0LGUscil9LG8ucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnZlLmEsZT10aGlzLngscj10aGlzLnksbj10aGlzLnosaT1uLnJlZFNxcigpLnJlZFNxcigpLG89ZS5yZWRTcXIoKSxhPXIucmVkU3FyKCksZj1vLnJlZEFkZChvKS5yZWRJQWRkKG8pLnJlZElBZGQodC5yZWRNdWwoaSkpLHM9ZS5yZWRBZGQoZSk7cz1zLnJlZElBZGQocyk7dmFyIHU9cy5yZWRNdWwoYSksaD1mLnJlZFNxcigpLnJlZElTdWIodS5yZWRBZGQodSkpLGM9dS5yZWRJU3ViKGgpLGQ9YS5yZWRTcXIoKTtkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKTt2YXIgbD1mLnJlZE11bChjKS5yZWRJU3ViKGQpLHA9ci5yZWRBZGQocikucmVkTXVsKG4pO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChoLGwscCl9LG8ucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIHQ9dGhpcy54LnJlZFNxcigpLGU9dGhpcy55LnJlZFNxcigpLHI9dGhpcy56LnJlZFNxcigpLG49ZS5yZWRTcXIoKSxpPXQucmVkQWRkKHQpLnJlZElBZGQodCksbz1pLnJlZFNxcigpLGE9dGhpcy54LnJlZEFkZChlKS5yZWRTcXIoKS5yZWRJU3ViKHQpLnJlZElTdWIobik7YT1hLnJlZElBZGQoYSksYT1hLnJlZEFkZChhKS5yZWRJQWRkKGEpLGE9YS5yZWRJU3ViKG8pO3ZhciBmPWEucmVkU3FyKCkscz1uLnJlZElBZGQobik7cz1zLnJlZElBZGQocykscz1zLnJlZElBZGQocykscz1zLnJlZElBZGQocyk7dmFyIHU9aS5yZWRJQWRkKGEpLnJlZFNxcigpLnJlZElTdWIobykucmVkSVN1YihmKS5yZWRJU3ViKHMpLGg9ZS5yZWRNdWwodSk7aD1oLnJlZElBZGQoaCksaD1oLnJlZElBZGQoaCk7dmFyIGM9dGhpcy54LnJlZE11bChmKS5yZWRJU3ViKGgpO2M9Yy5yZWRJQWRkKGMpLGM9Yy5yZWRJQWRkKGMpO3ZhciBkPXRoaXMueS5yZWRNdWwodS5yZWRNdWwocy5yZWRJU3ViKHUpKS5yZWRJU3ViKGEucmVkTXVsKGYpKSk7ZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCk7dmFyIGw9dGhpcy56LnJlZEFkZChhKS5yZWRTcXIoKS5yZWRJU3ViKHIpLnJlZElTdWIoZik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGMsZCxsKX0sby5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9bmV3IHModCxlKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe2lmKFwiYWZmaW5lXCI9PT10LnR5cGUpcmV0dXJuIHRoaXMuZXEodC50b0ooKSk7aWYodGhpcz09PXQpcmV0dXJuITA7dmFyIGU9dGhpcy56LnJlZFNxcigpLHI9dC56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKHIpLnJlZElTdWIodC54LnJlZE11bChlKSkuY21wbigwKSlyZXR1cm4hMTt2YXIgbj1lLnJlZE11bCh0aGlzLnopLGk9ci5yZWRNdWwodC56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwoaSkucmVkSVN1Yih0LnkucmVkTXVsKG4pKS5jbXBuKDApfSxvLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy56LnJlZFNxcigpLHI9dC50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKGUpO2lmKDA9PT10aGlzLnguY21wKHIpKXJldHVybiEwO2Zvcih2YXIgbj10LmNsb25lKCksaT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKGUpOzspe2lmKG4uaWFkZCh0aGlzLmN1cnZlLm4pLG4uY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoci5yZWRJQWRkKGkpLDA9PT10aGlzLnguY21wKHIpKXJldHVybiEwfXJldHVybiExfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIEpQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBKUG9pbnQgeDogXCIrdGhpcy54LnRvU3RyaW5nKDE2LDIpK1wiIHk6IFwiK3RoaXMueS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnoudG9TdHJpbmcoMTYsMikrXCI+XCJ9LG8ucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7XCJzaG9ydFwiPT09dC50eXBlP3RoaXMuY3VydmU9bmV3IGYuY3VydmUuc2hvcnQodCk6XCJlZHdhcmRzXCI9PT10LnR5cGU/dGhpcy5jdXJ2ZT1uZXcgZi5jdXJ2ZS5lZHdhcmRzKHQpOnRoaXMuY3VydmU9bmV3IGYuY3VydmUubW9udCh0KSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPXQuaGFzaCxzKHRoaXMuZy52YWxpZGF0ZSgpLFwiSW52YWxpZCBjdXJ2ZVwiKSxzKHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksXCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gT1wiKX1mdW5jdGlvbiBpKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHI9bmV3IG4oZSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnJ9KSxyfX0pfXZhciBvPWUsYT1yKDQ5KSxmPXIoMTkpLHM9Zi51dGlscy5hc3NlcnQ7by5QcmVzZXRDdXJ2ZT1uLGkoXCJwMTkyXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOlwicDE5MlwiLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMVwiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMVwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyXCIsXCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMVwiXX0pLGkoXCJwMjI0XCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOlwicDIyNFwiLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMVwiLGE6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZVwiLGI6XCJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNFwiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZFwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxXCIsXCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNFwiXX0pLGkoXCJwMjU2XCIse1xudHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGJcIixuOlwiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTFcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NlwiLFwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjVcIl19KSxpKFwicDM4NFwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmY1wiLGI6XCJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZlwiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3M1wiLGhhc2g6YS5zaGEzODQsZ1JlZDohMSxnOltcImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3XCIsXCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZlwiXX0pLGkoXCJwNTIxXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwXCIsbjpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5XCIsaGFzaDphLnNoYTUxMixnUmVkOiExLGc6W1wiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjZcIixcIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwXCJdfSksaShcImN1cnZlMjU1MTlcIix7dHlwZTpcIm1vbnRcIixwcmltZTpcInAyNTUxOVwiLHA6XCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIsYTpcIjc2ZDA2XCIsYjpcIjBcIixuOlwiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZFwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjlcIl19KSxpKFwiZWQyNTUxOVwiLHt0eXBlOlwiZWR3YXJkc1wiLHByaW1lOlwicDI1NTE5XCIscDpcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIixhOlwiLTFcIixjOlwiMVwiLGQ6XCI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzXCIsbjpcIjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWRcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhXCIsXCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4XCJdfSk7dmFyIHU7dHJ5e3U9cig1MjApfWNhdGNoKHQpe3U9dm9pZCAwfWkoXCJzZWNwMjU2azFcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJrMjU2XCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIsYTpcIjBcIixiOlwiN1wiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MVwiLGg6XCIxXCIsaGFzaDphLnNoYTI1NixiZXRhOlwiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZVwiLGxhbWJkYTpcIjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzJcIixiYXNpczpbe2E6XCIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNVwiLGI6XCItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzNcIn0se2E6XCIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDhcIixiOlwiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTVcIn1dLGdSZWQ6ITEsZzpbXCI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4XCIsXCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4XCIsdV19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhcInN0cmluZ1wiPT10eXBlb2YgdCYmKGYoby5jdXJ2ZXMuaGFzT3duUHJvcGVydHkodCksXCJVbmtub3duIGN1cnZlIFwiK3QpLHQ9by5jdXJ2ZXNbdF0pLHQgaW5zdGFuY2VvZiBvLmN1cnZlcy5QcmVzZXRDdXJ2ZSYmKHQ9e2N1cnZlOnR9KSx0aGlzLmN1cnZlPXQuY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz10LmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUodC5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHZvaWQodGhpcy5oYXNoPXQuaGFzaHx8dC5jdXJ2ZS5oYXNoKSk6bmV3IG4odCl9dmFyIGk9cigxOCksbz1yKDE5KSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPXIoNTE0KSx1PXIoNTE1KTt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh0aGlzLHQpfSxuLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBzLmZyb21Qcml2YXRlKHRoaXMsdCxlKX0sbi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVybiBzLmZyb21QdWJsaWModGhpcyx0LGUpfSxuLnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKHQpe3R8fCh0PXt9KTtmb3IodmFyIGU9bmV3IG8uaG1hY0RSQkcoe2hhc2g6dGhpcy5oYXNoLHBlcnM6dC5wZXJzLGVudHJvcHk6dC5lbnRyb3B5fHxvLnJhbmQodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLHI9dGhpcy5uLmJ5dGVMZW5ndGgoKSxuPXRoaXMubi5zdWIobmV3IGkoMikpOzspe3ZhciBhPW5ldyBpKGUuZ2VuZXJhdGUocikpO2lmKCEoYS5jbXAobik+MCkpcmV0dXJuIGEuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShhKX19LG4ucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbih0LGUpe3ZhciByPTgqdC5ieXRlTGVuZ3RoKCktdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiByPjAmJih0PXQudXNocm4ocikpLCFlJiZ0LmNtcCh0aGlzLm4pPj0wP3Quc3ViKHRoaXMubik6dH0sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LGUscixuKXtcIm9iamVjdFwiPT10eXBlb2YgciYmKG49cixyPW51bGwpLG58fChuPXt9KSxlPXRoaXMua2V5RnJvbVByaXZhdGUoZSxyKSx0PXRoaXMuX3RydW5jYXRlVG9OKG5ldyBpKHQsMTYpKTtmb3IodmFyIGE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxmPWUuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoXCJiZVwiLGEpLHM9dC50b0FycmF5KFwiYmVcIixhKSxoPW5ldyBvLmhtYWNEUkJHKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5OmYsbm9uY2U6cyxwZXJzOm4ucGVycyxwZXJzRW5jOm4ucGVyc0VuY30pLGM9dGhpcy5uLnN1YihuZXcgaSgxKSksZD0wOyEwO2QrKyl7dmFyIGw9bi5rP24uayhkKTpuZXcgaShoLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZihsPXRoaXMuX3RydW5jYXRlVG9OKGwsITApLCEobC5jbXBuKDEpPD0wfHxsLmNtcChjKT49MCkpe3ZhciBwPXRoaXMuZy5tdWwobCk7aWYoIXAuaXNJbmZpbml0eSgpKXt2YXIgYj1wLmdldFgoKSx2PWIudW1vZCh0aGlzLm4pO2lmKDAhPT12LmNtcG4oMCkpe3ZhciB5PWwuaW52bSh0aGlzLm4pLm11bCh2Lm11bChlLmdldFByaXZhdGUoKSkuaWFkZCh0KSk7aWYoeT15LnVtb2QodGhpcy5uKSwwIT09eS5jbXBuKDApKXt2YXIgbT0ocC5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09Yi5jbXAodik/MjowKTtyZXR1cm4gbi5jYW5vbmljYWwmJnkuY21wKHRoaXMubmgpPjAmJih5PXRoaXMubi5zdWIoeSksbV49MSksbmV3IHUoe3I6dixzOnkscmVjb3ZlcnlQYXJhbTptfSl9fX19fX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSxyLG4pe3Q9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGkodCwxNikpLHI9dGhpcy5rZXlGcm9tUHVibGljKHIsbiksZT1uZXcgdShlLFwiaGV4XCIpO3ZhciBvPWUucixhPWUucztpZihvLmNtcG4oMSk8MHx8by5jbXAodGhpcy5uKT49MClyZXR1cm4hMTtpZihhLmNtcG4oMSk8MHx8YS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgZj1hLmludm0odGhpcy5uKSxzPWYubXVsKHQpLnVtb2QodGhpcy5uKSxoPWYubXVsKG8pLnVtb2QodGhpcy5uKTtpZighdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrKXt2YXIgYz10aGlzLmcubXVsQWRkKHMsci5nZXRQdWJsaWMoKSxoKTtyZXR1cm4hYy5pc0luZmluaXR5KCkmJjA9PT1jLmdldFgoKS51bW9kKHRoaXMubikuY21wKG8pfXZhciBjPXRoaXMuZy5qbXVsQWRkKHMsci5nZXRQdWJsaWMoKSxoKTtyZXR1cm4hYy5pc0luZmluaXR5KCkmJmMuZXFYVG9QKG8pfSxuLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKHQsZSxyLG4pe2YoKDMmcik9PT1yLFwiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0c1wiKSxlPW5ldyB1KGUsbik7dmFyIG89dGhpcy5uLGE9bmV3IGkodCkscz1lLnIsaD1lLnMsYz0xJnIsZD1yPj4xO2lmKHMuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZkKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZVwiKTtzPWQ/dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHMuYWRkKHRoaXMuY3VydmUubiksYyk6dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHMsYyk7dmFyIGw9ZS5yLmludm0obykscD1vLnN1YihhKS5tdWwobCkudW1vZChvKSxiPWgubXVsKGwpLnVtb2Qobyk7cmV0dXJuIHRoaXMuZy5tdWxBZGQocCxzLGIpfSxuLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGU9bmV3IHUoZSxuKSxudWxsIT09ZS5yZWNvdmVyeVBhcmFtKXJldHVybiBlLnJlY292ZXJ5UGFyYW07Zm9yKHZhciBpPTA7aTw0O2krKyl7dmFyIG87dHJ5e289dGhpcy5yZWNvdmVyUHViS2V5KHQsZSxpKX1jYXRjaCh0KXtjb250aW51ZX1pZihvLmVxKHIpKXJldHVybiBpfXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvclwiKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5lYz10LHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsZS5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKGUucHJpdixlLnByaXZFbmMpLGUucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoZS5wdWIsZS5wdWJFbmMpfXZhciBpPXIoMTgpO3QuZXhwb3J0cz1uLG4uZnJvbVB1YmxpYz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7cHViOmUscHViRW5jOnJ9KX0sbi5mcm9tUHJpdmF0ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7cHJpdjplLHByaXZFbmM6cn0pfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIHQuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOlwiSW52YWxpZCBwdWJsaWMga2V5XCJ9OnQudmFsaWRhdGUoKT90Lm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjpcIlB1YmxpYyBrZXkgKiBOICE9IE9cIn06e3Jlc3VsdDohMSxyZWFzb246XCJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50XCJ9fSxuLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKGU9dCx0PW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxlP3RoaXMucHViLmVuY29kZShlLHQpOnRoaXMucHVifSxuLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LG4ucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5wcml2PW5ldyBpKHQsZXx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxuLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueHx8dC55P3ZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludCh0LngsdC55KSk6dm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KHQsZSkpfSxuLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5lYy5zaWduKHQsdGhpcyxlLHIpfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkodCxlLHRoaXMpfSxuLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuXCI8S2V5IHByaXY6IFwiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrXCIgcHViOiBcIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrXCIgPlwifX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG4/dDp2b2lkKHRoaXMuX2ltcG9ydERFUih0LGUpfHwoYyh0LnImJnQucyxcIlNpZ25hdHVyZSB3aXRob3V0IHIgb3Igc1wiKSx0aGlzLnI9bmV3IHModC5yLDE2KSx0aGlzLnM9bmV3IHModC5zLDE2KSx2b2lkIDA9PT10LnJlY292ZXJ5UGFyYW0/dGhpcy5yZWNvdmVyeVBhcmFtPW51bGw6dGhpcy5yZWNvdmVyeVBhcmFtPXQucmVjb3ZlcnlQYXJhbSkpfWZ1bmN0aW9uIGkoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXRbZS5wbGFjZSsrXTtpZighKDEyOCZyKSlyZXR1cm4gcjtmb3IodmFyIG49MTUmcixpPTAsbz0wLGE9ZS5wbGFjZTtvPG47bysrLGErKylpPDw9OCxpfD10W2FdO3JldHVybiBlLnBsYWNlPWEsaX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgtMTshdFtlXSYmISgxMjgmdFtlKzFdKSYmZTxyOyllKys7cmV0dXJuIDA9PT1lP3Q6dC5zbGljZShlKX1mdW5jdGlvbiBmKHQsZSl7aWYoZTwxMjgpcmV0dXJuIHZvaWQgdC5wdXNoKGUpO3ZhciByPTErKE1hdGgubG9nKGUpL01hdGguTE4yPj4+Myk7Zm9yKHQucHVzaCgxMjh8cik7LS1yOyl0LnB1c2goZT4+PihyPDwzKSYyNTUpO3QucHVzaChlKX12YXIgcz1yKDE4KSx1PXIoMTkpLGg9dS51dGlscyxjPWguYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24odCxlKXt0PWgudG9BcnJheSh0LGUpO3ZhciByPW5ldyBpO2lmKDQ4IT09dFtyLnBsYWNlKytdKXJldHVybiExO3ZhciBuPW8odCxyKTtpZihuK3IucGxhY2UhPT10Lmxlbmd0aClyZXR1cm4hMTtpZigyIT09dFtyLnBsYWNlKytdKXJldHVybiExO3ZhciBhPW8odCxyKSxmPXQuc2xpY2Uoci5wbGFjZSxhK3IucGxhY2UpO2lmKHIucGxhY2UrPWEsMiE9PXRbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgdT1vKHQscik7aWYodC5sZW5ndGghPT11K3IucGxhY2UpcmV0dXJuITE7dmFyIGM9dC5zbGljZShyLnBsYWNlLHUrci5wbGFjZSk7cmV0dXJuIDA9PT1mWzBdJiYxMjgmZlsxXSYmKGY9Zi5zbGljZSgxKSksMD09PWNbMF0mJjEyOCZjWzFdJiYoYz1jLnNsaWNlKDEpKSx0aGlzLnI9bmV3IHMoZiksdGhpcy5zPW5ldyBzKGMpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxuLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnIudG9BcnJheSgpLHI9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JmVbMF0mJihlPVswXS5jb25jYXQoZSkpLDEyOCZyWzBdJiYocj1bMF0uY29uY2F0KHIpKSxlPWEoZSkscj1hKHIpOyEoclswXXx8MTI4JnJbMV0pOylyPXIuc2xpY2UoMSk7dmFyIG49WzJdO2YobixlLmxlbmd0aCksbj1uLmNvbmNhdChlKSxuLnB1c2goMiksZihuLHIubGVuZ3RoKTt2YXIgaT1uLmNvbmNhdChyKSxvPVs0OF07cmV0dXJuIGYobyxpLmxlbmd0aCksbz1vLmNvbmNhdChpKSxoLmVuY29kZShvLHQpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7aWYoZihcImVkMjU1MTlcIj09PXQsXCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyXCIpLCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0KTt2YXIgdD1vLmN1cnZlc1t0XS5jdXJ2ZTt0aGlzLmN1cnZlPXQsdGhpcy5nPXQuZyx0aGlzLmcucHJlY29tcHV0ZSh0Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPXQucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbCh0Lm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPWkuc2hhNTEyfXZhciBpPXIoNDkpLG89cigxOSksYT1vLnV0aWxzLGY9YS5hc3NlcnQscz1hLnBhcnNlQnl0ZXMsdT1yKDUxNyksaD1yKDUxOCk7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LGUpe3Q9cyh0KTt2YXIgcj10aGlzLmtleUZyb21TZWNyZXQoZSksbj10aGlzLmhhc2hJbnQoci5tZXNzYWdlUHJlZml4KCksdCksaT10aGlzLmcubXVsKG4pLG89dGhpcy5lbmNvZGVQb2ludChpKSxhPXRoaXMuaGFzaEludChvLHIucHViQnl0ZXMoKSx0KS5tdWwoci5wcml2KCkpLGY9bi5hZGQoYSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6aSxTOmYsUmVuY29kZWQ6b30pfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlLHIpe3Q9cyh0KSxlPXRoaXMubWFrZVNpZ25hdHVyZShlKTt2YXIgbj10aGlzLmtleUZyb21QdWJsaWMociksaT10aGlzLmhhc2hJbnQoZS5SZW5jb2RlZCgpLG4ucHViQnl0ZXMoKSx0KSxvPXRoaXMuZy5tdWwoZS5TKCkpLGE9ZS5SKCkuYWRkKG4ucHViKCkubXVsKGkpKTtyZXR1cm4gYS5lcShvKX0sbi5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmhhc2goKSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnVwZGF0ZShhcmd1bWVudHNbZV0pO3JldHVybiBhLmludEZyb21MRSh0LmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LG4ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24odCl7cmV0dXJuIHUuZnJvbVB1YmxpYyh0aGlzLHQpfSxuLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKHQpe3JldHVybiB1LmZyb21TZWNyZXQodGhpcyx0KX0sbi5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGg/dDpuZXcgaCh0aGlzLHQpfSxuLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbih0KXt2YXIgZT10LmdldFkoKS50b0FycmF5KFwibGVcIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gZVt0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD10LmdldFgoKS5pc09kZCgpPzEyODowLGV9LG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHQpe3Q9YS5wYXJzZUJ5dGVzKHQpO3ZhciBlPXQubGVuZ3RoLTEscj10LnNsaWNlKDAsZSkuY29uY2F0KHRbZV0mLTEyOSksbj0wIT09KDEyOCZ0W2VdKSxpPWEuaW50RnJvbUxFKHIpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoaSxuKX0sbi5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKHQpe3JldHVybiB0LnRvQXJyYXkoXCJsZVwiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxuLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW50RnJvbUxFKHQpfSxuLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVkZHNhPXQsdGhpcy5fc2VjcmV0PWYoZS5zZWNyZXQpLHQuaXNQb2ludChlLnB1Yik/dGhpcy5fcHViPWUucHViOnRoaXMuX3B1YkJ5dGVzPWYoZS5wdWIpfXZhciBpPXIoMTkpLG89aS51dGlscyxhPW8uYXNzZXJ0LGY9by5wYXJzZUJ5dGVzLHM9by5jYWNoZWRQcm9wZXJ0eTtuLmZyb21QdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwdWI6ZX0pfSxuLmZyb21TZWNyZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtzZWNyZXQ6ZX0pfSxuLnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxzKG4sXCJwdWJCeXRlc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxzKG4sXCJwdWJcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLHMobixcInByaXZCeXRlc1wiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGRzYSxlPXRoaXMuaGFzaCgpLHI9dC5lbmNvZGluZ0xlbmd0aC0xLG49ZS5zbGljZSgwLHQuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBuWzBdJj0yNDgsbltyXSY9MTI3LG5bcl18PTY0LG59KSxzKG4sXCJwcml2XCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxzKG4sXCJoYXNoXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSkscyhuLFwibWVzc2FnZVByZWZpeFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzLl9zZWNyZXQsXCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeVwiKSx0aGlzLmVkZHNhLnNpZ24odCx0aGlzKX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KHQsZSx0aGlzKX0sbi5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMuX3NlY3JldCxcIktleVBhaXIgaXMgcHVibGljIG9ubHlcIiksby5lbmNvZGUodGhpcy5zZWNyZXQoKSx0KX0sbi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKHQpe3JldHVybiBvLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksdCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWRkc2E9dCxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9dShlKSksQXJyYXkuaXNBcnJheShlKSYmKGU9e1I6ZS5zbGljZSgwLHQuZW5jb2RpbmdMZW5ndGgpLFM6ZS5zbGljZSh0LmVuY29kaW5nTGVuZ3RoKX0pLGYoZS5SJiZlLlMsXCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFNcIiksdC5pc1BvaW50KGUuUikmJih0aGlzLl9SPWUuUiksZS5TIGluc3RhbmNlb2YgaSYmKHRoaXMuX1M9ZS5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KGUuUik/ZS5SOmUuUmVuY29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJheShlLlMpP2UuUzplLlNlbmNvZGVkfXZhciBpPXIoMTgpLG89cigxOSksYT1vLnV0aWxzLGY9YS5hc3NlcnQscz1hLmNhY2hlZFByb3BlcnR5LHU9YS5wYXJzZUJ5dGVzO3MobixcIlNcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSkscyhuLFwiUlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLHMobixcIlJlbmNvZGVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxzKG4sXCJTZW5jb2RlZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLG4ucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxuLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBhLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSxcImhleFwiKS50b1VwcGVyQ2FzZSgpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQpO3RoaXMuaGFzaD10Lmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhdC5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT10Lm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIGU9YS50b0FycmF5KHQuZW50cm9weSx0LmVudHJvcHlFbmMpLHI9YS50b0FycmF5KHQubm9uY2UsdC5ub25jZUVuYyksaT1hLnRvQXJyYXkodC5wZXJzLHQucGVyc0VuYyk7ZihlLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsXCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6IFwiK3RoaXMubWluRW50cm9weStcIiBiaXRzXCIpLHRoaXMuX2luaXQoZSxyLGkpfXZhciBpPXIoNDkpLG89cigxOSksYT1vLnV0aWxzLGY9YS5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29uY2F0KGUpLmNvbmNhdChyKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBpPTA7aTx0aGlzLlYubGVuZ3RoO2krKyl0aGlzLktbaV09MCx0aGlzLlZbaV09MTt0aGlzLl91cGRhdGUobiksdGhpcy5yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sbi5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7dCYmKGU9ZS51cGRhdGUodCkpLHRoaXMuSz1lLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksdCYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKHQpLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxuLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24odCxlLHIsbil7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihuPXIscj1lLGU9bnVsbCksdD1hLnRvQnVmZmVyKHQsZSkscj1hLnRvQnVmZmVyKHIsbiksZih0Lmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsXCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6IFwiK3RoaXMubWluRW50cm9weStcIiBiaXRzXCIpLHRoaXMuX3VwZGF0ZSh0LmNvbmNhdChyfHxbXSkpLHRoaXMucmVzZWVkPTF9LG4ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRoaXMucmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKFwiUmVzZWVkIGlzIHJlcXVpcmVkXCIpO1wic3RyaW5nXCIhPXR5cGVvZiBlJiYobj1yLHI9ZSxlPW51bGwpLHImJihyPWEudG9BcnJheShyLG4pLHRoaXMuX3VwZGF0ZShyKSk7Zm9yKHZhciBpPVtdO2kubGVuZ3RoPHQ7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksaT1pLmNvbmNhdCh0aGlzLlYpO3ZhciBvPWkuc2xpY2UoMCx0KTtyZXR1cm4gdGhpcy5fdXBkYXRlKHIpLHRoaXMucmVzZWVkKyssYS5lbmNvZGUobyxlKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbXCJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhXCIsXCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxXCJdLFtcIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDhcIixcIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWZcIl0sW1wiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOVwiLFwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NVwiXSxbXCIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwXCIsXCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTlcIl0sW1wiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwY1wiLFwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNlwiXSxbXCI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhXCIsXCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmXCJdLFtcImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmFcIixcIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTlcIl0sW1wiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMFwiLFwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOVwiXSxbXCJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkXCIsXCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkXCJdLFtcImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmRcIixcImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODhcIl0sW1wiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMVwiLFwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZFwiXSxbXCI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwXCIsXCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4XCJdLFtcIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDdcIixcIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmFcIl0sW1wiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MlwiLFwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1M1wiXSxbXCI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTdcIixcIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjBcIl0sW1wiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZFwiLFwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMFwiXSxbXCI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzXCIsXCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2XCJdLFtcIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYVwiLFwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OVwiXSxbXCI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4XCIsXCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3XCJdLFtcImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmRcIixcIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGFcIl0sW1wiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNVwiLFwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZFwiXSxbXCIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0XCIsXCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyXCJdLFtcIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2NcIixcIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTZcIl0sW1wiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNlwiLFwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZlwiXSxbXCI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5XCIsXCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxXCJdLFtcImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTFcIixcIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzNcIl0sW1wiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YlwiLFwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZlwiXSxbXCJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzXCIsXCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3XCJdLFtcImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWRcIixcImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzhcIl0sW1wiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MFwiLFwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMVwiXSxbXCI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0XCIsXCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTBcIl0sW1wiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYVwiLFwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MlwiXSxbXCJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExXCIsXCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjXCJdLFtcIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWVcIixcImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGJcIl0sW1wiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MVwiLFwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MVwiXSxbXCJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmXCIsXCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDVcIl0sW1wiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOFwiLFwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMFwiXSxbXCIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkXCIsXCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0XCJdLFtcIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTZcIixcIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkXCJdLFtcIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2RcIixcImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWRcIl0sW1wiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNVwiLFwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOFwiXSxbXCJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2XCIsXCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4XCJdLFtcIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzFcIixcIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWNcIl0sW1wiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjXCIsXCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmXCJdLFtcIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTFcIixcIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjJcIl0sW1wiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZVwiLFwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwN1wiXSxbXCI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxXCIsXCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjXCJdLFtcImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjNcIixcImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2RcIl0sW1wiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZlwiLFwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNFwiXSxbXCIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5XCIsXCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkXCJdLFtcIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmVcIixcImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDBcIl0sW1wiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOVwiLFwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMVwiXSxbXCJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyXCIsXCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxXCJdLFtcImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTNcIixcIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGNcIl0sW1wiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3Y1wiLFwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3M1wiXSxbXCI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhXCIsXCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkXCJdLFtcImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTFcIixcImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDVcIl0sW1wiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3M1wiLFwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OVwiXSxbXCI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4XCIsXCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlXCJdLFtcIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmJcIixcIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjdcIl0sW1wiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NlwiLFwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxXCJdLFtcIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWFcIixcIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODJcIl0sW1wiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwXCIsXCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1XCJdLFtcImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODdcIixcIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzNcIl0sW1wiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZVwiLFwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MlwiXV19LG5hZjp7d25kOjcscG9pbnRzOltbXCJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5XCIsXCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyXCJdLFtcIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTRcIixcImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDZcIl0sW1wiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliY1wiLFwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYVwiXSxbXCJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlXCIsXCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3XCJdLFtcIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2JcIixcImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWJcIl0sW1wiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOFwiLFwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxXCJdLFtcImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGVcIixcIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNThcIl0sW1wiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNFwiLFwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3N1wiXSxbXCIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjXCIsXCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhXCJdLFtcIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDVcIixcIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGNcIl0sW1wiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZlwiLFwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3XCJdLFtcIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTRcIixcIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDJcIl0sW1wiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOVwiLFwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NVwiXSxbXCJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiXCIsXCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyXCJdLFtcIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjRcIixcImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODJcIl0sW1wiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNVwiLFwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NlwiXSxbXCI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5XCIsXCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDlcIl0sW1wiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZFwiLFwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZlwiXSxbXCI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmXCIsXCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhXCJdLFtcIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmJcIixcImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmN1wiXSxbXCJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5XCIsXCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzXCJdLFtcIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2M1wiLFwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YVwiXSxbXCI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0XCIsXCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2XCJdLFtcImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzBcIixcImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzdcIl0sW1wiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YlwiLFwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZVwiXSxbXCJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3XCIsXCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2XCJdLFtcImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDFcIixcImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzZcIl0sW1wiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMFwiLFwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MFwiXSxbXCI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1XCIsXCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjFcIl0sW1wiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOFwiLFwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzXCJdLFtcImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZThcIixcIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjVcIl0sW1wiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYlwiLFwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YlwiXSxbXCJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmXCIsXCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3XCJdLFtcIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDNcIixcImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjhcIl0sW1wiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYVwiLFwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YVwiXSxbXCJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1XCIsXCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2XCJdLFtcIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWFcIixcIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTZcIl0sW1wiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZVwiLFwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZVwiXSxbXCJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4XCIsXCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkXCJdLFtcIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmNcIixcIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTJcIl0sW1wiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOVwiLFwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZVwiXSxbXCI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiXCIsXCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3XCJdLFtcIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2FcIixcImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTFcIl0sW1wiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZlwiLFwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNFwiXSxbXCIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwXCIsXCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1XCJdLFtcIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDRcIixcImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWRcIl0sW1wiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1Y1wiLFwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZFwiXSxbXCJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwXCIsXCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5XCJdLFtcImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODBcIixcImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNlwiXSxbXCIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzXCIsXCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0XCJdLFtcIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGZcIixcIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZVwiXSxbXCJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzXCIsXCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxXCJdLFtcImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDhcIixcImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2JcIl0sW1wiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZlwiLFwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MVwiXSxbXCI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1XCIsXCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2XCJdLFtcImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDZcIixcIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWVcIl0sW1wiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNVwiLFwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZFwiXSxbXCJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5XCIsXCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjXCJdLFtcIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MVwiLFwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNFwiXSxbXCI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1XCIsXCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjXCJdLFtcImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjVcIixcIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmJcIl0sW1wiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5N1wiLFwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzXCJdLFtcIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODFcIixcIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NFwiXSxbXCI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1XCIsXCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1XCJdLFtcIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjZcIixcImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmNcIl0sW1wiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2XCIsXCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0XCJdLFtcIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGVcIixcIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGVcIl0sW1wiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NFwiLFwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2XCJdLFtcIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzFcIixcIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTFcIl0sW1wiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MVwiLFwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiXCJdLFtcImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTJcIixcImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjJcIl0sW1wiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1XCIsXCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjXCJdLFtcImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2JcIixcIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTNcIl0sW1wiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNFwiLFwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZFwiXSxbXCJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmXCIsXCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwXCJdLFtcImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5XCIsXCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0XCJdLFtcIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDZcIixcImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTZcIl0sW1wiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NFwiLFwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNFwiXSxbXCIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhXCIsXCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3XCJdLFtcImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzBcIixcImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTNcIl0sW1wiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5N1wiLFwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NlwiXSxbXCJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTNcIixcImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzhcIl0sW1wiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZlwiLFwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmXCJdLFtcIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzhcIixcIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDhcIl0sW1wiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YVwiLFwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YVwiXSxbXCJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExXCIsXCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0XCJdLFtcIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDJcIixcIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzdcIl0sW1wiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYVwiLFwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmN1wiXSxbXCJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2XCIsXCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkXCJdLFtcImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODZcIixcIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmFcIl0sW1wiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZVwiLFwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NFwiXSxbXCI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0XCIsXCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3XCJdLFtcImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGFcIixcImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTdcIl0sW1wiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OVwiLFwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMFwiXSxbXCJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmXCIsXCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1XCJdLFtcImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGNcIixcIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2VcIl0sW1wiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MlwiLFwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMVwiXSxbXCJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhXCIsXCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyXCJdLFtcImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODBcIixcIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjNcIl0sW1wiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZFwiLFwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOFwiXSxbXCI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExXCIsXCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4XCJdLFtcIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjNcIixcImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NVwiXSxbXCJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyXCIsXCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkXCJdLFtcIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTNcIixcImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWNcIl0sW1wiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMFwiLFwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwXCJdLFtcIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNThcIixcImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2NcIl0sW1wiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmN1wiLFwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNFwiXSxbXCI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4XCIsXCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmXCJdLFtcIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2VcIixcIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDlcIl0sW1wiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZFwiLFwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2XCJdLFtcIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmJcIixcIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTVcIl0sW1wiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZlwiLFwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4N1wiXSxbXCIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2XCIsXCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiXCJdLFtcImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTdcIixcIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmNcIl0sW1wiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YVwiLFwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3Y1wiXSxbXCJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjXCIsXCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmXCJdLFtcImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTJcIixcIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2FcIl0sW1wiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYlwiLFwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NlwiXSxbXCI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1XCIsXCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmXCJdLFtcIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTdcIixcIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDNcIl0sW1wiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOVwiLFwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOFwiXSxbXCIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzXCIsXCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4XCJdLFtcIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTdcIixcIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3M1wiXSxbXCIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2XCIsXCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzXCJdLFtcIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYThcIixcIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDhcIl0sW1wiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMVwiLFwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMVwiXSxbXCIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwXCIsXCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5XCJdXVxufX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5zbGljZSgpO2lmKCF0KXJldHVybltdO3ZhciByPVtdO2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylyW25dPTB8dFtuXTtyZXR1cm4gcn1pZihlKXtpZihcImhleFwiPT09ZSl7dD10LnJlcGxhY2UoL1teYS16MC05XSsvZ2ksXCJcIiksdC5sZW5ndGglMiE9PTAmJih0PVwiMFwiK3QpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MilyLnB1c2gocGFyc2VJbnQodFtuXSt0W24rMV0sMTYpKX19ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dC5jaGFyQ29kZUF0KG4pLG89aT4+OCxhPTI1NSZpO28/ci5wdXNoKG8sYSk6ci5wdXNoKGEpfXJldHVybiByfWZ1bmN0aW9uIGkodCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9cIjBcIit0OnR9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspZSs9aSh0W3JdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bXSxuPTE8PGUrMSxpPXQuY2xvbmUoKTtpLmNtcG4oMSk+PTA7KXt2YXIgbztpZihpLmlzT2RkKCkpe3ZhciBhPWkuYW5kbG4obi0xKTtvPWE+KG4+PjEpLTE/KG4+PjEpLWE6YSxpLmlzdWJuKG8pfWVsc2Ugbz0wO3IucHVzaChvKTtmb3IodmFyIGY9MCE9PWkuY21wbigwKSYmMD09PWkuYW5kbG4obi0xKT9lKzE6MSxzPTE7czxmO3MrKylyLnB1c2goMCk7aS5pdXNocm4oZil9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0LGUpe3ZhciByPVtbXSxbXV07dD10LmNsb25lKCksZT1lLmNsb25lKCk7Zm9yKHZhciBuPTAsaT0wO3QuY21wbigtbik+MHx8ZS5jbXBuKC1pKT4wOyl7dmFyIG89dC5hbmRsbigzKStuJjMsYT1lLmFuZGxuKDMpK2kmMzszPT09byYmKG89LTEpLDM9PT1hJiYoYT0tMSk7dmFyIGY7aWYoMD09PSgxJm8pKWY9MDtlbHNle3ZhciBzPXQuYW5kbG4oNykrbiY3O2Y9MyE9PXMmJjUhPT1zfHwyIT09YT9vOi1vfXJbMF0ucHVzaChmKTt2YXIgdTtpZigwPT09KDEmYSkpdT0wO2Vsc2V7dmFyIHM9ZS5hbmRsbig3KStpJjc7dT0zIT09cyYmNSE9PXN8fDIhPT1vP2E6LWF9clsxXS5wdXNoKHUpLDIqbj09PWYrMSYmKG49MS1uKSwyKmk9PT11KzEmJihpPTEtaSksdC5pdXNocm4oMSksZS5pdXNocm4oMSl9cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49XCJfXCIrZTt0LnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW25dP3RoaXNbbl06dGhpc1tuXT1yLmNhbGwodGhpcyl9fWZ1bmN0aW9uIHUodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/Yy50b0FycmF5KHQsXCJoZXhcIik6dH1mdW5jdGlvbiBoKHQpe3JldHVybiBuZXcgZCh0LFwiaGV4XCIsXCJsZVwiKX12YXIgYz1lLGQ9cigxOCk7Yy5hc3NlcnQ9ZnVuY3Rpb24odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfSxjLnRvQXJyYXk9bixjLnplcm8yPWksYy50b0hleD1vLGMuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJoZXhcIj09PWU/byh0KTp0fSxjLmdldE5BRj1hLGMuZ2V0SlNGPWYsYy5jYWNoZWRQcm9wZXJ0eT1zLGMucGFyc2VCeXRlcz11LGMuaW50RnJvbUxFPWh9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMucmFuZD10fXZhciBpO2lmKHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXx8KGk9bmV3IG4obnVsbCkpLGkuZ2VuZXJhdGUodCl9LHQuZXhwb3J0cy5SYW5kPW4sbi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhbmQodCl9LFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpd2luZG93LmNyeXB0byYmd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGV9OndpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9uLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlfTpuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZCB5ZXRcIil9O2Vsc2UgdHJ5e3ZhciBvPXIoNjA5KTtuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gby5yYW5kb21CeXRlcyh0KX19Y2F0Y2godCl7bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHQpLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIGV9fX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj1cImJpZ1wiLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9dmFyIGk9cig0OSksbz1pLnV0aWxzLGE9by5hc3NlcnQ7ZS5CbG9ja0hhc2g9bixuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXtpZih0PW8udG9BcnJheSh0LGUpLHRoaXMucGVuZGluZz90aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nLmNvbmNhdCh0KTp0aGlzLnBlbmRpbmc9dCx0aGlzLnBlbmRpbmdUb3RhbCs9dC5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4KXt0PXRoaXMucGVuZGluZzt2YXIgcj10Lmxlbmd0aCV0aGlzLl9kZWx0YTg7dGhpcy5wZW5kaW5nPXQuc2xpY2UodC5sZW5ndGgtcix0Lmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5ndGgmJih0aGlzLnBlbmRpbmc9bnVsbCksdD1vLmpvaW4zMih0LDAsdC5sZW5ndGgtcix0aGlzLmVuZGlhbik7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZSh0LG4sbit0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sbi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSksYShudWxsPT09dGhpcy5wZW5kaW5nKSx0aGlzLl9kaWdlc3QodCl9LG4ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBlbmRpbmdUb3RhbCxlPXRoaXMuX2RlbHRhOCxyPWUtKHQrdGhpcy5wYWRMZW5ndGgpJWUsbj1uZXcgQXJyYXkocit0aGlzLnBhZExlbmd0aCk7blswXT0xMjg7Zm9yKHZhciBpPTE7aTxyO2krKyluW2ldPTA7aWYodDw8PTMsXCJiaWdcIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIG89ODtvPHRoaXMucGFkTGVuZ3RoO28rKyluW2krK109MDtuW2krK109MCxuW2krK109MCxuW2krK109MCxuW2krK109MCxuW2krK109dD4+PjI0JjI1NSxuW2krK109dD4+PjE2JjI1NSxuW2krK109dD4+PjgmMjU1LG5baSsrXT0yNTUmdH1lbHNle25baSsrXT0yNTUmdCxuW2krK109dD4+PjgmMjU1LG5baSsrXT10Pj4+MTYmMjU1LG5baSsrXT10Pj4+MjQmMjU1LG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wO2Zvcih2YXIgbz04O288dGhpcy5wYWRMZW5ndGg7bysrKW5baSsrXT0wfXJldHVybiBufX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odGhpcy5IYXNoPXQsdGhpcy5ibG9ja1NpemU9dC5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9dC5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx2b2lkIHRoaXMuX2luaXQoby50b0FycmF5KGUscikpKTpuZXcgbih0LGUscil9dmFyIGk9cig0OSksbz1pLnV0aWxzLGE9by5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCl7dC5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJih0PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodCkuZGlnZXN0KCkpLGEodC5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIGU9dC5sZW5ndGg7ZTx0aGlzLmJsb2NrU2l6ZTtlKyspdC5wdXNoKDApO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV1ePTU0O3RoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh0KTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHQpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodCxlKSx0aGlzfSxuLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHQpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KGwuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx2b2lkKHRoaXMuZW5kaWFuPVwibGl0dGxlXCIpKTpuZXcgbn1mdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybiB0PD0xNT9lXnJebjp0PD0zMT9lJnJ8fmUmbjp0PD00Nz8oZXx+cilebjp0PD02Mz9lJm58ciZ+bjplXihyfH5uKX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PD0xNT8wOnQ8PTMxPzE1MTg1MDAyNDk6dDw9NDc/MTg1OTc3NTM5Mzp0PD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4Mzh9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdDw9MTU/MTM1MjgyOTkyNjp0PD0zMT8xNTQ4NjAzNjg0OnQ8PTQ3PzE4MzYwNzI2OTE6dDw9NjM/MjA1Mzk5NDIxNzowfXZhciBmPXIoNDkpLHM9Zi51dGlscyx1PXMucm90bDMyLGg9cy5zdW0zMixjPXMuc3VtMzJfMyxkPXMuc3VtMzJfNCxsPWYuY29tbW9uLkJsb2NrSGFzaDtzLmluaGVyaXRzKG4sbCksZS5yaXBlbWQxNjA9bixuLmJsb2NrU2l6ZT01MTIsbi5vdXRTaXplPTE2MCxuLmhtYWNTdHJlbmd0aD0xOTIsbi5wYWRMZW5ndGg9NjQsbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLmhbMF0sbj10aGlzLmhbMV0sZj10aGlzLmhbMl0scz10aGlzLmhbM10sbD10aGlzLmhbNF0sbT1yLGc9bix3PWYsXz1zLE09bCxTPTA7Uzw4MDtTKyspe3ZhciBFPWgodShkKHIsaShTLG4sZixzKSx0W3BbU10rZV0sbyhTKSksdltTXSksbCk7cj1sLGw9cyxzPXUoZiwxMCksZj1uLG49RSxFPWgodShkKG0saSg3OS1TLGcsdyxfKSx0W2JbU10rZV0sYShTKSkseVtTXSksTSksbT1NLE09XyxfPXUodywxMCksdz1nLGc9RX1FPWModGhpcy5oWzFdLGYsXyksdGhpcy5oWzFdPWModGhpcy5oWzJdLHMsTSksdGhpcy5oWzJdPWModGhpcy5oWzNdLGwsbSksdGhpcy5oWzNdPWModGhpcy5oWzRdLHIsZyksdGhpcy5oWzRdPWModGhpcy5oWzBdLG4sdyksdGhpcy5oWzBdPUV9LG4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/cy50b0hleDMyKHRoaXMuaCxcImxpdHRsZVwiKTpzLnNwbGl0MzIodGhpcy5oLFwibGl0dGxlXCIpfTt2YXIgcD1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxiPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLHY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLHk9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oWC5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1ZLHZvaWQodGhpcy5XPW5ldyBBcnJheSg2NCkpKTpuZXcgbn1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpPyhuLmNhbGwodGhpcyksdm9pZCh0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdKSk6bmV3IGl9ZnVuY3Rpb24gbygpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbz8oWC5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPVcsdm9pZCh0aGlzLlc9bmV3IEFycmF5KDE2MCkpKTpuZXcgb31mdW5jdGlvbiBhKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhPyhvLmNhbGwodGhpcyksdm9pZCh0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdKSk6bmV3IGF9ZnVuY3Rpb24gZigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZj8oWC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHZvaWQodGhpcy5XPW5ldyBBcnJheSg4MCkpKTpuZXcgZn1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gdCZlXn50JnJ9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHQmZV50JnJeZSZyfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybiB0XmVecn1mdW5jdGlvbiBjKHQpe3JldHVybiBSKHQsMileUih0LDEzKV5SKHQsMjIpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIFIodCw2KV5SKHQsMTEpXlIodCwyNSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gUih0LDcpXlIodCwxOCledD4+PjN9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gUih0LDE3KV5SKHQsMTkpXnQ+Pj4xMH1mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiAwPT09dD9zKGUscixuKToxPT09dHx8Mz09PXQ/aChlLHIsbik6Mj09PXQ/dShlLHIsbik6dm9pZCAwfWZ1bmN0aW9uIHYodCxlLHIsbixpLG8pe3ZhciBhPXQmcl5+dCZpO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIHkodCxlLHIsbixpLG8pe3ZhciBhPWUmbl5+ZSZvO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIG0odCxlLHIsbixpLG8pe3ZhciBhPXQmcl50JmleciZpO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIGcodCxlLHIsbixpLG8pe3ZhciBhPWUmbl5lJm9ebiZvO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1OKHQsZSwyOCksbj1OKGUsdCwyKSxpPU4oZSx0LDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gXyh0LGUpe3ZhciByPUwodCxlLDI4KSxuPUwoZSx0LDIpLGk9TChlLHQsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBNKHQsZSl7dmFyIHI9Tih0LGUsMTQpLG49Tih0LGUsMTgpLGk9TihlLHQsOSksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBTKHQsZSl7dmFyIHI9TCh0LGUsMTQpLG49TCh0LGUsMTgpLGk9TChlLHQsOSksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBFKHQsZSl7dmFyIHI9Tih0LGUsMSksbj1OKHQsZSw4KSxpPVUodCxlLDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gQSh0LGUpe3ZhciByPUwodCxlLDEpLG49TCh0LGUsOCksaT16KHQsZSw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj1OKHQsZSwxOSksbj1OKGUsdCwyOSksaT1VKHQsZSw2KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1MKHQsZSwxOSksbj1MKGUsdCwyOSksaT16KHQsZSw2KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfXZhciBJPXIoNDkpLEI9SS51dGlscyxPPUIuYXNzZXJ0LFI9Qi5yb3RyMzIsUD1CLnJvdGwzMixUPUIuc3VtMzIsaj1CLnN1bTMyXzQsQz1CLnN1bTMyXzUsTj1CLnJvdHI2NF9oaSxMPUIucm90cjY0X2xvLFU9Qi5zaHI2NF9oaSx6PUIuc2hyNjRfbG8sRD1CLnN1bTY0LHE9Qi5zdW02NF9oaSxGPUIuc3VtNjRfbG8sSz1CLnN1bTY0XzRfaGksRz1CLnN1bTY0XzRfbG8sVj1CLnN1bTY0XzVfaGksSD1CLnN1bTY0XzVfbG8sWD1JLmNvbW1vbi5CbG9ja0hhc2gsWT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxXPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sWj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07Qi5pbmhlcml0cyhuLFgpLGUuc2hhMjU2PW4sbi5ibG9ja1NpemU9NTEyLG4ub3V0U2l6ZT0yNTYsbi5obWFjU3RyZW5ndGg9MTkyLG4ucGFkTGVuZ3RoPTY0LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDE2O24rKylyW25dPXRbZStuXTtmb3IoO248ci5sZW5ndGg7bisrKXJbbl09aihwKHJbbi0yXSkscltuLTddLGwocltuLTE1XSkscltuLTE2XSk7dmFyIGk9dGhpcy5oWzBdLG89dGhpcy5oWzFdLGE9dGhpcy5oWzJdLGY9dGhpcy5oWzNdLGg9dGhpcy5oWzRdLGI9dGhpcy5oWzVdLHY9dGhpcy5oWzZdLHk9dGhpcy5oWzddO08odGhpcy5rLmxlbmd0aD09PXIubGVuZ3RoKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIG09Qyh5LGQoaCkscyhoLGIsdiksdGhpcy5rW25dLHJbbl0pLGc9VChjKGkpLHUoaSxvLGEpKTt5PXYsdj1iLGI9aCxoPVQoZixtKSxmPWEsYT1vLG89aSxpPVQobSxnKX10aGlzLmhbMF09VCh0aGlzLmhbMF0saSksdGhpcy5oWzFdPVQodGhpcy5oWzFdLG8pLHRoaXMuaFsyXT1UKHRoaXMuaFsyXSxhKSx0aGlzLmhbM109VCh0aGlzLmhbM10sZiksdGhpcy5oWzRdPVQodGhpcy5oWzRdLGgpLHRoaXMuaFs1XT1UKHRoaXMuaFs1XSxiKSx0aGlzLmhbNl09VCh0aGlzLmhbNl0sdiksdGhpcy5oWzddPVQodGhpcy5oWzddLHkpfSxuLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmgsXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaCxcImJpZ1wiKX0sQi5pbmhlcml0cyhpLG4pLGUuc2hhMjI0PWksaS5ibG9ja1NpemU9NTEyLGkub3V0U2l6ZT0yMjQsaS5obWFjU3RyZW5ndGg9MTkyLGkucGFkTGVuZ3RoPTY0LGkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSxcImJpZ1wiKX0sQi5pbmhlcml0cyhvLFgpLGUuc2hhNTEyPW8sby5ibG9ja1NpemU9MTAyNCxvLm91dFNpemU9NTEyLG8uaG1hY1N0cmVuZ3RoPTE5MixvLnBhZExlbmd0aD0xMjgsby5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MzI7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKz0yKXt2YXIgaT1rKHJbbi00XSxyW24tM10pLG89eChyW24tNF0scltuLTNdKSxhPXJbbi0xNF0sZj1yW24tMTNdLHM9RShyW24tMzBdLHJbbi0yOV0pLHU9QShyW24tMzBdLHJbbi0yOV0pLGg9cltuLTMyXSxjPXJbbi0zMV07cltuXT1LKGksbyxhLGYscyx1LGgsYykscltuKzFdPUcoaSxvLGEsZixzLHUsaCxjKX19LG8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLl9wcmVwYXJlQmxvY2sodCxlKTt2YXIgcj10aGlzLlcsbj10aGlzLmhbMF0saT10aGlzLmhbMV0sbz10aGlzLmhbMl0sYT10aGlzLmhbM10sZj10aGlzLmhbNF0scz10aGlzLmhbNV0sdT10aGlzLmhbNl0saD10aGlzLmhbN10sYz10aGlzLmhbOF0sZD10aGlzLmhbOV0sbD10aGlzLmhbMTBdLHA9dGhpcy5oWzExXSxiPXRoaXMuaFsxMl0sRT10aGlzLmhbMTNdLEE9dGhpcy5oWzE0XSxrPXRoaXMuaFsxNV07Tyh0aGlzLmsubGVuZ3RoPT09ci5sZW5ndGgpO2Zvcih2YXIgeD0wO3g8ci5sZW5ndGg7eCs9Mil7dmFyIEk9QSxCPWssUj1NKGMsZCksUD1TKGMsZCksVD12KGMsZCxsLHAsYixFKSxqPXkoYyxkLGwscCxiLEUpLEM9dGhpcy5rW3hdLE49dGhpcy5rW3grMV0sTD1yW3hdLFU9clt4KzFdLHo9VihJLEIsUixQLFQsaixDLE4sTCxVKSxLPUgoSSxCLFIsUCxULGosQyxOLEwsVSksST13KG4saSksQj1fKG4saSksUj1tKG4saSxvLGEsZixzKSxQPWcobixpLG8sYSxmLHMpLEc9cShJLEIsUixQKSxYPUYoSSxCLFIsUCk7QT1iLGs9RSxiPWwsRT1wLGw9YyxwPWQsYz1xKHUsaCx6LEspLGQ9RihoLGgseixLKSx1PWYsaD1zLGY9byxzPWEsbz1uLGE9aSxuPXEoeixLLEcsWCksaT1GKHosSyxHLFgpfUQodGhpcy5oLDAsbixpKSxEKHRoaXMuaCwyLG8sYSksRCh0aGlzLmgsNCxmLHMpLEQodGhpcy5oLDYsdSxoKSxEKHRoaXMuaCw4LGMsZCksRCh0aGlzLmgsMTAsbCxwKSxEKHRoaXMuaCwxMixiLEUpLEQodGhpcy5oLDE0LEEsayl9LG8ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfSxCLmluaGVyaXRzKGEsbyksZS5zaGEzODQ9YSxhLmJsb2NrU2l6ZT0xMDI0LGEub3V0U2l6ZT0zODQsYS5obWFjU3RyZW5ndGg9MTkyLGEucGFkTGVuZ3RoPTEyOCxhLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSxcImJpZ1wiKX0sQi5pbmhlcml0cyhmLFgpLGUuc2hhMT1mLGYuYmxvY2tTaXplPTUxMixmLm91dFNpemU9MTYwLGYuaG1hY1N0cmVuZ3RoPTgwLGYucGFkTGVuZ3RoPTY0LGYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDE2O24rKylyW25dPXRbZStuXTtmb3IoO248ci5sZW5ndGg7bisrKXJbbl09UChyW24tM11ecltuLThdXnJbbi0xNF1ecltuLTE2XSwxKTtmb3IodmFyIGk9dGhpcy5oWzBdLG89dGhpcy5oWzFdLGE9dGhpcy5oWzJdLGY9dGhpcy5oWzNdLHM9dGhpcy5oWzRdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIHU9fn4obi8yMCksaD1DKFAoaSw1KSxiKHUsbyxhLGYpLHMscltuXSxaW3VdKTtzPWYsZj1hLGE9UChvLDMwKSxvPWksaT1ofXRoaXMuaFswXT1UKHRoaXMuaFswXSxpKSx0aGlzLmhbMV09VCh0aGlzLmhbMV0sbyksdGhpcy5oWzJdPVQodGhpcy5oWzJdLGEpLHRoaXMuaFszXT1UKHRoaXMuaFszXSxmKSx0aGlzLmhbNF09VCh0aGlzLmhbNF0scyl9LGYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LnNsaWNlKCk7aWYoIXQpcmV0dXJuW107dmFyIHI9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpaWYoZSl7aWYoXCJoZXhcIj09PWUpe3Q9dC5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLFwiXCIpLHQubGVuZ3RoJTIhPT0wJiYodD1cIjBcIit0KTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTIpci5wdXNoKHBhcnNlSW50KHRbbl0rdFtuKzFdLDE2KSl9fWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXQuY2hhckNvZGVBdChuKSxvPWk+PjgsYT0yNTUmaTtvP3IucHVzaChvLGEpOnIucHVzaChhKX1lbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXJbbl09MHx0W25dO3JldHVybiByfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPVwiXCIscj0wO3I8dC5sZW5ndGg7cisrKWUrPWYodFtyXS50b1N0cmluZygxNikpO3JldHVybiBlfWZ1bmN0aW9uIG8odCl7dmFyIGU9dD4+PjI0fHQ+Pj44JjY1MjgwfHQ8PDgmMTY3MTE2ODB8KDI1NSZ0KTw8MjQ7cmV0dXJuIGU+Pj4wfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9XCJcIixuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07XCJsaXR0bGVcIj09PWUmJihpPW8oaSkpLHIrPXMoaS50b1N0cmluZygxNikpfXJldHVybiByfWZ1bmN0aW9uIGYodCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9cIjBcIit0OnR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gNz09PXQubGVuZ3RoP1wiMFwiK3Q6Nj09PXQubGVuZ3RoP1wiMDBcIit0OjU9PT10Lmxlbmd0aD9cIjAwMFwiK3Q6ND09PXQubGVuZ3RoP1wiMDAwMFwiK3Q6Mz09PXQubGVuZ3RoP1wiMDAwMDBcIit0OjI9PT10Lmxlbmd0aD9cIjAwMDAwMFwiK3Q6MT09PXQubGVuZ3RoP1wiMDAwMDAwMFwiK3Q6dH1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPXItZTt5KGklND09PTApO2Zvcih2YXIgbz1uZXcgQXJyYXkoaS80KSxhPTAsZj1lO2E8by5sZW5ndGg7YSsrLGYrPTQpe3ZhciBzO3M9XCJiaWdcIj09PW4/dFtmXTw8MjR8dFtmKzFdPDwxNnx0W2YrMl08PDh8dFtmKzNdOnRbZiszXTw8MjR8dFtmKzJdPDwxNnx0W2YrMV08PDh8dFtmXSxvW2FdPXM+Pj4wfXJldHVybiBvfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KDQqdC5sZW5ndGgpLG49MCxpPTA7bjx0Lmxlbmd0aDtuKyssaSs9NCl7dmFyIG89dFtuXTtcImJpZ1wiPT09ZT8ocltpXT1vPj4+MjQscltpKzFdPW8+Pj4xNiYyNTUscltpKzJdPW8+Pj44JjI1NSxyW2krM109MjU1Jm8pOihyW2krM109bz4+PjI0LHJbaSsyXT1vPj4+MTYmMjU1LHJbaSsxXT1vPj4+OCYyNTUscltpXT0yNTUmbyl9cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0Pj4+ZXx0PDwzMi1lfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDw8ZXx0Pj4+MzItZX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQrZT4+PjB9ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIHQrZStyPj4+MH1mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiB0K2UrcituPj4+MH1mdW5jdGlvbiB2KHQsZSxyLG4saSl7cmV0dXJuIHQrZStyK24raT4+PjB9ZnVuY3Rpb24geSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gbSh0LGUscixuKXt2YXIgaT10W2VdLG89dFtlKzFdLGE9bitvPj4+MCxmPShhPG4/MTowKStyK2k7dFtlXT1mPj4+MCx0W2UrMV09YX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPWUrbj4+PjAsbz0oaTxlPzE6MCkrdCtyO3JldHVybiBvPj4+MH1mdW5jdGlvbiB3KHQsZSxyLG4pe3ZhciBpPWUrbjtyZXR1cm4gaT4+PjB9ZnVuY3Rpb24gXyh0LGUscixuLGksbyxhLGYpe3ZhciBzPTAsdT1lO3U9dStuPj4+MCxzKz11PGU/MTowLHU9dStvPj4+MCxzKz11PG8/MTowLHU9dStmPj4+MCxzKz11PGY/MTowO3ZhciBoPXQrcitpK2ErcztyZXR1cm4gaD4+PjB9ZnVuY3Rpb24gTSh0LGUscixuLGksbyxhLGYpe3ZhciBzPWUrbitvK2Y7cmV0dXJuIHM+Pj4wfWZ1bmN0aW9uIFModCxlLHIsbixpLG8sYSxmLHMsdSl7dmFyIGg9MCxjPWU7Yz1jK24+Pj4wLGgrPWM8ZT8xOjAsYz1jK28+Pj4wLGgrPWM8bz8xOjAsYz1jK2Y+Pj4wLGgrPWM8Zj8xOjAsYz1jK3U+Pj4wLGgrPWM8dT8xOjA7dmFyIGQ9dCtyK2krYStzK2g7cmV0dXJuIGQ+Pj4wfWZ1bmN0aW9uIEUodCxlLHIsbixpLG8sYSxmLHMsdSl7dmFyIGg9ZStuK28rZit1O3JldHVybiBoPj4+MH1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj1lPDwzMi1yfHQ+Pj5yO3JldHVybiBuPj4+MH1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj10PDwzMi1yfGU+Pj5yO3JldHVybiBuPj4+MH1mdW5jdGlvbiB4KHQsZSxyKXtyZXR1cm4gdD4+PnJ9ZnVuY3Rpb24gSSh0LGUscil7dmFyIG49dDw8MzItcnxlPj4+cjtyZXR1cm4gbj4+PjB9dmFyIEI9ZSxPPXIoMik7Qi50b0FycmF5PW4sQi50b0hleD1pLEIuaHRvbmw9byxCLnRvSGV4MzI9YSxCLnplcm8yPWYsQi56ZXJvOD1zLEIuam9pbjMyPXUsQi5zcGxpdDMyPWgsQi5yb3RyMzI9YyxCLnJvdGwzMj1kLEIuc3VtMzI9bCxCLnN1bTMyXzM9cCxCLnN1bTMyXzQ9YixCLnN1bTMyXzU9dixCLmFzc2VydD15LEIuaW5oZXJpdHM9TyxlLnN1bTY0PW0sZS5zdW02NF9oaT1nLGUuc3VtNjRfbG89dyxlLnN1bTY0XzRfaGk9XyxlLnN1bTY0XzRfbG89TSxlLnN1bTY0XzVfaGk9UyxlLnN1bTY0XzVfbG89RSxlLnJvdHI2NF9oaT1BLGUucm90cjY0X2xvPWssZS5zaHI2NF9oaT14LGUuc2hyNjRfbG89SX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTAwKSxpPW4uZGVmaW5lKFwiUlNBUHJpdmF0ZUtleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwibW9kdWx1c1wiKS5pbnQoKSx0aGlzLmtleShcInB1YmxpY0V4cG9uZW50XCIpLmludCgpLHRoaXMua2V5KFwicHJpdmF0ZUV4cG9uZW50XCIpLmludCgpLHRoaXMua2V5KFwicHJpbWUxXCIpLmludCgpLHRoaXMua2V5KFwicHJpbWUyXCIpLmludCgpLHRoaXMua2V5KFwiZXhwb25lbnQxXCIpLmludCgpLHRoaXMua2V5KFwiZXhwb25lbnQyXCIpLmludCgpLHRoaXMua2V5KFwiY29lZmZpY2llbnRcIikuaW50KCkpfSk7ZS5SU0FQcml2YXRlS2V5PWk7dmFyIG89bi5kZWZpbmUoXCJSU0FQdWJsaWNLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwibW9kdWx1c1wiKS5pbnQoKSx0aGlzLmtleShcInB1YmxpY0V4cG9uZW50XCIpLmludCgpKX0pO2UuUlNBUHVibGljS2V5PW87dmFyIGE9bi5kZWZpbmUoXCJTdWJqZWN0UHVibGljS2V5SW5mb1wiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikudXNlKGYpLHRoaXMua2V5KFwic3ViamVjdFB1YmxpY0tleVwiKS5iaXRzdHIoKSl9KTtlLlB1YmxpY0tleT1hO3ZhciBmPW4uZGVmaW5lKFwiQWxnb3JpdGhtSWRlbnRpZmllclwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikub2JqaWQoKSx0aGlzLmtleShcIm5vbmVcIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KFwiY3VydmVcIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5KFwicGFyYW1zXCIpLnNlcSgpLm9iaih0aGlzLmtleShcInBcIikuaW50KCksdGhpcy5rZXkoXCJxXCIpLmludCgpLHRoaXMua2V5KFwiZ1wiKS5pbnQoKSkub3B0aW9uYWwoKSl9KSxzPW4uZGVmaW5lKFwiUHJpdmF0ZUtleUluZm9cIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcImFsZ29yaXRobVwiKS51c2UoZiksdGhpcy5rZXkoXCJzdWJqZWN0UHJpdmF0ZUtleVwiKS5vY3RzdHIoKSl9KTtlLlByaXZhdGVLZXk9czt2YXIgdT1uLmRlZmluZShcIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJpZFwiKS5vYmppZCgpLHRoaXMua2V5KFwiZGVjcnlwdFwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJrZGVcIikuc2VxKCkub2JqKHRoaXMua2V5KFwiaWRcIikub2JqaWQoKSx0aGlzLmtleShcImtkZXBhcmFtc1wiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJzYWx0XCIpLm9jdHN0cigpLHRoaXMua2V5KFwiaXRlcnNcIikuaW50KCkpKSx0aGlzLmtleShcImNpcGhlclwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvXCIpLm9iamlkKCksdGhpcy5rZXkoXCJpdlwiKS5vY3RzdHIoKSkpKSx0aGlzLmtleShcInN1YmplY3RQcml2YXRlS2V5XCIpLm9jdHN0cigpKX0pO2UuRW5jcnlwdGVkUHJpdmF0ZUtleT11O3ZhciBoPW4uZGVmaW5lKFwiRFNBUHJpdmF0ZUtleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwicFwiKS5pbnQoKSx0aGlzLmtleShcInFcIikuaW50KCksdGhpcy5rZXkoXCJnXCIpLmludCgpLHRoaXMua2V5KFwicHViX2tleVwiKS5pbnQoKSx0aGlzLmtleShcInByaXZfa2V5XCIpLmludCgpKX0pO2UuRFNBUHJpdmF0ZUtleT1oLGUuRFNBcGFyYW09bi5kZWZpbmUoXCJEU0FwYXJhbVwiLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBjPW4uZGVmaW5lKFwiRUNQcml2YXRlS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJwcml2YXRlS2V5XCIpLm9jdHN0cigpLHRoaXMua2V5KFwicGFyYW1ldGVyc1wiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZShkKSx0aGlzLmtleShcInB1YmxpY0tleVwiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO2UuRUNQcml2YXRlS2V5PWM7dmFyIGQ9bi5kZWZpbmUoXCJFQ1BhcmFtZXRlcnNcIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSk7ZS5zaWduYXR1cmU9bi5kZWZpbmUoXCJzaWduYXR1cmVcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiclwiKS5pbnQoKSx0aGlzLmtleShcInNcIikuaW50KCkpfSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7dmFyIG49L1Byb2MtVHlwZTogNCxFTkNSWVBURURcXHI/XFxuREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVxccj9cXG5cXHI/XFxuKFswLTlBLXpcXG5cXHJcXCtcXC9cXD1dKylcXHI/XFxuL20saT0vXi0tLS0tQkVHSU4gKC4qKSBLRVktLS0tLVxccj9cXG4vbSxvPS9eLS0tLS1CRUdJTiAoLiopIEtFWS0tLS0tXFxyP1xcbihbMC05QS16XFxuXFxyXFwrXFwvXFw9XSspXFxyP1xcbi0tLS0tRU5EIFxcMSBLRVktLS0tLSQvbSxhPXIoMTQ4KSxmPXIoMjE5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXt2YXIgcyx1PXQudG9TdHJpbmcoKSxoPXUubWF0Y2gobik7aWYoaCl7dmFyIGM9XCJhZXNcIitoWzFdLGQ9bmV3IGUoaFsyXSxcImhleFwiKSxsPW5ldyBlKGhbM10ucmVwbGFjZSgvXFxyP1xcbi9nLFwiXCIpLFwiYmFzZTY0XCIpLHA9YShyLGQuc2xpY2UoMCw4KSxwYXJzZUludChoWzFdLDEwKSkua2V5LGI9W10sdj1mLmNyZWF0ZURlY2lwaGVyaXYoYyxwLGQpO2IucHVzaCh2LnVwZGF0ZShsKSksYi5wdXNoKHYuZmluYWwoKSkscz1lLmNvbmNhdChiKX1lbHNle3ZhciB5PXUubWF0Y2gobyk7cz1uZXcgZSh5WzJdLnJlcGxhY2UoL1xccj9cXG4vZyxcIlwiKSxcImJhc2U2NFwiKX12YXIgbT11Lm1hdGNoKGkpWzFdK1wiIEtFWVwiO3JldHVybnt0YWc6bSxkYXRhOnN9fX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5ib2R5PWUsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fXZhciBpPXIoMTAwKSxvPXIoMiksYT1lO2EuZGVmaW5lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBuKHQsZSl9LG4ucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT1yKDI1MSkucnVuSW5UaGlzQ29udGV4dChcIihmdW5jdGlvbiBcIit0aGlzLm5hbWUrXCIoZW50aXR5KSB7XFxuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcXG59KVwiKX1jYXRjaCh0KXtlPWZ1bmN0aW9uKHQpe3RoaXMuX2luaXROYW1lZCh0KX19cmV0dXJuIG8oZSx0KSxlLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLGUpfSxuZXcgZSh0aGlzKX0sbi5wcm90b3R5cGUuX2dldERlY29kZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dHx8XCJkZXJcIix0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5kZWNvZGVyc1t0XT10aGlzLl9jcmVhdGVOYW1lZChpLmRlY29kZXJzW3RdKSksdGhpcy5kZWNvZGVyc1t0XX0sbi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihlKS5kZWNvZGUodCxyKX0sbi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dHx8XCJkZXJcIix0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5lbmNvZGVyc1t0XT10aGlzLl9jcmVhdGVOYW1lZChpLmVuY29kZXJzW3RdKSksdGhpcy5lbmNvZGVyc1t0XX0sbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihlKS5lbmNvZGUodCxyKX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9e307dGhpcy5fYmFzZVN0YXRlPXIsci5lbmM9dCxyLnBhcmVudD1lfHxudWxsLHIuY2hpbGRyZW49bnVsbCxyLnRhZz1udWxsLHIuYXJncz1udWxsLHIucmV2ZXJzZUFyZ3M9bnVsbCxyLmNob2ljZT1udWxsLHIub3B0aW9uYWw9ITEsci5hbnk9ITEsci5vYmo9ITEsci51c2U9bnVsbCxyLnVzZURlY29kZXI9bnVsbCxyLmtleT1udWxsLHIuZGVmYXVsdD1udWxsLHIuZXhwbGljaXQ9bnVsbCxyLmltcGxpY2l0PW51bGwsci5jb250YWlucz1udWxsLHIucGFyZW50fHwoci5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfXZhciBpPXIoNjgpLlJlcG9ydGVyLG89cig2OCkuRW5jb2RlckJ1ZmZlcixhPXIoNjgpLkRlY29kZXJCdWZmZXIsZj1yKDUzOCkscz1bXCJzZXFcIixcInNlcW9mXCIsXCJzZXRcIixcInNldG9mXCIsXCJvYmppZFwiLFwiYm9vbFwiLFwiZ2VudGltZVwiLFwidXRjdGltZVwiLFwibnVsbF9cIixcImVudW1cIixcImludFwiLFwiYml0c3RyXCIsXCJibXBzdHJcIixcImNoYXJzdHJcIixcImdlbnN0clwiLFwiZ3JhcGhzdHJcIixcImlhNXN0clwiLFwiaXNvNjQ2c3RyXCIsXCJudW1zdHJcIixcIm9jdHN0clwiLFwicHJpbnRzdHJcIixcInQ2MXN0clwiLFwidW5pc3RyXCIsXCJ1dGY4c3RyXCIsXCJ2aWRlb3N0clwiXSx1PVtcImtleVwiLFwib2JqXCIsXCJ1c2VcIixcIm9wdGlvbmFsXCIsXCJleHBsaWNpdFwiLFwiaW1wbGljaXRcIixcImRlZlwiLFwiY2hvaWNlXCIsXCJhbnlcIixcImNvbnRhaW5zXCJdLmNvbmNhdChzKSxoPVtcIl9wZWVrVGFnXCIsXCJfZGVjb2RlVGFnXCIsXCJfdXNlXCIsXCJfZGVjb2RlU3RyXCIsXCJfZGVjb2RlT2JqaWRcIixcIl9kZWNvZGVUaW1lXCIsXCJfZGVjb2RlTnVsbFwiLFwiX2RlY29kZUludFwiLFwiX2RlY29kZUJvb2xcIixcIl9kZWNvZGVMaXN0XCIsXCJfZW5jb2RlQ29tcG9zaXRlXCIsXCJfZW5jb2RlU3RyXCIsXCJfZW5jb2RlT2JqaWRcIixcIl9lbmNvZGVUaW1lXCIsXCJfZW5jb2RlTnVsbFwiLFwiX2VuY29kZUludFwiLFwiX2VuY29kZUJvb2xcIl07dC5leHBvcnRzPW47dmFyIGM9W1wiZW5jXCIsXCJwYXJlbnRcIixcImNoaWxkcmVuXCIsXCJ0YWdcIixcImFyZ3NcIixcInJldmVyc2VBcmdzXCIsXCJjaG9pY2VcIixcIm9wdGlvbmFsXCIsXCJhbnlcIixcIm9ialwiLFwidXNlXCIsXCJhbHRlcmVkVXNlXCIsXCJrZXlcIixcImRlZmF1bHRcIixcImV4cGxpY2l0XCIsXCJpbXBsaWNpdFwiLFwiY29udGFpbnNcIl07bi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGUsZT17fTtjLmZvckVhY2goZnVuY3Rpb24ocil7ZVtyXT10W3JdfSk7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IoZS5wYXJlbnQpO3JldHVybiByLl9iYXNlU3RhdGU9ZSxyfSxuLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTt1LmZvckVhY2goZnVuY3Rpb24oZSl7dGhpc1tlXT1mdW5jdGlvbigpe3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiB0LmNoaWxkcmVuLnB1c2gocikscltlXS5hcHBseShyLGFyZ3VtZW50cyl9fSx0aGlzKX0sbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO2YobnVsbD09PWUucGFyZW50KSx0LmNhbGwodGhpcyksZS5jaGlsZHJlbj1lLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLGYuZXF1YWwoZS5jaGlsZHJlbi5sZW5ndGgsMSxcIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZFwiKX0sbi5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlLHI9dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTt0PXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09ci5sZW5ndGgmJihmKG51bGw9PT1lLmNoaWxkcmVuKSxlLmNoaWxkcmVuPXIsci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAhPT10Lmxlbmd0aCYmKGYobnVsbD09PWUuYXJncyksZS5hcmdzPXQsZS5yZXZlcnNlQXJncz10Lm1hcChmdW5jdGlvbih0KXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8dC5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gdDt2YXIgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtyPT0oMHxyKSYmKHJ8PTApO3ZhciBuPXRbcl07ZVtuXT1yfSksZX0pKX0saC5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3Rocm93IG5ldyBFcnJvcih0K1wiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6IFwiK2UuZW5jKX19KSxzLmZvckVhY2goZnVuY3Rpb24odCl7bi5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9iYXNlU3RhdGUscj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBmKG51bGw9PT1lLnRhZyksZS50YWc9dCx0aGlzLl91c2VBcmdzKHIpLHRoaXN9fSksbi5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS51c2UpLGUudXNlPXQsdGhpc30sbi5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHQub3B0aW9uYWw9ITAsdGhpc30sbi5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5kZWZhdWx0KSxlLmRlZmF1bHQ9dCxlLm9wdGlvbmFsPSEwLHRoaXN9LG4ucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5leHBsaWNpdCYmbnVsbD09PWUuaW1wbGljaXQpLGUuZXhwbGljaXQ9dCx0aGlzfSxuLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuZXhwbGljaXQmJm51bGw9PT1lLmltcGxpY2l0KSxlLmltcGxpY2l0PXQsdGhpc30sbi5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gdC5vYmo9ITAsMCE9PWUubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKGUpLHRoaXN9LG4ucHJvdG90eXBlLmtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUua2V5KSxlLmtleT10LHRoaXN9LG4ucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdC5hbnk9ITAsdGhpc30sbi5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5jaG9pY2UpLGUuY2hvaWNlPXQsdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSksdGhpc30sbi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLnVzZSksZS5jb250YWlucz10LHRoaXN9LG4ucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PXIucGFyZW50KXJldHVybiB0LndyYXBSZXN1bHQoci5jaGlsZHJlblswXS5fZGVjb2RlKHQsZSkpO3ZhciBuPXIuZGVmYXVsdCxpPSEwLG89bnVsbDtpZihudWxsIT09ci5rZXkmJihvPXQuZW50ZXJLZXkoci5rZXkpKSxyLm9wdGlvbmFsKXt2YXIgZj1udWxsO2lmKG51bGwhPT1yLmV4cGxpY2l0P2Y9ci5leHBsaWNpdDpudWxsIT09ci5pbXBsaWNpdD9mPXIuaW1wbGljaXQ6bnVsbCE9PXIudGFnJiYoZj1yLnRhZyksbnVsbCE9PWZ8fHIuYW55KXtpZihpPXRoaXMuX3BlZWtUYWcodCxmLHIuYW55KSx0LmlzRXJyb3IoaSkpcmV0dXJuIGl9ZWxzZXt2YXIgcz10LnNhdmUoKTt0cnl7bnVsbD09PXIuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoci50YWcsdCxlKTp0aGlzLl9kZWNvZGVDaG9pY2UodCxlKSxpPSEwfWNhdGNoKHQpe2k9ITF9dC5yZXN0b3JlKHMpfX12YXIgdTtpZihyLm9iaiYmaSYmKHU9dC5lbnRlck9iamVjdCgpKSxpKXtpZihudWxsIT09ci5leHBsaWNpdCl7dmFyIGg9dGhpcy5fZGVjb2RlVGFnKHQsci5leHBsaWNpdCk7aWYodC5pc0Vycm9yKGgpKXJldHVybiBoO3Q9aH12YXIgYz10Lm9mZnNldDtpZihudWxsPT09ci51c2UmJm51bGw9PT1yLmNob2ljZSl7aWYoci5hbnkpdmFyIHM9dC5zYXZlKCk7dmFyIGQ9dGhpcy5fZGVjb2RlVGFnKHQsbnVsbCE9PXIuaW1wbGljaXQ/ci5pbXBsaWNpdDpyLnRhZyxyLmFueSk7aWYodC5pc0Vycm9yKGQpKXJldHVybiBkO3IuYW55P249dC5yYXcocyk6dD1kfWlmKGUmJmUudHJhY2smJm51bGwhPT1yLnRhZyYmZS50cmFjayh0LnBhdGgoKSxjLHQubGVuZ3RoLFwidGFnZ2VkXCIpLGUmJmUudHJhY2smJm51bGwhPT1yLnRhZyYmZS50cmFjayh0LnBhdGgoKSx0Lm9mZnNldCx0Lmxlbmd0aCxcImNvbnRlbnRcIiksbj1yLmFueT9uOm51bGw9PT1yLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHIudGFnLHQsZSk6dGhpcy5fZGVjb2RlQ2hvaWNlKHQsZSksdC5pc0Vycm9yKG4pKXJldHVybiBuO2lmKHIuYW55fHxudWxsIT09ci5jaG9pY2V8fG51bGw9PT1yLmNoaWxkcmVufHxyLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24ocil7ci5fZGVjb2RlKHQsZSl9KSxyLmNvbnRhaW5zJiYoXCJvY3RzdHJcIj09PXIudGFnfHxcImJpdHN0clwiPT09ci50YWcpKXt2YXIgbD1uZXcgYShuKTtuPXRoaXMuX2dldFVzZShyLmNvbnRhaW5zLHQuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGwsZSl9fXJldHVybiByLm9iaiYmaSYmKG49dC5sZWF2ZU9iamVjdCh1KSksbnVsbD09PXIua2V5fHxudWxsPT09biYmaSE9PSEwP251bGwhPT1vJiZ0LmV4aXRLZXkobyk6dC5sZWF2ZUtleShvLHIua2V5LG4pLG59LG4ucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuXCJzZXFcIj09PXR8fFwic2V0XCI9PT10P251bGw6XCJzZXFvZlwiPT09dHx8XCJzZXRvZlwiPT09dD90aGlzLl9kZWNvZGVMaXN0KGUsdCxuLmFyZ3NbMF0scik6L3N0ciQvLnRlc3QodCk/dGhpcy5fZGVjb2RlU3RyKGUsdCxyKTpcIm9iamlkXCI9PT10JiZuLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoZSxuLmFyZ3NbMF0sbi5hcmdzWzFdLHIpOlwib2JqaWRcIj09PXQ/dGhpcy5fZGVjb2RlT2JqaWQoZSxudWxsLG51bGwscik6XCJnZW50aW1lXCI9PT10fHxcInV0Y3RpbWVcIj09PXQ/dGhpcy5fZGVjb2RlVGltZShlLHQscik6XCJudWxsX1wiPT09dD90aGlzLl9kZWNvZGVOdWxsKGUscik6XCJib29sXCI9PT10P3RoaXMuX2RlY29kZUJvb2woZSxyKTpcImludFwiPT09dHx8XCJlbnVtXCI9PT10P3RoaXMuX2RlY29kZUludChlLG4uYXJncyYmbi5hcmdzWzBdLHIpOm51bGwhPT1uLnVzZT90aGlzLl9nZXRVc2Uobi51c2UsZS5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoZSxyKTplLmVycm9yKFwidW5rbm93biB0YWc6IFwiK3QpfSxuLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByLnVzZURlY29kZXI9dGhpcy5fdXNlKHQsZSksZihudWxsPT09ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxyLnVzZURlY29kZXI9ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sci5pbXBsaWNpdCE9PXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoci51c2VEZWNvZGVyPXIudXNlRGVjb2Rlci5jbG9uZSgpLHIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PXIuaW1wbGljaXQpLHIudXNlRGVjb2Rlcn0sbi5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZSxuPW51bGwsaT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoci5jaG9pY2UpLnNvbWUoZnVuY3Rpb24obyl7dmFyIGE9dC5zYXZlKCksZj1yLmNob2ljZVtvXTt0cnl7dmFyIHM9Zi5fZGVjb2RlKHQsZSk7aWYodC5pc0Vycm9yKHMpKXJldHVybiExO249e3R5cGU6byx2YWx1ZTpzfSxpPSEwfWNhdGNoKGUpe3JldHVybiB0LnJlc3RvcmUoYSksITF9cmV0dXJuITB9LHRoaXMpLGk/bjp0LmVycm9yKFwiQ2hvaWNlIG5vdCBtYXRjaGVkXCIpfSxuLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCx0aGlzLnJlcG9ydGVyKX0sbi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1uLmRlZmF1bHR8fG4uZGVmYXVsdCE9PXQpe3ZhciBpPXRoaXMuX2VuY29kZVZhbHVlKHQsZSxyKTtpZih2b2lkIDAhPT1pJiYhdGhpcy5fc2tpcERlZmF1bHQoaSxlLHIpKXJldHVybiBpfX0sbi5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PW4ucGFyZW50KXJldHVybiBuLmNoaWxkcmVuWzBdLl9lbmNvZGUodCxlfHxuZXcgaSk7dmFyIG89bnVsbDtpZih0aGlzLnJlcG9ydGVyPWUsbi5vcHRpb25hbCYmdm9pZCAwPT09dCl7aWYobnVsbD09PW4uZGVmYXVsdClyZXR1cm47dD1uLmRlZmF1bHR9dmFyIGE9bnVsbCxmPSExO2lmKG4uYW55KW89dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTtlbHNlIGlmKG4uY2hvaWNlKW89dGhpcy5fZW5jb2RlQ2hvaWNlKHQsZSk7ZWxzZSBpZihuLmNvbnRhaW5zKWE9dGhpcy5fZ2V0VXNlKG4uY29udGFpbnMscikuX2VuY29kZSh0LGUpLGY9ITA7ZWxzZSBpZihuLmNoaWxkcmVuKWE9bi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24ocil7aWYoXCJudWxsX1wiPT09ci5fYmFzZVN0YXRlLnRhZylyZXR1cm4gci5fZW5jb2RlKG51bGwsZSx0KTtpZihudWxsPT09ci5fYmFzZVN0YXRlLmtleSlyZXR1cm4gZS5lcnJvcihcIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5XCIpO3ZhciBuPWUuZW50ZXJLZXkoci5fYmFzZVN0YXRlLmtleSk7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHQpcmV0dXJuIGUuZXJyb3IoXCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3RcIik7dmFyIGk9ci5fZW5jb2RlKHRbci5fYmFzZVN0YXRlLmtleV0sZSx0KTtyZXR1cm4gZS5sZWF2ZUtleShuKSxpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxhPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoYSk7ZWxzZSBpZihcInNlcW9mXCI9PT1uLnRhZ3x8XCJzZXRvZlwiPT09bi50YWcpe2lmKCFuLmFyZ3N8fDEhPT1uLmFyZ3MubGVuZ3RoKXJldHVybiBlLmVycm9yKFwiVG9vIG1hbnkgYXJncyBmb3IgOiBcIituLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuZXJyb3IoXCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5XCIpO3ZhciBzPXRoaXMuY2xvbmUoKTtzLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxhPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodC5tYXAoZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0aGlzLl9nZXRVc2Uobi5hcmdzWzBdLHQpLl9lbmNvZGUocixlKX0scykpfWVsc2UgbnVsbCE9PW4udXNlP289dGhpcy5fZ2V0VXNlKG4udXNlLHIpLl9lbmNvZGUodCxlKTooYT10aGlzLl9lbmNvZGVQcmltaXRpdmUobi50YWcsdCksZj0hMCk7dmFyIG87aWYoIW4uYW55JiZudWxsPT09bi5jaG9pY2Upe3ZhciB1PW51bGwhPT1uLmltcGxpY2l0P24uaW1wbGljaXQ6bi50YWcsaD1udWxsPT09bi5pbXBsaWNpdD9cInVuaXZlcnNhbFwiOlwiY29udGV4dFwiO251bGw9PT11P251bGw9PT1uLnVzZSYmZS5lcnJvcihcIlRhZyBjb3VsZCBiZSBvbW1pdGVkIG9ubHkgZm9yIC51c2UoKVwiKTpudWxsPT09bi51c2UmJihvPXRoaXMuX2VuY29kZUNvbXBvc2l0ZSh1LGYsaCxhKSl9cmV0dXJuIG51bGwhPT1uLmV4cGxpY2l0JiYobz10aGlzLl9lbmNvZGVDb21wb3NpdGUobi5leHBsaWNpdCwhMSxcImNvbnRleHRcIixvKSksb30sbi5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZSxuPXIuY2hvaWNlW3QudHlwZV07cmV0dXJuIG58fGYoITEsdC50eXBlK1wiIG5vdCBmb3VuZCBpbiBcIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhyLmNob2ljZSkpKSxuLl9lbmNvZGUodC52YWx1ZSxlKX0sbi5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdCh0KSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKGUsdCk7aWYoXCJvYmppZFwiPT09dCYmci5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChlLHIucmV2ZXJzZUFyZ3NbMF0sci5hcmdzWzFdKTtpZihcIm9iamlkXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChlLG51bGwsbnVsbCk7aWYoXCJnZW50aW1lXCI9PT10fHxcInV0Y3RpbWVcIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoZSx0KTtpZihcIm51bGxfXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7aWYoXCJpbnRcIj09PXR8fFwiZW51bVwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlSW50KGUsci5hcmdzJiZyLnJldmVyc2VBcmdzWzBdKTtpZihcImJvb2xcIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woZSk7dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdGFnOiBcIit0KX0sbi5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKHQpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QodCl9LG4ucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKHQpe3JldHVybi9eW0EtWmEtejAtOSAnXFwoXFwpXFwrLFxcLVxcLlxcLzo9XFw/XSokLy50ZXN0KHQpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOnR8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gaSh0LGUpe3RoaXMucGF0aD10LHRoaXMucmV0aHJvdyhlKX12YXIgbz1yKDIpO2UuUmVwb3J0ZXI9bixuLnByb3RvdHlwZS5pc0Vycm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaX0sbi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajp0Lm9iaixwYXRoTGVuOnQucGF0aC5sZW5ndGh9fSxuLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGU7ZS5vYmo9dC5vYmosZS5wYXRoPWUucGF0aC5zbGljZSgwLHQucGF0aExlbil9LG4ucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaCh0KX0sbi5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO2UucGF0aD1lLnBhdGguc2xpY2UoMCx0LTEpfSxuLnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkodCksbnVsbCE9PW4ub2JqJiYobi5vYmpbZV09cil9LG4ucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oXCIvXCIpfSxuLnByb3RvdHlwZS5lbnRlck9iamVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlcG9ydGVyU3RhdGUsZT10Lm9iajtyZXR1cm4gdC5vYmo9e30sZX0sbi5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxyPWUub2JqO3JldHVybiBlLm9iaj10LHJ9LG4ucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxuPXQgaW5zdGFuY2VvZiBpO2lmKGU9bj90Om5ldyBpKHIucGF0aC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJbXCIrSlNPTi5zdHJpbmdpZnkodCkrXCJdXCJ9KS5qb2luKFwiXCIpLHQubWVzc2FnZXx8dCx0LnN0YWNrKSwhci5vcHRpb25zLnBhcnRpYWwpdGhyb3cgZTtyZXR1cm4gbnx8ci5lcnJvcnMucHVzaChlKSxlfSxuLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIGUub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKHQpP251bGw6dCxlcnJvcnM6ZS5lcnJvcnN9OnR9LG8oaSxFcnJvciksaS5wcm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbih0KXtpZih0aGlzLm1lc3NhZ2U9dCtcIiBhdDogXCIrKHRoaXMucGF0aHx8XCIoc2hhbGxvdylcIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsaSksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKHQpe3RoaXMuc3RhY2s9dC5zdGFja31yZXR1cm4gdGhpc319LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIxNSk7ZS50YWdDbGFzcz17MDpcInVuaXZlcnNhbFwiLDE6XCJhcHBsaWNhdGlvblwiLDI6XCJjb250ZXh0XCIsMzpcInByaXZhdGVcIn0sZS50YWdDbGFzc0J5TmFtZT1uLl9yZXZlcnNlKGUudGFnQ2xhc3MpLGUudGFnPXswOlwiZW5kXCIsMTpcImJvb2xcIiwyOlwiaW50XCIsMzpcImJpdHN0clwiLDQ6XCJvY3RzdHJcIiw1OlwibnVsbF9cIiw2Olwib2JqaWRcIiw3Olwib2JqRGVzY1wiLDg6XCJleHRlcm5hbFwiLDk6XCJyZWFsXCIsMTA6XCJlbnVtXCIsMTE6XCJlbWJlZFwiLDEyOlwidXRmOHN0clwiLDEzOlwicmVsYXRpdmVPaWRcIiwxNjpcInNlcVwiLDE3Olwic2V0XCIsMTg6XCJudW1zdHJcIiwxOTpcInByaW50c3RyXCIsMjA6XCJ0NjFzdHJcIixcbjIxOlwidmlkZW9zdHJcIiwyMjpcImlhNXN0clwiLDIzOlwidXRjdGltZVwiLDI0OlwiZ2VudGltZVwiLDI1OlwiZ3JhcGhzdHJcIiwyNjpcImlzbzY0NnN0clwiLDI3OlwiZ2Vuc3RyXCIsMjg6XCJ1bmlzdHJcIiwyOTpcImNoYXJzdHJcIiwzMDpcImJtcHN0clwifSxlLnRhZ0J5TmFtZT1uLl9yZXZlcnNlKGUudGFnKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5kZXI9cigyMTYpLG4ucGVtPXIoNTM1KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7YS5jYWxsKHRoaXMsdCksdGhpcy5lbmM9XCJwZW1cIn12YXIgaT1yKDIpLG89cigxKS5CdWZmZXIsYT1yKDIxNik7aShuLGEpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRvU3RyaW5nKCkuc3BsaXQoL1tcXHJcXG5dKy9nKSxuPWUubGFiZWwudG9VcHBlckNhc2UoKSxpPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxmPS0xLHM9LTEsdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1yW3VdLm1hdGNoKGkpO2lmKG51bGwhPT1oJiZoWzJdPT09bil7aWYoZiE9PS0xKXtpZihcIkVORFwiIT09aFsxXSlicmVhaztzPXU7YnJlYWt9aWYoXCJCRUdJTlwiIT09aFsxXSlicmVhaztmPXV9fWlmKGY9PT0tMXx8cz09PS0xKXRocm93IG5ldyBFcnJvcihcIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6IFwiK24pO3ZhciBjPXIuc2xpY2UoZisxLHMpLmpvaW4oXCJcIik7Yy5yZXBsYWNlKC9bXmEtejAtOVxcK1xcLz1dKy9naSxcIlwiKTt2YXIgZD1uZXcgbyhjLFwiYmFzZTY0XCIpO3JldHVybiBhLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLGQsZSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmRlcj1yKDIxNyksbi5wZW09cig1MzcpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtvLmNhbGwodGhpcyx0KSx0aGlzLmVuYz1cInBlbVwifXZhciBpPXIoMiksbz1yKDIxNyk7aShuLG8pLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1vLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLHQpLG49ci50b1N0cmluZyhcImJhc2U2NFwiKSxpPVtcIi0tLS0tQkVHSU4gXCIrZS5sYWJlbCtcIi0tLS0tXCJdLGE9MDthPG4ubGVuZ3RoO2ErPTY0KWkucHVzaChuLnNsaWNlKGEsYSs2NCkpO3JldHVybiBpLnB1c2goXCItLS0tLUVORCBcIitlLmxhYmVsK1wiLS0tLS1cIiksaS5qb2luKFwiXFxuXCIpfX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX10LmV4cG9ydHM9cixyLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0IT1lKXRocm93IG5ldyBFcnJvcihyfHxcIkFzc2VydGlvbiBmYWlsZWQ6IFwiK3QrXCIgIT0gXCIrZSl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG8pe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBpLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgcy5BRVMociksdGhpcy5fcHJldj1uZXcgdChvLmxlbmd0aCksby5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9ZSx2b2lkKHRoaXMuX2F1dG9wYWRkaW5nPSEwKSk6bmV3IG4oZSxyLG8pfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dm9pZCh0aGlzLmNhY2hlPW5ldyB0KFwiXCIpKTpuZXcgaX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10WzE1XSxyPS0xOysrcjxlOylpZih0W3IrKDE2LWUpXSE9PWUpdGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGRlY3J5cHQgZGF0YVwiKTtpZigxNiE9PWUpcmV0dXJuIHQuc2xpY2UoMCwxNi1lKX1mdW5jdGlvbiBhKGUscixpKXt2YXIgbz1jW2UudG9Mb3dlckNhc2UoKV07aWYoIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bmV3IHQoaSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgdChyKSksci5sZW5ndGghPT1vLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGggXCIrci5sZW5ndGgpO2lmKGkubGVuZ3RoIT09by5pdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBpdiBsZW5ndGggXCIraS5sZW5ndGgpO3JldHVyblwic3RyZWFtXCI9PT1vLnR5cGU/bmV3IGQoYltvLm1vZGVdLHIsaSwhMCk6XCJhdXRoXCI9PT1vLnR5cGU/bmV3IGwoYltvLm1vZGVdLHIsaSwhMCk6bmV3IG4oYltvLm1vZGVdLHIsaSl9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWNbdC50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBuPXAoZSwhMSxyLmtleSxyLml2KTtyZXR1cm4gYSh0LG4ua2V5LG4uaXYpfXZhciBzPXIoMTAxKSx1PXIoMTAzKSxoPXIoMiksYz1yKDE0NyksZD1yKDIyNiksbD1yKDIxOCkscD1yKDE0OCk7aChuLHUpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgcixuLGk9W107cj10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOyluPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHIpLGkucHVzaChuKTtyZXR1cm4gdC5jb25jYXQoaSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIG8odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsdCkpO2lmKHQpdGhyb3cgbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHQpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxlfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxlO3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfTt2YXIgYj17RUNCOnIoMjI0KSxDQkM6cigyMjApLENGQjpyKDIyMSksQ0ZCODpyKDIyMyksQ0ZCMTpyKDIyMiksT0ZCOnIoMjI1KSxDVFI6cigxMDIpLEdDTTpyKDEwMil9O2UuY3JlYXRlRGVjaXBoZXI9ZixlLmNyZWF0ZURlY2lwaGVyaXY9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhzLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fY2lwaGVyPW5ldyBmLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyB0KG8ubGVuZ3RoKSxvLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT1lLHZvaWQodGhpcy5fYXV0b3BhZGRpbmc9ITApKTpuZXcgbihlLHIsbyl9ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT92b2lkKHRoaXMuY2FjaGU9bmV3IHQoXCJcIikpOm5ldyBpfWZ1bmN0aW9uIG8oZSxyLGkpe3ZhciBvPWhbZS50b0xvd2VyQ2FzZSgpXTtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT1uZXcgdChpKSksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyB0KHIpKSxyLmxlbmd0aCE9PW8ua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQga2V5IGxlbmd0aCBcIityLmxlbmd0aCk7aWYoaS5sZW5ndGghPT1vLml2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGl2IGxlbmd0aCBcIitpLmxlbmd0aCk7cmV0dXJuXCJzdHJlYW1cIj09PW8udHlwZT9uZXcgZChwW28ubW9kZV0scixpKTpcImF1dGhcIj09PW8udHlwZT9uZXcgbChwW28ubW9kZV0scixpKTpuZXcgbihwW28ubW9kZV0scixpKX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9aFt0LnRvTG93ZXJDYXNlKCldO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7dmFyIG49YyhlLCExLHIua2V5LHIuaXYpO3JldHVybiBvKHQsbi5rZXksbi5pdil9dmFyIGY9cigxMDEpLHM9cigxMDMpLHU9cigyKSxoPXIoMTQ3KSxjPXIoMTQ4KSxkPXIoMjI2KSxsPXIoMjE4KTt1KG4scyksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9jYWNoZS5hZGQoZSk7Zm9yKHZhciByLG4saT1bXTtyPXRoaXMuX2NhY2hlLmdldCgpOyluPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHIpLGkucHVzaChuKTtyZXR1cm4gdC5jb25jYXQoaSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIHQ9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCksdGhpcy5fY2lwaGVyLnNjcnViKCksdDtpZihcIjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwXCIhPT10LnRvU3RyaW5nKFwiaGV4XCIpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcihcImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aFwiKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhdCx0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZT10LmNvbmNhdChbdGhpcy5jYWNoZSxlXSl9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgdD10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHR9cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTE2LXRoaXMuY2FjaGUubGVuZ3RoLHI9bmV3IHQoZSksbj0tMTsrK248ZTspci53cml0ZVVJbnQ4KGUsbik7dmFyIGk9dC5jb25jYXQoW3RoaXMuY2FjaGUscl0pO3JldHVybiBpfTt2YXIgcD17RUNCOnIoMjI0KSxDQkM6cigyMjApLENGQjpyKDIyMSksQ0ZCODpyKDIyMyksQ0ZCMTpyKDIyMiksT0ZCOnIoMjI1KSxDVFI6cigxMDIpLEdDTTpyKDEwMil9O2UuY3JlYXRlQ2lwaGVyaXY9byxlLmNyZWF0ZUNpcGhlcj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3RoaXMuaD10LHRoaXMuc3RhdGU9bmV3IGUoMTYpLHRoaXMuc3RhdGUuZmlsbCgwKSx0aGlzLmNhY2hlPW5ldyBlKFwiXCIpfWZ1bmN0aW9uIG4odCl7cmV0dXJuW3QucmVhZFVJbnQzMkJFKDApLHQucmVhZFVJbnQzMkJFKDQpLHQucmVhZFVJbnQzMkJFKDgpLHQucmVhZFVJbnQzMkJFKDEyKV19ZnVuY3Rpb24gaSh0KXt0PXQubWFwKG8pO3ZhciByPW5ldyBlKDE2KTtyZXR1cm4gci53cml0ZVVJbnQzMkJFKHRbMF0sMCksci53cml0ZVVJbnQzMkJFKHRbMV0sNCksci53cml0ZVVJbnQzMkJFKHRbMl0sOCksci53cml0ZVVJbnQzMkJFKHRbM10sMTIpLHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPXQ+c3x8dDwwPyhyPU1hdGguYWJzKHQpJXMsdDwwP3MtcjpyKTp0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm5bdFswXV5lWzBdLHRbMV1eZVsxXSx0WzJdXmVbMl0sdFszXV5lWzNdXX12YXIgZj1uZXcgZSgxNik7Zi5maWxsKDApLHQuZXhwb3J0cz1yLHIucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMTsrK2U8dC5sZW5ndGg7KXRoaXMuc3RhdGVbZV1ePXRbZV07dGhpcy5fbXVsdGlwbHkoKX0sci5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixvPW4odGhpcy5oKSxmPVswLDAsMCwwXSxzPS0xOysrczwxMjg7KXtmb3IoZT0wIT09KHRoaXMuc3RhdGVbfn4ocy84KV0mMTw8Ny1zJTgpLGUmJihmPWEoZixvKSkscj0wIT09KDEmb1szXSksdD0zO3Q+MDt0LS0pb1t0XT1vW3RdPj4+MXwoMSZvW3QtMV0pPDwzMTtvWzBdPW9bMF0+Pj4xLHImJihvWzBdPW9bMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1pKGYpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5jYWNoZT1lLmNvbmNhdChbdGhpcy5jYWNoZSx0XSk7Zm9yKHZhciByO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspcj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChyKX0sci5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goZS5jb25jYXQoW3RoaXMuY2FjaGUsZl0sMTYpKSx0aGlzLmdoYXNoKGkoWzAsdCwwLHJdKSksdGhpcy5zdGF0ZX07dmFyIHM9TWF0aC5wb3coMiwzMil9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGE9dihlKTtpZihhLmN1cnZlKXtpZihcImVjZHNhXCIhPT1uKXRocm93IG5ldyBFcnJvcihcIndyb25nIHByaXZhdGUga2V5IHR5cGVcIik7cmV0dXJuIGkodCxhKX1pZihcImRzYVwiPT09YS50eXBlKXtpZihcImRzYVwiIT09bil0aHJvdyBuZXcgRXJyb3IoXCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlXCIpO3JldHVybiBvKHQsYSxyKX1pZihcInJzYVwiIT09bil0aHJvdyBuZXcgRXJyb3IoXCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlXCIpO2Zvcih2YXIgZj1hLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHM9WzAsMV07dC5sZW5ndGgrcy5sZW5ndGgrMTxmOylzLnB1c2goMjU1KTtzLnB1c2goMCk7Zm9yKHZhciB1PS0xOysrdTx0Lmxlbmd0aDspcy5wdXNoKHRbdV0pO3ZhciBoPWwocyxhKTtyZXR1cm4gaH1mdW5jdGlvbiBpKHQscil7dmFyIG49cFtyLmN1cnZlLmpvaW4oXCIuXCIpXTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGN1cnZlIFwiK3IuY3VydmUuam9pbihcIi5cIikpO3ZhciBpPW5ldyBtKG4pLG89aS5nZW5LZXlQYWlyKCk7by5faW1wb3J0UHJpdmF0ZShyLnByaXZhdGVLZXkpO3ZhciBhPW8uc2lnbih0KTtyZXR1cm4gbmV3IGUoYS50b0RFUigpKX1mdW5jdGlvbiBvKHQsZSxyKXtmb3IodmFyIG4saT1lLnBhcmFtcy5wcml2X2tleSxvPWUucGFyYW1zLnAsdT1lLnBhcmFtcy5xLGQ9ZS5wYXJhbXMuZyxsPW5ldyB5KDApLHA9cyh0LHUpLm1vZCh1KSxiPSExLHY9ZihpLHUsdCxyKTtiPT09ITE7KW49aCh1LHYsciksbD1jKGQsbixvLHUpLGI9bi5pbnZtKHUpLmltdWwocC5hZGQoaS5tdWwobCkpKS5tb2QodSksYi5jbXBuKDApfHwoYj0hMSxsPW5ldyB5KDApKTtyZXR1cm4gYShsLGIpfWZ1bmN0aW9uIGEodCxyKXt0PXQudG9BcnJheSgpLHI9ci50b0FycmF5KCksMTI4JnRbMF0mJih0PVswXS5jb25jYXQodCkpLDEyOCZyWzBdJiYocj1bMF0uY29uY2F0KHIpKTt2YXIgbj10Lmxlbmd0aCtyLmxlbmd0aCs0LGk9WzQ4LG4sMix0Lmxlbmd0aF07cmV0dXJuIGk9aS5jb25jYXQodCxbMixyLmxlbmd0aF0sciksbmV3IGUoaSl9ZnVuY3Rpb24gZih0LHIsbixpKXtpZih0PW5ldyBlKHQudG9BcnJheSgpKSx0Lmxlbmd0aDxyLmJ5dGVMZW5ndGgoKSl7dmFyIG89bmV3IGUoci5ieXRlTGVuZ3RoKCktdC5sZW5ndGgpO28uZmlsbCgwKSx0PWUuY29uY2F0KFtvLHRdKX12YXIgYT1uLmxlbmd0aCxmPXUobixyKSxzPW5ldyBlKGEpO3MuZmlsbCgxKTt2YXIgaD1uZXcgZShhKTtyZXR1cm4gaC5maWxsKDApLGg9ZChpLGgpLnVwZGF0ZShzKS51cGRhdGUobmV3IGUoWzBdKSkudXBkYXRlKHQpLnVwZGF0ZShmKS5kaWdlc3QoKSxzPWQoaSxoKS51cGRhdGUocykuZGlnZXN0KCksaD1kKGksaCkudXBkYXRlKHMpLnVwZGF0ZShuZXcgZShbMV0pKS51cGRhdGUodCkudXBkYXRlKGYpLmRpZ2VzdCgpLHM9ZChpLGgpLnVwZGF0ZShzKS5kaWdlc3QoKSx7azpoLHY6c319ZnVuY3Rpb24gcyh0LGUpe3ZhciByPW5ldyB5KHQpLG49KHQubGVuZ3RoPDwzKS1lLmJpdExlbmd0aCgpO3JldHVybiBuPjAmJnIuaXNocm4obikscn1mdW5jdGlvbiB1KHQscil7dD1zKHQsciksdD10Lm1vZChyKTt2YXIgbj1uZXcgZSh0LnRvQXJyYXkoKSk7aWYobi5sZW5ndGg8ci5ieXRlTGVuZ3RoKCkpe3ZhciBpPW5ldyBlKHIuYnl0ZUxlbmd0aCgpLW4ubGVuZ3RoKTtpLmZpbGwoMCksbj1lLmNvbmNhdChbaSxuXSl9cmV0dXJuIG59ZnVuY3Rpb24gaCh0LHIsbil7dmFyIGksbztkb3tmb3IoaT1uZXcgZShcIlwiKTs4KmkubGVuZ3RoPHQuYml0TGVuZ3RoKCk7KXIudj1kKG4sci5rKS51cGRhdGUoci52KS5kaWdlc3QoKSxpPWUuY29uY2F0KFtpLHIudl0pO289cyhpLHQpLHIuaz1kKG4sci5rKS51cGRhdGUoci52KS51cGRhdGUobmV3IGUoWzBdKSkuZGlnZXN0KCksci52PWQobixyLmspLnVwZGF0ZShyLnYpLmRpZ2VzdCgpfXdoaWxlKG8uY21wKHQpIT09LTEpO3JldHVybiBvfWZ1bmN0aW9uIGModCxlLHIsbil7cmV0dXJuIHQudG9SZWQoeS5tb250KHIpKS5yZWRQb3coZSkuZnJvbVJlZCgpLm1vZChuKX12YXIgZD1yKDE0OSksbD1yKDUwNykscD1yKDIxMiksYj1yKDE5KSx2PXIoMjEzKSx5PXIoMTgpLG09Yi5lYzt0LmV4cG9ydHM9bix0LmV4cG9ydHMuZ2V0S2V5PWYsdC5leHBvcnRzLm1ha2VLZXk9aH0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsbixhKXt2YXIgZj11KG4pO2lmKFwiZWNcIj09PWYudHlwZSl7aWYoXCJlY2RzYVwiIT09YSl0aHJvdyBuZXcgRXJyb3IoXCJ3cm9uZyBwdWJsaWMga2V5IHR5cGVcIik7cmV0dXJuIGkodCxyLGYpfWlmKFwiZHNhXCI9PT1mLnR5cGUpe2lmKFwiZHNhXCIhPT1hKXRocm93IG5ldyBFcnJvcihcIndyb25nIHB1YmxpYyBrZXkgdHlwZVwiKTtyZXR1cm4gbyh0LHIsZil9aWYoXCJyc2FcIiE9PWEpdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHVibGljIGtleSB0eXBlXCIpO2Zvcih2YXIgcz1mLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGM9WzFdLGQ9MDtyLmxlbmd0aCtjLmxlbmd0aCsyPHM7KWMucHVzaCgyNTUpLGQrKztjLnB1c2goMCk7Zm9yKHZhciBsPS0xOysrbDxyLmxlbmd0aDspYy5wdXNoKHJbbF0pO2M9bmV3IGUoYyk7dmFyIHA9aC5tb250KGYubW9kdWx1cyk7dD1uZXcgaCh0KS50b1JlZChwKSx0PXQucmVkUG93KG5ldyBoKGYucHVibGljRXhwb25lbnQpKSx0PW5ldyBlKHQuZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIGI9MDtmb3IoZDw4JiYoYj0xKSxzPU1hdGgubWluKHQubGVuZ3RoLGMubGVuZ3RoKSx0Lmxlbmd0aCE9PWMubGVuZ3RoJiYoYj0xKSxsPS0xOysrbDxzOylifD10W2xdXmNbbF07cmV0dXJuIDA9PT1ifWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPWZbci5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKFwiLlwiKV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjdXJ2ZSBcIityLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oXCIuXCIpKTt2YXIgaT1uZXcgYyhuKSxvPXIuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhO3JldHVybiBpLnZlcmlmeShlLHQsbyl9ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49ci5kYXRhLnAsaT1yLmRhdGEucSxvPXIuZGF0YS5nLGY9ci5kYXRhLnB1Yl9rZXkscz11LnNpZ25hdHVyZS5kZWNvZGUodCxcImRlclwiKSxjPXMucyxkPXMucjthKGMsaSksYShkLGkpO3ZhciBsPWgubW9udChuKSxwPWMuaW52bShpKSxiPW8udG9SZWQobCkucmVkUG93KG5ldyBoKGUpLm11bChwKS5tb2QoaSkpLmZyb21SZWQoKS5tdWwoZi50b1JlZChsKS5yZWRQb3coZC5tdWwocCkubW9kKGkpKS5mcm9tUmVkKCkpLm1vZChuKS5tb2QoaSk7cmV0dXJuIWIuY21wKGQpfWZ1bmN0aW9uIGEodCxlKXtpZih0LmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzaWdcIik7aWYodC5jbXAoZSk+PWUpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzaWdcIil9dmFyIGY9cigyMTIpLHM9cigxOSksdT1yKDIxMyksaD1yKDE4KSxjPXMuZWM7dC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dGhpcy5jdXJ2ZVR5cGU9Zlt0XSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOnR9KSx0aGlzLmN1cnZlPW5ldyBvLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gaSh0LHIsbil7QXJyYXkuaXNBcnJheSh0KXx8KHQ9dC50b0FycmF5KCkpO3ZhciBpPW5ldyBlKHQpO2lmKG4mJmkubGVuZ3RoPG4pe3ZhciBvPW5ldyBlKG4taS5sZW5ndGgpO28uZmlsbCgwKSxpPWUuY29uY2F0KFtvLGldKX1yZXR1cm4gcj9pLnRvU3RyaW5nKHIpOml9dmFyIG89cigyMiksYT1yKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfTt2YXIgZj17c2VjcDI1NmsxOntuYW1lOlwic2VjcDI1NmsxXCIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOlwicDIyNFwiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6XCJwMjU2XCIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZTpcInAxOTJcIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOlwiZWQyNTUxOVwiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZTpcInAzODRcIixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6XCJwNTIxXCIsYnl0ZUxlbmd0aDo2Nn19O2YucDIyND1mLnNlY3AyMjRyMSxmLnAyNTY9Zi5zZWNwMjU2cjE9Zi5wcmltZTI1NnYxLGYucDE5Mj1mLnNlY3AxOTJyMT1mLnByaW1lMTkydjEsZi5wMzg0PWYuc2VjcDM4NHIxLGYucDUyMT1mLnNlY3A1MjFyMSxuLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KHQsZSl9LG4ucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24odCxyLG4pe3I9cnx8XCJ1dGY4XCIsZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxyKSk7dmFyIG89dGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKHQpLmdldFB1YmxpYygpLGE9by5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpO3JldHVybiBpKGEsbix0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sbi5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5rZXlzLmdldFB1YmxpYyhcImNvbXByZXNzZWRcIj09PWUsITApO3JldHVyblwiaHlicmlkXCI9PT1lJiYocltyLmxlbmd0aC0xXSUyP3JbMF09NzpyWzBdPTYpLGkocix0KX0sbi5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLHQpfSxuLnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24odCxyKXtyZXR1cm4gcj1yfHxcInV0ZjhcIixlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LHIpKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyh0KSx0aGlzfSxuLnByb3RvdHlwZS5zZXRQcml2YXRlS2V5PWZ1bmN0aW9uKHQscil7cj1yfHxcInV0ZjhcIixlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LHIpKTt2YXIgbj1uZXcgYSh0KTtyZXR1cm4gbj1uLnRvU3RyaW5nKDE2KSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUobiksdGhpc319KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMudHlwZT10LHRoaXMucD1uZXcgbyhlLnAsMTYpLHRoaXMucmVkPWUucHJpbWU/by5yZWQoZS5wcmltZSk6by5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBvKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgbygxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IG8oMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1lLm4mJm5ldyBvKGUubiwxNiksdGhpcy5nPWUuZyYmdGhpcy5wb2ludEZyb21KU09OKGUuZyxlLmdSZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCk7dmFyIHI9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IXJ8fHIuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gaSh0LGUpe3RoaXMuY3VydmU9dCx0aGlzLnR5cGU9ZSx0aGlzLnByZWNvbXB1dGVkPW51bGx9dmFyIG89cigzMCksYT1yKDIyKSxmPWEudXRpbHMscz1mLmdldE5BRix1PWYuZ2V0SlNGLGg9Zi5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxuLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24odCxlKXtoKHQucHJlY29tcHV0ZWQpO3ZhciByPXQuX2dldERvdWJsZXMoKSxuPXMoZSwxKSxpPSgxPDxyLnN0ZXArMSktKHIuc3RlcCUyPT09MD8yOjEpO2kvPTM7Zm9yKHZhciBvPVtdLGE9MDthPG4ubGVuZ3RoO2ErPXIuc3RlcCl7Zm9yKHZhciBmPTAsZT1hK3Iuc3RlcC0xO2U+PWE7ZS0tKWY9KGY8PDEpK25bZV07by5wdXNoKGYpfWZvcih2YXIgdT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksYz10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksZD1pO2Q+MDtkLS0pe2Zvcih2YXIgYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgZj1vW2FdO2Y9PT1kP2M9Yy5taXhlZEFkZChyLnBvaW50c1thXSk6Zj09PS1kJiYoYz1jLm1peGVkQWRkKHIucG9pbnRzW2FdLm5lZygpKSl9dT11LmFkZChjKX1yZXR1cm4gdS50b1AoKX0sbi5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24odCxlKXt2YXIgcj00LG49dC5fZ2V0TkFGUG9pbnRzKHIpO3I9bi53bmQ7Zm9yKHZhciBpPW4ucG9pbnRzLG89cyhlLHIpLGE9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGY9by5sZW5ndGgtMTtmPj0wO2YtLSl7Zm9yKHZhciBlPTA7Zj49MCYmMD09PW9bZl07Zi0tKWUrKztpZihmPj0wJiZlKyssYT1hLmRibHAoZSksZjwwKWJyZWFrO3ZhciB1PW9bZl07aCgwIT09dSksYT1cImFmZmluZVwiPT09dC50eXBlP3U+MD9hLm1peGVkQWRkKGlbdS0xPj4xXSk6YS5taXhlZEFkZChpWy11LTE+PjFdLm5lZygpKTp1PjA/YS5hZGQoaVt1LTE+PjFdKTphLmFkZChpWy11LTE+PjFdLm5lZygpKX1yZXR1cm5cImFmZmluZVwiPT09dC50eXBlP2EudG9QKCk6YX0sbi5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIG89dGhpcy5fd25hZlQxLGE9dGhpcy5fd25hZlQyLGY9dGhpcy5fd25hZlQzLGg9MCxjPTA7YzxuO2MrKyl7dmFyIGQ9ZVtjXSxsPWQuX2dldE5BRlBvaW50cyh0KTtvW2NdPWwud25kLGFbY109bC5wb2ludHN9Zm9yKHZhciBjPW4tMTtjPj0xO2MtPTIpe3ZhciBwPWMtMSxiPWM7aWYoMT09PW9bcF0mJjE9PT1vW2JdKXt2YXIgdj1bZVtwXSxudWxsLG51bGwsZVtiXV07MD09PWVbcF0ueS5jbXAoZVtiXS55KT8odlsxXT1lW3BdLmFkZChlW2JdKSx2WzJdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXS5uZWcoKSkpOjA9PT1lW3BdLnkuY21wKGVbYl0ueS5yZWROZWcoKSk/KHZbMV09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdKSx2WzJdPWVbcF0uYWRkKGVbYl0ubmVnKCkpKToodlsxXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0pLHZbMl09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdLm5lZygpKSk7dmFyIHk9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10sbT11KHJbcF0scltiXSk7aD1NYXRoLm1heChtWzBdLmxlbmd0aCxoKSxmW3BdPW5ldyBBcnJheShoKSxmW2JdPW5ldyBBcnJheShoKTtmb3IodmFyIGc9MDtnPGg7ZysrKXt2YXIgdz0wfG1bMF1bZ10sXz0wfG1bMV1bZ107ZltwXVtnXT15WzMqKHcrMSkrKF8rMSldLGZbYl1bZ109MCxhW3BdPXZ9fWVsc2UgZltwXT1zKHJbcF0sb1twXSksZltiXT1zKHJbYl0sb1tiXSksaD1NYXRoLm1heChmW3BdLmxlbmd0aCxoKSxoPU1hdGgubWF4KGZbYl0ubGVuZ3RoLGgpfWZvcih2YXIgTT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksUz10aGlzLl93bmFmVDQsYz1oO2M+PTA7Yy0tKXtmb3IodmFyIEU9MDtjPj0wOyl7Zm9yKHZhciBBPSEwLGc9MDtnPG47ZysrKVNbZ109MHxmW2ddW2NdLDAhPT1TW2ddJiYoQT0hMSk7aWYoIUEpYnJlYWs7RSsrLGMtLX1pZihjPj0wJiZFKyssTT1NLmRibHAoRSksYzwwKWJyZWFrO2Zvcih2YXIgZz0wO2c8bjtnKyspe3ZhciBkLGs9U1tnXTswIT09ayYmKGs+MD9kPWFbZ11bay0xPj4xXTprPDAmJihkPWFbZ11bLWstMT4+MV0ubmVnKCkpLE09XCJhZmZpbmVcIj09PWQudHlwZT9NLm1peGVkQWRkKGQpOk0uYWRkKGQpKX19Zm9yKHZhciBjPTA7YzxuO2MrKylhW2NdPW51bGw7cmV0dXJuIGk/TTpNLnRvUCgpfSxuLkJhc2VQb2ludD1pLGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxpLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxuLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih0LGUpe3Q9Zi50b0FycmF5KHQsZSk7dmFyIHI9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PXRbMF18fDY9PT10WzBdfHw3PT09dFswXSkmJnQubGVuZ3RoLTE9PT0yKnIpezY9PT10WzBdP2godFt0Lmxlbmd0aC0xXSUyPT09MCk6Nz09PXRbMF0mJmgodFt0Lmxlbmd0aC0xXSUyPT09MSk7dmFyIG49dGhpcy5wb2ludCh0LnNsaWNlKDEsMStyKSx0LnNsaWNlKDErciwxKzIqcikpO3JldHVybiBufWlmKCgyPT09dFswXXx8Mz09PXRbMF0pJiZ0Lmxlbmd0aC0xPT09cilyZXR1cm4gdGhpcy5wb2ludEZyb21YKHQuc2xpY2UoMSwxK3IpLDM9PT10WzBdKTt0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHBvaW50IGZvcm1hdFwiKX0saS5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lbmNvZGUodCwhMCl9LGkucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxyPXRoaXMuZ2V0WCgpLnRvQXJyYXkoXCJiZVwiLGUpO3JldHVybiB0P1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChyKTpbNF0uY29uY2F0KHIsdGhpcy5nZXRZKCkudG9BcnJheShcImJlXCIsZSkpfSxpLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZi5lbmNvZGUodGhpcy5fZW5jb2RlKGUpLHQpfSxpLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKHQpe2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIGU9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBlLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksZS5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCx0KSxlLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9ZSx0aGlzfSxpLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbih0KXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgZT10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFlJiZlLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgodC5iaXRMZW5ndGgoKSsxKS9lLnN0ZXApfSxpLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbih0LGUpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgcj1bdGhpc10sbj10aGlzLGk9MDtpPGU7aSs9dCl7Zm9yKHZhciBvPTA7bzx0O28rKyluPW4uZGJsKCk7ci5wdXNoKG4pfXJldHVybntzdGVwOnQscG9pbnRzOnJ9fSxpLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKHQpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIGU9W3RoaXNdLHI9KDE8PHQpLTEsbj0xPT09cj9udWxsOnRoaXMuZGJsKCksaT0xO2k8cjtpKyspZVtpXT1lW2ktMV0uYWRkKG4pO3JldHVybnt3bmQ6dCxwb2ludHM6ZX19LGkucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj0wO3I8dDtyKyspZT1lLmRibCgpO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy50d2lzdGVkPTEhPT0oMHx0LmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYoMHx0LmEpPT09LTEsdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLHUuY2FsbCh0aGlzLFwiZWR3YXJkc1wiLHQpLHRoaXMuYT1uZXcgZih0LmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBmKHQuYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgZih0LmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxoKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT09KDB8dC5jKX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dS5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJwcm9qZWN0aXZlXCIpLG51bGw9PT1lJiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgZihlLDE2KSx0aGlzLnk9bmV3IGYociwxNiksdGhpcy56PW4/bmV3IGYobiwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PWkmJm5ldyBmKGksMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfXZhciBvPXIoMTA0KSxhPXIoMjIpLGY9cigzMCkscz1yKDIpLHU9by5iYXNlLGg9YS51dGlscy5hc3NlcnQ7cyhuLHUpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1PbmVBP3QucmVkTmVnKCk6dGhpcy5hLnJlZE11bCh0KX0sbi5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub25lQz90OnRoaXMuYy5yZWRNdWwodCl9LG4ucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5wb2ludCh0LGUscixuKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbih0LGUpe3Q9bmV3IGYodCwxNiksdC5yZWR8fCh0PXQudG9SZWQodGhpcy5yZWQpKTt2YXIgcj10LnJlZFNxcigpLG49dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChyKSksaT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwocikpLG89bi5yZWRNdWwoaS5yZWRJbnZtKCkpLGE9by5yZWRTcXJ0KCk7aWYoMCE9PWEucmVkU3FyKCkucmVkU3ViKG8pLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7dmFyIHM9YS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oZSYmIXN8fCFlJiZzKSYmKGE9YS5yZWROZWcoKSksdGhpcy5wb2ludCh0LGEpfSxuLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKHQsZSl7dD1uZXcgZih0LDE2KSx0LnJlZHx8KHQ9dC50b1JlZCh0aGlzLnJlZCkpO3ZhciByPXQucmVkU3FyKCksbj1yLnJlZFN1Yih0aGlzLm9uZSksaT1yLnJlZE11bCh0aGlzLmQpLnJlZEFkZCh0aGlzLm9uZSksbz1uLnJlZE11bChpLnJlZEludm0oKSk7aWYoMD09PW8uY21wKHRoaXMuemVybykpe2lmKGUpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8sdCl9dmFyIGE9by5yZWRTcXJ0KCk7aWYoMCE9PWEucmVkU3FyKCkucmVkU3ViKG8pLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7cmV0dXJuIGEuaXNPZGQoKSE9PWUmJihhPWEucmVkTmVnKCkpLHRoaXMucG9pbnQoYSx0KX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuITA7dC5ub3JtYWxpemUoKTt2YXIgZT10LngucmVkU3FyKCkscj10LnkucmVkU3FyKCksbj1lLnJlZE11bCh0aGlzLmEpLnJlZEFkZChyKSxpPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKGUpLnJlZE11bChyKSkpO3JldHVybiAwPT09bi5jbXAoaSl9LHMoaSx1LkJhc2VQb2ludCksbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gaS5mcm9tSlNPTih0aGlzLHQpfSxuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbmV3IGkodGhpcyx0LGUscixuKX0saS5mcm9tSlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaSh0LGVbMF0sZVsxXSxlWzJdKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHk6IFwiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIj5cIn0saS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJjA9PT10aGlzLnkuY21wKHRoaXMueil9LGkucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLngucmVkU3FyKCksZT10aGlzLnkucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCk7cj1yLnJlZElBZGQocik7dmFyIG49dGhpcy5jdXJ2ZS5fbXVsQSh0KSxpPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKHQpLnJlZElTdWIoZSksbz1uLnJlZEFkZChlKSxhPW8ucmVkU3ViKHIpLGY9bi5yZWRTdWIoZSkscz1pLnJlZE11bChhKSx1PW8ucmVkTXVsKGYpLGg9aS5yZWRNdWwoZiksYz1hLnJlZE11bChvKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChzLHUsYyxoKX0saS5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksaT10aGlzLngucmVkU3FyKCksbz10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgYT10aGlzLmN1cnZlLl9tdWxBKGkpLGY9YS5yZWRBZGQobyk7aWYodGhpcy56T25lKXQ9bi5yZWRTdWIoaSkucmVkU3ViKG8pLnJlZE11bChmLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLGU9Zi5yZWRNdWwoYS5yZWRTdWIobykpLHI9Zi5yZWRTcXIoKS5yZWRTdWIoZikucmVkU3ViKGYpO2Vsc2V7dmFyIHM9dGhpcy56LnJlZFNxcigpLHU9Zi5yZWRTdWIocykucmVkSVN1YihzKTt0PW4ucmVkU3ViKGkpLnJlZElTdWIobykucmVkTXVsKHUpLGU9Zi5yZWRNdWwoYS5yZWRTdWIobykpLHI9Zi5yZWRNdWwodSl9fWVsc2V7dmFyIGE9aS5yZWRBZGQobykscz10aGlzLmN1cnZlLl9tdWxDKHRoaXMuYy5yZWRNdWwodGhpcy56KSkucmVkU3FyKCksdT1hLnJlZFN1YihzKS5yZWRTdWIocyk7dD10aGlzLmN1cnZlLl9tdWxDKG4ucmVkSVN1YihhKSkucmVkTXVsKHUpLGU9dGhpcy5jdXJ2ZS5fbXVsQyhhKS5yZWRNdWwoaS5yZWRJU3ViKG8pKSxyPWEucmVkTXVsKHUpfXJldHVybiB0aGlzLmN1cnZlLnBvaW50KHQsZSxyKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LGkucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bCh0LnkucmVkU3ViKHQueCkpLHI9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bCh0LnkucmVkQWRkKHQueCkpLG49dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwodC50KSxpPXRoaXMuei5yZWRNdWwodC56LnJlZEFkZCh0LnopKSxvPXIucmVkU3ViKGUpLGE9aS5yZWRTdWIobiksZj1pLnJlZEFkZChuKSxzPXIucmVkQWRkKGUpLHU9by5yZWRNdWwoYSksaD1mLnJlZE11bChzKSxjPW8ucmVkTXVsKHMpLGQ9YS5yZWRNdWwoZik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodSxoLGQsYyl9LGkucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLnoucmVkTXVsKHQueiksaT1uLnJlZFNxcigpLG89dGhpcy54LnJlZE11bCh0LngpLGE9dGhpcy55LnJlZE11bCh0LnkpLGY9dGhpcy5jdXJ2ZS5kLnJlZE11bChvKS5yZWRNdWwoYSkscz1pLnJlZFN1YihmKSx1PWkucmVkQWRkKGYpLGg9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bCh0LngucmVkQWRkKHQueSkpLnJlZElTdWIobykucmVkSVN1YihhKSxjPW4ucmVkTXVsKHMpLnJlZE11bChoKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyhlPW4ucmVkTXVsKHUpLnJlZE11bChhLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKG8pKSkscj1zLnJlZE11bCh1KSk6KGU9bi5yZWRNdWwodSkucmVkTXVsKGEucmVkU3ViKG8pKSxyPXRoaXMuY3VydmUuX211bEMocykucmVkTXVsKHUpKSx0aGlzLmN1cnZlLnBvaW50KGMsZSxyKX0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90OnQuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHRBZGQodCk6dGhpcy5fcHJvakFkZCh0KX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9oYXNEb3VibGVzKHQpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsdCk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxpLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsZV0sW3Qscl0sMiwhMSl9LGkucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsZV0sW3Qscl0sMiwhMCl9LGkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgdD10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0KSx0aGlzLnk9dGhpcy55LnJlZE11bCh0KSx0aGlzLnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bCh0KSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxpLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LGkucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0saS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHwwPT09dGhpcy5nZXRYKCkuY21wKHQuZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcCh0LmdldFkoKSl9LGkucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChlKSlyZXR1cm4hMDtmb3IodmFyIHI9dC5jbG9uZSgpLG49dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzspe2lmKHIuaWFkZCh0aGlzLmN1cnZlLm4pLHIuY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoZS5yZWRJQWRkKG4pLDA9PT10aGlzLnguY21wKGUpKXJldHVybiEwfXJldHVybiExfSxpLnByb3RvdHlwZS50b1A9aS5wcm90b3R5cGUubm9ybWFsaXplLGkucHJvdG90eXBlLm1peGVkQWRkPWkucHJvdG90eXBlLmFkZH0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cy5jYWxsKHRoaXMsXCJtb250XCIsdCksdGhpcy5hPW5ldyBhKHQuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgYSh0LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBhKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IGEoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBpKHQsZSxyKXtzLkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcInByb2plY3RpdmVcIiksbnVsbD09PWUmJm51bGw9PT1yPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgYShlLDE2KSx0aGlzLno9bmV3IGEociwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX12YXIgbz1yKDEwNCksYT1yKDMwKSxmPXIoMikscz1vLmJhc2UsdT1yKDIyKSxoPXUudXRpbHM7ZihuLHMpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9ybWFsaXplKCkueCxyPWUucmVkU3FyKCksbj1yLnJlZE11bChlKS5yZWRBZGQoci5yZWRNdWwodGhpcy5hKSkucmVkQWRkKGUpLGk9bi5yZWRTcXJ0KCk7cmV0dXJuIDA9PT1pLnJlZFNxcigpLmNtcChuKX0sZihpLHMuQmFzZVBvaW50KSxuLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnBvaW50KGgudG9BcnJheSh0LGUpLDEpfSxuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaSh0aGlzLHQsZSl9LG4ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIGkuZnJvbUpTT04odGhpcyx0KX0saS5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30saS5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KFwiYmVcIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0saS5mcm9tSlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaSh0LGVbMF0sZVsxXXx8dC5vbmUpfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIj5cIn0saS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9LGkucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciB0PXRoaXMueC5yZWRBZGQodGhpcy56KSxlPXQucmVkU3FyKCkscj10aGlzLngucmVkU3ViKHRoaXMueiksbj1yLnJlZFNxcigpLGk9ZS5yZWRTdWIobiksbz1lLnJlZE11bChuKSxhPWkucmVkTXVsKG4ucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChpKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KG8sYSl9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0saS5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMueC5yZWRBZGQodGhpcy56KSxuPXRoaXMueC5yZWRTdWIodGhpcy56KSxpPXQueC5yZWRBZGQodC56KSxvPXQueC5yZWRTdWIodC56KSxhPW8ucmVkTXVsKHIpLGY9aS5yZWRNdWwobikscz1lLnoucmVkTXVsKGEucmVkQWRkKGYpLnJlZFNxcigpKSx1PWUueC5yZWRNdWwoYS5yZWRJU3ViKGYpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChzLHUpfSxpLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2xvbmUoKSxyPXRoaXMsbj10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksaT10aGlzLG89W107MCE9PWUuY21wbigwKTtlLml1c2hybigxKSlvLnB1c2goZS5hbmRsbigxKSk7Zm9yKHZhciBhPW8ubGVuZ3RoLTE7YT49MDthLS0pMD09PW9bYV0/KHI9ci5kaWZmQWRkKG4saSksbj1uLmRibCgpKToobj1yLmRpZmZBZGQobixpKSxyPXIuZGJsKCkpO3JldHVybiBufSxpLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmVcIil9LGkucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmVcIil9LGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKHQuZ2V0WCgpKX0saS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxpLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe2guY2FsbCh0aGlzLFwic2hvcnRcIix0KSx0aGlzLmE9bmV3IHModC5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBzKHQuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20odCksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gaSh0LGUscixuKXtoLkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcImFmZmluZVwiKSxudWxsPT09ZSYmbnVsbD09PXI/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBzKGUsMTYpLHRoaXMueT1uZXcgcyhyLDE2KSxuJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIG8odCxlLHIsbil7aC5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJqYWNvYmlhblwiKSxudWxsPT09ZSYmbnVsbD09PXImJm51bGw9PT1uPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgcygwKSk6KHRoaXMueD1uZXcgcyhlLDE2KSx0aGlzLnk9bmV3IHMociwxNiksdGhpcy56PW5ldyBzKG4sMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9dmFyIGE9cigxMDQpLGY9cigyMikscz1yKDMwKSx1PXIoMiksaD1hLmJhc2UsYz1mLnV0aWxzLmFzc2VydDt1KG4saCksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbih0KXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgZSxyO2lmKHQuYmV0YSllPW5ldyBzKHQuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIG49dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7ZT1uWzBdLmNtcChuWzFdKTwwP25bMF06blsxXSxlPWUudG9SZWQodGhpcy5yZWQpfWlmKHQubGFtYmRhKXI9bmV3IHModC5sYW1iZGEsMTYpO2Vsc2V7dmFyIGk9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoaVswXSkueC5jbXAodGhpcy5nLngucmVkTXVsKGUpKT9yPWlbMF06KHI9aVsxXSxjKDA9PT10aGlzLmcubXVsKHIpLnguY21wKHRoaXMuZy54LnJlZE11bChlKSkpKX12YXIgbztyZXR1cm4gbz10LmJhc2lzP3QuYmFzaXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybnthOm5ldyBzKHQuYSwxNiksYjpuZXcgcyh0LmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhyKSx7YmV0YTplLGxhbWJkYTpyLGJhc2lzOm99fX0sbi5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbih0KXt2YXIgZT10PT09dGhpcy5wP3RoaXMucmVkOnMubW9udCh0KSxyPW5ldyBzKDIpLnRvUmVkKGUpLnJlZEludm0oKSxuPXIucmVkTmVnKCksaT1uZXcgcygzKS50b1JlZChlKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKHIpLG89bi5yZWRBZGQoaSkuZnJvbVJlZCgpLGE9bi5yZWRTdWIoaSkuZnJvbVJlZCgpO3JldHVybltvLGFdfSxuLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxvLGEsZix1LGgsYz10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLGQ9dCxsPXRoaXMubi5jbG9uZSgpLHA9bmV3IHMoMSksYj1uZXcgcygwKSx2PW5ldyBzKDApLHk9bmV3IHMoMSksbT0wOzAhPT1kLmNtcG4oMCk7KXt2YXIgZz1sLmRpdihkKTt1PWwuc3ViKGcubXVsKGQpKSxoPXYuc3ViKGcubXVsKHApKTt2YXIgdz15LnN1YihnLm11bChiKSk7aWYoIW4mJnUuY21wKGMpPDApZT1mLm5lZygpLHI9cCxuPXUubmVnKCksaT1oO2Vsc2UgaWYobiYmMj09PSsrbSlicmVhaztmPXUsbD1kLGQ9dSx2PXAscD1oLHk9YixiPXd9bz11Lm5lZygpLGE9aDt2YXIgXz1uLnNxcigpLmFkZChpLnNxcigpKSxNPW8uc3FyKCkuYWRkKGEuc3FyKCkpO3JldHVybiBNLmNtcChfKT49MCYmKG89ZSxhPXIpLG4ubmVnYXRpdmUmJihuPW4ubmVnKCksaT1pLm5lZygpKSxvLm5lZ2F0aXZlJiYobz1vLm5lZygpLGE9YS5uZWcoKSksW3thOm4sYjppfSx7YTpvLGI6YX1dfSxuLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZW5kby5iYXNpcyxyPWVbMF0sbj1lWzFdLGk9bi5iLm11bCh0KS5kaXZSb3VuZCh0aGlzLm4pLG89ci5iLm5lZygpLm11bCh0KS5kaXZSb3VuZCh0aGlzLm4pLGE9aS5tdWwoci5hKSxmPW8ubXVsKG4uYSkscz1pLm11bChyLmIpLHU9by5tdWwobi5iKSxoPXQuc3ViKGEpLnN1YihmKSxjPXMuYWRkKHUpLm5lZygpO3JldHVybntrMTpoLGsyOmN9fSxuLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKHQsZSl7dD1uZXcgcyh0LDE2KSx0LnJlZHx8KHQ9dC50b1JlZCh0aGlzLnJlZCkpO3ZhciByPXQucmVkU3FyKCkucmVkTXVsKHQpLnJlZElBZGQodC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLG49ci5yZWRTcXJ0KCk7aWYoMCE9PW4ucmVkU3FyKCkucmVkU3ViKHIpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7dmFyIGk9bi5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oZSYmIWl8fCFlJiZpKSYmKG49bi5yZWROZWcoKSksdGhpcy5wb2ludCh0LG4pfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtpZih0LmluZilyZXR1cm4hMDt2YXIgZT10Lngscj10Lnksbj10aGlzLmEucmVkTXVsKGUpLGk9ZS5yZWRTcXIoKS5yZWRNdWwoZSkucmVkSUFkZChuKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1yLnJlZFNxcigpLnJlZElTdWIoaSkuY21wbigwKX0sbi5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy5fZW5kb1duYWZUMSxpPXRoaXMuX2VuZG9XbmFmVDIsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgYT10aGlzLl9lbmRvU3BsaXQoZVtvXSksZj10W29dLHM9Zi5fZ2V0QmV0YSgpO2EuazEubmVnYXRpdmUmJihhLmsxLmluZWcoKSxmPWYubmVnKCEwKSksYS5rMi5uZWdhdGl2ZSYmKGEuazIuaW5lZygpLHM9cy5uZWcoITApKSxuWzIqb109ZixuWzIqbysxXT1zLGlbMipvXT1hLmsxLGlbMipvKzFdPWEuazJ9Zm9yKHZhciB1PXRoaXMuX3duYWZNdWxBZGQoMSxuLGksMipvLHIpLGg9MDtoPDIqbztoKyspbltoXT1udWxsLGlbaF09bnVsbDtyZXR1cm4gdX0sdShpLGguQmFzZVBvaW50KSxuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBpKHRoaXMsdCxlLHIpfSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZnJvbUpTT04odGhpcyx0LGUpfSxpLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIHQ9dGhpcy5wcmVjb21wdXRlZDtpZih0JiZ0LmJldGEpcmV0dXJuIHQuYmV0YTt2YXIgZT10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYodCl7dmFyIHI9dGhpcy5jdXJ2ZSxuPWZ1bmN0aW9uKHQpe3JldHVybiByLnBvaW50KHQueC5yZWRNdWwoci5lbmRvLmJldGEpLHQueSl9O3QuYmV0YT1lLGUucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6dC5uYWYmJnt3bmQ6dC5uYWYud25kLHBvaW50czp0Lm5hZi5wb2ludHMubWFwKG4pfSxkb3VibGVzOnQuZG91YmxlcyYme3N0ZXA6dC5kb3VibGVzLnN0ZXAscG9pbnRzOnQuZG91Ymxlcy5wb2ludHMubWFwKG4pfX19cmV0dXJuIGV9fSxpLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3JldHVybiB0LnBvaW50KGVbMF0sZVsxXSxyKX1cInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9SlNPTi5wYXJzZShlKSk7dmFyIGk9dC5wb2ludChlWzBdLGVbMV0scik7aWYoIWVbMl0pcmV0dXJuIGk7dmFyIG89ZVsyXTtyZXR1cm4gaS5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6by5kb3VibGVzJiZ7c3RlcDpvLmRvdWJsZXMuc3RlcCxwb2ludHM6W2ldLmNvbmNhdChvLmRvdWJsZXMucG9pbnRzLm1hcChuKSl9LG5hZjpvLm5hZiYme3duZDpvLm5hZi53bmQscG9pbnRzOltpXS5jb25jYXQoby5uYWYucG9pbnRzLm1hcChuKSl9fSxpfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIj5cIn0saS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaW5mKXJldHVybiB0O2lmKHQuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEodCkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcSh0KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKHQueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgZT10aGlzLnkucmVkU3ViKHQueSk7MCE9PWUuY21wbigwKSYmKGU9ZS5yZWRNdWwodGhpcy54LnJlZFN1Yih0LngpLnJlZEludm0oKSkpO3ZhciByPWUucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIodC54KSxuPWUucmVkTXVsKHRoaXMueC5yZWRTdWIocikpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChyLG4pfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgdD10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PXQuY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMuY3VydmUuYSxyPXRoaXMueC5yZWRTcXIoKSxuPXQucmVkSW52bSgpLGk9ci5yZWRBZGQocikucmVkSUFkZChyKS5yZWRJQWRkKGUpLnJlZE11bChuKSxvPWkucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLGE9aS5yZWRNdWwodGhpcy54LnJlZFN1YihvKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KG8sYSl9LGkucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0saS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bmV3IHModCwxNiksdGhpcy5faGFzRG91Ymxlcyh0KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHQpOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW3RdKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsdCl9LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49W3RoaXMsZV0saT1bdCxyXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKG4saSk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLG4saSwyKX0saS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49W3RoaXMsZV0saT1bdCxyXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKG4saSwhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLG4saSwyLCEwKX0saS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHx0aGlzLmluZj09PXQuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKHQueCkmJjA9PT10aGlzLnkuY21wKHQueSkpfSxpLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZih0JiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgcj10aGlzLnByZWNvbXB1dGVkLG49ZnVuY3Rpb24odCl7cmV0dXJuIHQubmVnKCl9O2UucHJlY29tcHV0ZWQ9e25hZjpyLm5hZiYme3duZDpyLm5hZi53bmQscG9pbnRzOnIubmFmLnBvaW50cy5tYXAobil9LGRvdWJsZXM6ci5kb3VibGVzJiZ7c3RlcDpyLmRvdWJsZXMuc3RlcCxwb2ludHM6ci5kb3VibGVzLnBvaW50cy5tYXAobil9fX1yZXR1cm4gZX0saS5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTt2YXIgdD10aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKTtyZXR1cm4gdH0sXG51KG8saC5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBvKHRoaXMsdCxlLHIpfSxvLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciB0PXRoaXMuei5yZWRJbnZtKCksZT10LnJlZFNxcigpLHI9dGhpcy54LnJlZE11bChlKSxuPXRoaXMueS5yZWRNdWwoZSkucmVkTXVsKHQpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LG8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LG8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdDtpZih0LmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgZT10LnoucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj10aGlzLngucmVkTXVsKGUpLGk9dC54LnJlZE11bChyKSxvPXRoaXMueS5yZWRNdWwoZS5yZWRNdWwodC56KSksYT10LnkucmVkTXVsKHIucmVkTXVsKHRoaXMueikpLGY9bi5yZWRTdWIoaSkscz1vLnJlZFN1YihhKTtpZigwPT09Zi5jbXBuKDApKXJldHVybiAwIT09cy5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciB1PWYucmVkU3FyKCksaD11LnJlZE11bChmKSxjPW4ucmVkTXVsKHUpLGQ9cy5yZWRTcXIoKS5yZWRJQWRkKGgpLnJlZElTdWIoYykucmVkSVN1YihjKSxsPXMucmVkTXVsKGMucmVkSVN1YihkKSkucmVkSVN1YihvLnJlZE11bChoKSkscD10aGlzLnoucmVkTXVsKHQueikucmVkTXVsKGYpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChkLGwscCl9LG8ucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0LnRvSigpO2lmKHQuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuei5yZWRTcXIoKSxyPXRoaXMueCxuPXQueC5yZWRNdWwoZSksaT10aGlzLnksbz10LnkucmVkTXVsKGUpLnJlZE11bCh0aGlzLnopLGE9ci5yZWRTdWIobiksZj1pLnJlZFN1YihvKTtpZigwPT09YS5jbXBuKDApKXJldHVybiAwIT09Zi5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBzPWEucmVkU3FyKCksdT1zLnJlZE11bChhKSxoPXIucmVkTXVsKHMpLGM9Zi5yZWRTcXIoKS5yZWRJQWRkKHUpLnJlZElTdWIoaCkucmVkSVN1YihoKSxkPWYucmVkTXVsKGgucmVkSVN1YihjKSkucmVkSVN1YihpLnJlZE11bCh1KSksbD10aGlzLnoucmVkTXVsKGEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChjLGQsbCl9LG8ucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIXQpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe2Zvcih2YXIgZT10aGlzLHI9MDtyPHQ7cisrKWU9ZS5kYmwoKTtyZXR1cm4gZX1mb3IodmFyIG49dGhpcy5jdXJ2ZS5hLGk9dGhpcy5jdXJ2ZS50aW52LG89dGhpcy54LGE9dGhpcy55LGY9dGhpcy56LHM9Zi5yZWRTcXIoKS5yZWRTcXIoKSx1PWEucmVkQWRkKGEpLHI9MDtyPHQ7cisrKXt2YXIgaD1vLnJlZFNxcigpLGM9dS5yZWRTcXIoKSxkPWMucmVkU3FyKCksbD1oLnJlZEFkZChoKS5yZWRJQWRkKGgpLnJlZElBZGQobi5yZWRNdWwocykpLHA9by5yZWRNdWwoYyksYj1sLnJlZFNxcigpLnJlZElTdWIocC5yZWRBZGQocCkpLHY9cC5yZWRJU3ViKGIpLHk9bC5yZWRNdWwodik7eT15LnJlZElBZGQoeSkucmVkSVN1YihkKTt2YXIgbT11LnJlZE11bChmKTtyKzE8dCYmKHM9cy5yZWRNdWwoZCkpLG89YixmPW0sdT15fXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChvLHUucmVkTXVsKGkpLGYpfSxvLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxvLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciB0LGUscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihvKTthPWEucmVkSUFkZChhKTt2YXIgZj1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLHM9Zi5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSksdT1vLnJlZElBZGQobyk7dT11LnJlZElBZGQodSksdT11LnJlZElBZGQodSksdD1zLGU9Zi5yZWRNdWwoYS5yZWRJU3ViKHMpKS5yZWRJU3ViKHUpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGg9dGhpcy54LnJlZFNxcigpLGM9dGhpcy55LnJlZFNxcigpLGQ9Yy5yZWRTcXIoKSxsPXRoaXMueC5yZWRBZGQoYykucmVkU3FyKCkucmVkSVN1YihoKS5yZWRJU3ViKGQpO2w9bC5yZWRJQWRkKGwpO3ZhciBwPWgucmVkQWRkKGgpLnJlZElBZGQoaCksYj1wLnJlZFNxcigpLHY9ZC5yZWRJQWRkKGQpO3Y9di5yZWRJQWRkKHYpLHY9di5yZWRJQWRkKHYpLHQ9Yi5yZWRJU3ViKGwpLnJlZElTdWIobCksZT1wLnJlZE11bChsLnJlZElTdWIodCkpLnJlZElTdWIodikscj10aGlzLnkucmVkTXVsKHRoaXMueikscj1yLnJlZElBZGQocil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHQsZSxyKX0sby5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKG8pO2E9YS5yZWRJQWRkKGEpO3ZhciBmPW4ucmVkQWRkKG4pLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLHM9Zi5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSk7dD1zO3ZhciB1PW8ucmVkSUFkZChvKTt1PXUucmVkSUFkZCh1KSx1PXUucmVkSUFkZCh1KSxlPWYucmVkTXVsKGEucmVkSVN1YihzKSkucmVkSVN1Yih1KSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBoPXRoaXMuei5yZWRTcXIoKSxjPXRoaXMueS5yZWRTcXIoKSxkPXRoaXMueC5yZWRNdWwoYyksbD10aGlzLngucmVkU3ViKGgpLnJlZE11bCh0aGlzLngucmVkQWRkKGgpKTtsPWwucmVkQWRkKGwpLnJlZElBZGQobCk7dmFyIHA9ZC5yZWRJQWRkKGQpO3A9cC5yZWRJQWRkKHApO3ZhciBiPXAucmVkQWRkKHApO3Q9bC5yZWRTcXIoKS5yZWRJU3ViKGIpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoYykucmVkSVN1YihoKTt2YXIgdj1jLnJlZFNxcigpO3Y9di5yZWRJQWRkKHYpLHY9di5yZWRJQWRkKHYpLHY9di5yZWRJQWRkKHYpLGU9bC5yZWRNdWwocC5yZWRJU3ViKHQpKS5yZWRJU3ViKHYpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0LGUscil9LG8ucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnZlLmEsZT10aGlzLngscj10aGlzLnksbj10aGlzLnosaT1uLnJlZFNxcigpLnJlZFNxcigpLG89ZS5yZWRTcXIoKSxhPXIucmVkU3FyKCksZj1vLnJlZEFkZChvKS5yZWRJQWRkKG8pLnJlZElBZGQodC5yZWRNdWwoaSkpLHM9ZS5yZWRBZGQoZSk7cz1zLnJlZElBZGQocyk7dmFyIHU9cy5yZWRNdWwoYSksaD1mLnJlZFNxcigpLnJlZElTdWIodS5yZWRBZGQodSkpLGM9dS5yZWRJU3ViKGgpLGQ9YS5yZWRTcXIoKTtkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKTt2YXIgbD1mLnJlZE11bChjKS5yZWRJU3ViKGQpLHA9ci5yZWRBZGQocikucmVkTXVsKG4pO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChoLGwscCl9LG8ucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIHQ9dGhpcy54LnJlZFNxcigpLGU9dGhpcy55LnJlZFNxcigpLHI9dGhpcy56LnJlZFNxcigpLG49ZS5yZWRTcXIoKSxpPXQucmVkQWRkKHQpLnJlZElBZGQodCksbz1pLnJlZFNxcigpLGE9dGhpcy54LnJlZEFkZChlKS5yZWRTcXIoKS5yZWRJU3ViKHQpLnJlZElTdWIobik7YT1hLnJlZElBZGQoYSksYT1hLnJlZEFkZChhKS5yZWRJQWRkKGEpLGE9YS5yZWRJU3ViKG8pO3ZhciBmPWEucmVkU3FyKCkscz1uLnJlZElBZGQobik7cz1zLnJlZElBZGQocykscz1zLnJlZElBZGQocykscz1zLnJlZElBZGQocyk7dmFyIHU9aS5yZWRJQWRkKGEpLnJlZFNxcigpLnJlZElTdWIobykucmVkSVN1YihmKS5yZWRJU3ViKHMpLGg9ZS5yZWRNdWwodSk7aD1oLnJlZElBZGQoaCksaD1oLnJlZElBZGQoaCk7dmFyIGM9dGhpcy54LnJlZE11bChmKS5yZWRJU3ViKGgpO2M9Yy5yZWRJQWRkKGMpLGM9Yy5yZWRJQWRkKGMpO3ZhciBkPXRoaXMueS5yZWRNdWwodS5yZWRNdWwocy5yZWRJU3ViKHUpKS5yZWRJU3ViKGEucmVkTXVsKGYpKSk7ZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCk7dmFyIGw9dGhpcy56LnJlZEFkZChhKS5yZWRTcXIoKS5yZWRJU3ViKHIpLnJlZElTdWIoZik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGMsZCxsKX0sby5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9bmV3IHModCxlKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe2lmKFwiYWZmaW5lXCI9PT10LnR5cGUpcmV0dXJuIHRoaXMuZXEodC50b0ooKSk7aWYodGhpcz09PXQpcmV0dXJuITA7dmFyIGU9dGhpcy56LnJlZFNxcigpLHI9dC56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKHIpLnJlZElTdWIodC54LnJlZE11bChlKSkuY21wbigwKSlyZXR1cm4hMTt2YXIgbj1lLnJlZE11bCh0aGlzLnopLGk9ci5yZWRNdWwodC56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwoaSkucmVkSVN1Yih0LnkucmVkTXVsKG4pKS5jbXBuKDApfSxvLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy56LnJlZFNxcigpLHI9dC50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKGUpO2lmKDA9PT10aGlzLnguY21wKHIpKXJldHVybiEwO2Zvcih2YXIgbj10LmNsb25lKCksaT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKGUpOzspe2lmKG4uaWFkZCh0aGlzLmN1cnZlLm4pLG4uY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoci5yZWRJQWRkKGkpLDA9PT10aGlzLnguY21wKHIpKXJldHVybiEwfXJldHVybiExfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIEpQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBKUG9pbnQgeDogXCIrdGhpcy54LnRvU3RyaW5nKDE2LDIpK1wiIHk6IFwiK3RoaXMueS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnoudG9TdHJpbmcoMTYsMikrXCI+XCJ9LG8ucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7XCJzaG9ydFwiPT09dC50eXBlP3RoaXMuY3VydmU9bmV3IGYuY3VydmUuc2hvcnQodCk6XCJlZHdhcmRzXCI9PT10LnR5cGU/dGhpcy5jdXJ2ZT1uZXcgZi5jdXJ2ZS5lZHdhcmRzKHQpOnRoaXMuY3VydmU9bmV3IGYuY3VydmUubW9udCh0KSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPXQuaGFzaCxzKHRoaXMuZy52YWxpZGF0ZSgpLFwiSW52YWxpZCBjdXJ2ZVwiKSxzKHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksXCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gT1wiKX1mdW5jdGlvbiBpKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHI9bmV3IG4oZSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnJ9KSxyfX0pfXZhciBvPWUsYT1yKDUwKSxmPXIoMjIpLHM9Zi51dGlscy5hc3NlcnQ7by5QcmVzZXRDdXJ2ZT1uLGkoXCJwMTkyXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOlwicDE5MlwiLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMVwiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMVwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyXCIsXCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMVwiXX0pLGkoXCJwMjI0XCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOlwicDIyNFwiLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMVwiLGE6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZVwiLGI6XCJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNFwiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZFwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxXCIsXCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNFwiXX0pLGkoXCJwMjU2XCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiXCIsbjpcImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTZcIixcIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1XCJdfSksaShcInAzODRcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmNcIixiOlwiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWZcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzNcIixoYXNoOmEuc2hhMzg0LGdSZWQ6ITEsZzpbXCJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiN1wiLFwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWZcIl19KSxpKFwicDUyMVwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMFwiLG46XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOVwiLGhhc2g6YS5zaGE1MTIsZ1JlZDohMSxnOltcIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2XCIsXCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MFwiXX0pLGkoXCJjdXJ2ZTI1NTE5XCIse3R5cGU6XCJtb250XCIscHJpbWU6XCJwMjU1MTlcIixwOlwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiLGE6XCI3NmQwNlwiLGI6XCIwXCIsbjpcIjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWRcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCI5XCJdfSksaShcImVkMjU1MTlcIix7dHlwZTpcImVkd2FyZHNcIixwcmltZTpcInAyNTUxOVwiLHA6XCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIsYTpcIi0xXCIsYzpcIjFcIixkOlwiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhM1wiLG46XCIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYVwiLFwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OFwiXX0pO3ZhciB1O3RyeXt1PXIoNTU3KX1jYXRjaCh0KXt1PXZvaWQgMH1pKFwic2VjcDI1NmsxXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOlwiazI1NlwiLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiLGE6XCIwXCIsYjpcIjdcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDFcIixoOlwiMVwiLGhhc2g6YS5zaGEyNTYsYmV0YTpcIjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWVcIixsYW1iZGE6XCI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyXCIsYmFzaXM6W3thOlwiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTVcIixiOlwiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzXCJ9LHthOlwiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4XCIsYjpcIjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1XCJ9XSxnUmVkOiExLGc6W1wiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OFwiLFwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOFwiLHVdfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oXCJzdHJpbmdcIj09dHlwZW9mIHQmJihmKG8uY3VydmVzLmhhc093blByb3BlcnR5KHQpLFwiVW5rbm93biBjdXJ2ZSBcIit0KSx0PW8uY3VydmVzW3RdKSx0IGluc3RhbmNlb2Ygby5jdXJ2ZXMuUHJlc2V0Q3VydmUmJih0PXtjdXJ2ZTp0fSksdGhpcy5jdXJ2ZT10LmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9dC5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKHQuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx2b2lkKHRoaXMuaGFzaD10Lmhhc2h8fHQuY3VydmUuaGFzaCkpOm5ldyBuKHQpfXZhciBpPXIoMzApLG89cigyMiksYT1vLnV0aWxzLGY9YS5hc3NlcnQscz1yKDU1MSksdT1yKDU1Mik7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHModGhpcyx0KX0sbi5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcy5mcm9tUHJpdmF0ZSh0aGlzLHQsZSl9LG4ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcy5mcm9tUHVibGljKHRoaXMsdCxlKX0sbi5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbih0KXt0fHwodD17fSk7Zm9yKHZhciBlPW5ldyBvLmhtYWNEUkJHKHtoYXNoOnRoaXMuaGFzaCxwZXJzOnQucGVycyxlbnRyb3B5OnQuZW50cm9weXx8by5yYW5kKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxyPXRoaXMubi5ieXRlTGVuZ3RoKCksbj10aGlzLm4uc3ViKG5ldyBpKDIpKTs7KXt2YXIgYT1uZXcgaShlLmdlbmVyYXRlKHIpKTtpZighKGEuY21wKG4pPjApKXJldHVybiBhLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoYSl9fSxuLnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24odCxlKXt2YXIgcj04KnQuYnl0ZUxlbmd0aCgpLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcj4wJiYodD10LnVzaHJuKHIpKSwhZSYmdC5jbXAodGhpcy5uKT49MD90LnN1Yih0aGlzLm4pOnR9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxlLHIsbil7XCJvYmplY3RcIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxufHwobj17fSksZT10aGlzLmtleUZyb21Qcml2YXRlKGUsciksdD10aGlzLl90cnVuY2F0ZVRvTihuZXcgaSh0LDE2KSk7Zm9yKHZhciBhPXRoaXMubi5ieXRlTGVuZ3RoKCksZj1lLmdldFByaXZhdGUoKS50b0FycmF5KFwiYmVcIixhKSxzPXQudG9BcnJheShcImJlXCIsYSksaD1uZXcgby5obWFjRFJCRyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpmLG5vbmNlOnMscGVyczpuLnBlcnMscGVyc0VuYzpuLnBlcnNFbmN9KSxjPXRoaXMubi5zdWIobmV3IGkoMSkpLGQ9MDshMDtkKyspe3ZhciBsPW4uaz9uLmsoZCk6bmV3IGkoaC5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYobD10aGlzLl90cnVuY2F0ZVRvTihsLCEwKSwhKGwuY21wbigxKTw9MHx8bC5jbXAoYyk+PTApKXt2YXIgcD10aGlzLmcubXVsKGwpO2lmKCFwLmlzSW5maW5pdHkoKSl7dmFyIGI9cC5nZXRYKCksdj1iLnVtb2QodGhpcy5uKTtpZigwIT09di5jbXBuKDApKXt2YXIgeT1sLmludm0odGhpcy5uKS5tdWwodi5tdWwoZS5nZXRQcml2YXRlKCkpLmlhZGQodCkpO2lmKHk9eS51bW9kKHRoaXMubiksMCE9PXkuY21wbigwKSl7dmFyIG09KHAuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PWIuY21wKHYpPzI6MCk7cmV0dXJuIG4uY2Fub25pY2FsJiZ5LmNtcCh0aGlzLm5oKT4wJiYoeT10aGlzLm4uc3ViKHkpLG1ePTEpLG5ldyB1KHtyOnYsczp5LHJlY292ZXJ5UGFyYW06bX0pfX19fX19LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUscixuKXt0PXRoaXMuX3RydW5jYXRlVG9OKG5ldyBpKHQsMTYpKSxyPXRoaXMua2V5RnJvbVB1YmxpYyhyLG4pLGU9bmV3IHUoZSxcImhleFwiKTt2YXIgbz1lLnIsYT1lLnM7aWYoby5jbXBuKDEpPDB8fG8uY21wKHRoaXMubik+PTApcmV0dXJuITE7aWYoYS5jbXBuKDEpPDB8fGEuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIGY9YS5pbnZtKHRoaXMubikscz1mLm11bCh0KS51bW9kKHRoaXMubiksaD1mLm11bChvKS51bW9kKHRoaXMubik7aWYoIXRoaXMuY3VydmUuX21heHdlbGxUcmljayl7dmFyIGM9dGhpcy5nLm11bEFkZChzLHIuZ2V0UHVibGljKCksaCk7cmV0dXJuIWMuaXNJbmZpbml0eSgpJiYwPT09Yy5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChvKX12YXIgYz10aGlzLmcuam11bEFkZChzLHIuZ2V0UHVibGljKCksaCk7cmV0dXJuIWMuaXNJbmZpbml0eSgpJiZjLmVxWFRvUChvKX0sbi5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbih0LGUscixuKXtmKCgzJnIpPT09cixcIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHNcIiksZT1uZXcgdShlLG4pO3ZhciBvPXRoaXMubixhPW5ldyBpKHQpLHM9ZS5yLGg9ZS5zLGM9MSZyLGQ9cj4+MTtpZihzLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmZCl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGVcIik7cz1kP3RoaXMuY3VydmUucG9pbnRGcm9tWChzLmFkZCh0aGlzLmN1cnZlLm4pLGMpOnRoaXMuY3VydmUucG9pbnRGcm9tWChzLGMpO3ZhciBsPWUuci5pbnZtKG8pLHA9by5zdWIoYSkubXVsKGwpLnVtb2QobyksYj1oLm11bChsKS51bW9kKG8pO3JldHVybiB0aGlzLmcubXVsQWRkKHAscyxiKX0sbi5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbih0LGUscixuKXtpZihlPW5ldyB1KGUsbiksbnVsbCE9PWUucmVjb3ZlcnlQYXJhbSlyZXR1cm4gZS5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgaT0wO2k8NDtpKyspe3ZhciBvO3RyeXtvPXRoaXMucmVjb3ZlclB1YktleSh0LGUsaSl9Y2F0Y2godCl7Y29udGludWV9aWYoby5lcShyKSlyZXR1cm4gaX10aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3JcIil9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWM9dCx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLGUucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShlLnByaXYsZS5wcml2RW5jKSxlLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKGUucHViLGUucHViRW5jKX12YXIgaT1yKDMwKTt0LmV4cG9ydHM9bixuLmZyb21QdWJsaWM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3B1YjplLHB1YkVuYzpyfSl9LG4uZnJvbVByaXZhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3ByaXY6ZSxwcml2RW5jOnJ9KX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFB1YmxpYygpO3JldHVybiB0LmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjpcIkludmFsaWQgcHVibGljIGtleVwifTp0LnZhbGlkYXRlKCk/dC5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246XCJQdWJsaWMga2V5ICogTiAhPSBPXCJ9OntyZXN1bHQ6ITEscmVhc29uOlwiUHVibGljIGtleSBpcyBub3QgYSBwb2ludFwifX0sbi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJihlPXQsdD1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksZT90aGlzLnB1Yi5lbmNvZGUoZSx0KTp0aGlzLnB1Yn0sbi5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxuLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbih0LGUpe3RoaXMucHJpdj1uZXcgaSh0LGV8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sbi5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lnh8fHQueT92b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQodC54LHQueSkpOnZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludCh0LGUpKX0sbi5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm11bCh0aGlzLnByaXYpLmdldFgoKX0sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZWMuc2lnbih0LHRoaXMsZSxyKX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KHQsZSx0aGlzKX0sbi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVyblwiPEtleSBwcml2OiBcIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpK1wiIHB1YjogXCIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpK1wiID5cIn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuP3Q6dm9pZCh0aGlzLl9pbXBvcnRERVIodCxlKXx8KGModC5yJiZ0LnMsXCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHNcIiksdGhpcy5yPW5ldyBzKHQuciwxNiksdGhpcy5zPW5ldyBzKHQucywxNiksdm9pZCAwPT09dC5yZWNvdmVyeVBhcmFtP3RoaXMucmVjb3ZlcnlQYXJhbT1udWxsOnRoaXMucmVjb3ZlcnlQYXJhbT10LnJlY292ZXJ5UGFyYW0pKX1mdW5jdGlvbiBpKCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10W2UucGxhY2UrK107aWYoISgxMjgmcikpcmV0dXJuIHI7Zm9yKHZhciBuPTE1JnIsaT0wLG89MCxhPWUucGxhY2U7bzxuO28rKyxhKyspaTw8PTgsaXw9dFthXTtyZXR1cm4gZS5wbGFjZT1hLGl9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTE7IXRbZV0mJiEoMTI4JnRbZSsxXSkmJmU8cjspZSsrO3JldHVybiAwPT09ZT90OnQuc2xpY2UoZSl9ZnVuY3Rpb24gZih0LGUpe2lmKGU8MTI4KXJldHVybiB2b2lkIHQucHVzaChlKTt2YXIgcj0xKyhNYXRoLmxvZyhlKS9NYXRoLkxOMj4+PjMpO2Zvcih0LnB1c2goMTI4fHIpOy0tcjspdC5wdXNoKGU+Pj4ocjw8MykmMjU1KTt0LnB1c2goZSl9dmFyIHM9cigzMCksdT1yKDIyKSxoPXUudXRpbHMsYz1oLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKHQsZSl7dD1oLnRvQXJyYXkodCxlKTt2YXIgcj1uZXcgaTtpZig0OCE9PXRbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgbj1vKHQscik7aWYobityLnBsYWNlIT09dC5sZW5ndGgpcmV0dXJuITE7aWYoMiE9PXRbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgYT1vKHQsciksZj10LnNsaWNlKHIucGxhY2UsYStyLnBsYWNlKTtpZihyLnBsYWNlKz1hLDIhPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIHU9byh0LHIpO2lmKHQubGVuZ3RoIT09dStyLnBsYWNlKXJldHVybiExO3ZhciBjPXQuc2xpY2Uoci5wbGFjZSx1K3IucGxhY2UpO3JldHVybiAwPT09ZlswXSYmMTI4JmZbMV0mJihmPWYuc2xpY2UoMSkpLDA9PT1jWzBdJiYxMjgmY1sxXSYmKGM9Yy5zbGljZSgxKSksdGhpcy5yPW5ldyBzKGYpLHRoaXMucz1uZXcgcyhjKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sbi5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yLnRvQXJyYXkoKSxyPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZlWzBdJiYoZT1bMF0uY29uY2F0KGUpKSwxMjgmclswXSYmKHI9WzBdLmNvbmNhdChyKSksZT1hKGUpLHI9YShyKTshKHJbMF18fDEyOCZyWzFdKTspcj1yLnNsaWNlKDEpO3ZhciBuPVsyXTtmKG4sZS5sZW5ndGgpLG49bi5jb25jYXQoZSksbi5wdXNoKDIpLGYobixyLmxlbmd0aCk7dmFyIGk9bi5jb25jYXQociksbz1bNDhdO3JldHVybiBmKG8saS5sZW5ndGgpLG89by5jb25jYXQoaSksaC5lbmNvZGUobyx0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe2lmKGYoXCJlZDI1NTE5XCI9PT10LFwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhclwiKSwhKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCk7dmFyIHQ9by5jdXJ2ZXNbdF0uY3VydmU7dGhpcy5jdXJ2ZT10LHRoaXMuZz10LmcsdGhpcy5nLnByZWNvbXB1dGUodC5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz10LnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwodC5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1pLnNoYTUxMn12YXIgaT1yKDUwKSxvPXIoMjIpLGE9by51dGlscyxmPWEuYXNzZXJ0LHM9YS5wYXJzZUJ5dGVzLHU9cig1NTQpLGg9cig1NTUpO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxlKXt0PXModCk7dmFyIHI9dGhpcy5rZXlGcm9tU2VjcmV0KGUpLG49dGhpcy5oYXNoSW50KHIubWVzc2FnZVByZWZpeCgpLHQpLGk9dGhpcy5nLm11bChuKSxvPXRoaXMuZW5jb2RlUG9pbnQoaSksYT10aGlzLmhhc2hJbnQobyxyLnB1YkJ5dGVzKCksdCkubXVsKHIucHJpdigpKSxmPW4uYWRkKGEpLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOmksUzpmLFJlbmNvZGVkOm99KX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSxyKXt0PXModCksZT10aGlzLm1ha2VTaWduYXR1cmUoZSk7dmFyIG49dGhpcy5rZXlGcm9tUHVibGljKHIpLGk9dGhpcy5oYXNoSW50KGUuUmVuY29kZWQoKSxuLnB1YkJ5dGVzKCksdCksbz10aGlzLmcubXVsKGUuUygpKSxhPWUuUigpLmFkZChuLnB1YigpLm11bChpKSk7cmV0dXJuIGEuZXEobyl9LG4ucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5oYXNoKCksZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC51cGRhdGUoYXJndW1lbnRzW2VdKTtyZXR1cm4gYS5pbnRGcm9tTEUodC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxuLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKHQpe3JldHVybiB1LmZyb21QdWJsaWModGhpcyx0KX0sbi5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbih0KXtyZXR1cm4gdS5mcm9tU2VjcmV0KHRoaXMsdCl9LG4ucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBoP3Q6bmV3IGgodGhpcyx0KX0sbi5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRZKCkudG9BcnJheShcImxlXCIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIGVbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9dC5nZXRYKCkuaXNPZGQoKT8xMjg6MCxlfSxuLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih0KXt0PWEucGFyc2VCeXRlcyh0KTt2YXIgZT10Lmxlbmd0aC0xLHI9dC5zbGljZSgwLGUpLmNvbmNhdCh0W2VdJi0xMjkpLG49MCE9PSgxMjgmdFtlXSksaT1hLmludEZyb21MRShyKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKGksbil9LG4ucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0FycmF5KFwibGVcIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sbi5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKHQpe3JldHVybiBhLmludEZyb21MRSh0KX0sbi5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5lZGRzYT10LHRoaXMuX3NlY3JldD1mKGUuc2VjcmV0KSx0LmlzUG9pbnQoZS5wdWIpP3RoaXMuX3B1Yj1lLnB1Yjp0aGlzLl9wdWJCeXRlcz1mKGUucHViKX12YXIgaT1yKDIyKSxvPWkudXRpbHMsYT1vLmFzc2VydCxmPW8ucGFyc2VCeXRlcyxzPW8uY2FjaGVkUHJvcGVydHk7bi5mcm9tUHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7cHViOmV9KX0sbi5mcm9tU2VjcmV0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7c2VjcmV0OmV9KX0sbi5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0scyhuLFwicHViQnl0ZXNcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSkscyhuLFwicHViXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxzKG4sXCJwcml2Qnl0ZXNcIixmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRkc2EsZT10aGlzLmhhc2goKSxyPXQuZW5jb2RpbmdMZW5ndGgtMSxuPWUuc2xpY2UoMCx0LmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gblswXSY9MjQ4LG5bcl0mPTEyNyxuW3JdfD02NCxufSkscyhuLFwicHJpdlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSkscyhuLFwiaGFzaFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLHMobixcIm1lc3NhZ2VQcmVmaXhcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5fc2VjcmV0LFwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnlcIiksdGhpcy5lZGRzYS5zaWduKHQsdGhpcyl9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeSh0LGUsdGhpcyl9LG4ucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzLl9zZWNyZXQsXCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5XCIpLG8uZW5jb2RlKHRoaXMuc2VjcmV0KCksdCl9LG4ucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbih0KXtyZXR1cm4gby5lbmNvZGUodGhpcy5wdWJCeXRlcygpLHQpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVkZHNhPXQsXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXUoZSkpLEFycmF5LmlzQXJyYXkoZSkmJihlPXtSOmUuc2xpY2UoMCx0LmVuY29kaW5nTGVuZ3RoKSxTOmUuc2xpY2UodC5lbmNvZGluZ0xlbmd0aCl9KSxmKGUuUiYmZS5TLFwiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTXCIpLHQuaXNQb2ludChlLlIpJiYodGhpcy5fUj1lLlIpLGUuUyBpbnN0YW5jZW9mIGkmJih0aGlzLl9TPWUuUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShlLlIpP2UuUjplLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoZS5TKT9lLlM6ZS5TZW5jb2RlZH12YXIgaT1yKDMwKSxvPXIoMjIpLGE9by51dGlscyxmPWEuYXNzZXJ0LHM9YS5jYWNoZWRQcm9wZXJ0eSx1PWEucGFyc2VCeXRlcztzKG4sXCJTXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLHMobixcIlJcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxzKG4sXCJSZW5jb2RlZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSkscyhuLFwiU2VuY29kZWRcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxuLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sbi5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYS5lbmNvZGUodGhpcy50b0J5dGVzKCksXCJoZXhcIikudG9VcHBlckNhc2UoKX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0KTt0aGlzLmhhc2g9dC5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXQucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dC5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMucmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBlPWEudG9BcnJheSh0LmVudHJvcHksdC5lbnRyb3B5RW5jKSxyPWEudG9BcnJheSh0Lm5vbmNlLHQubm9uY2VFbmMpLGk9YS50b0FycmF5KHQucGVycyx0LnBlcnNFbmMpO2YoZS5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LFwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiBcIit0aGlzLm1pbkVudHJvcHkrXCIgYml0c1wiKSx0aGlzLl9pbml0KGUscixpKX12YXIgaT1yKDUwKSxvPXIoMjIpLGE9by51dGlscyxmPWEuYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNvbmNhdChlKS5jb25jYXQocik7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgaT0wO2k8dGhpcy5WLmxlbmd0aDtpKyspdGhpcy5LW2ldPTAsdGhpcy5WW2ldPTE7dGhpcy5fdXBkYXRlKG4pLHRoaXMucmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LG4ucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO3QmJihlPWUudXBkYXRlKHQpKSx0aGlzLks9ZS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLHQmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZSh0KS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sbi5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKHQsZSxyLG4pe1wic3RyaW5nXCIhPXR5cGVvZiBlJiYobj1yLHI9ZSxlPW51bGwpLHQ9YS50b0J1ZmZlcih0LGUpLHI9YS50b0J1ZmZlcihyLG4pLGYodC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LFwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiBcIit0aGlzLm1pbkVudHJvcHkrXCIgYml0c1wiKSx0aGlzLl91cGRhdGUodC5jb25jYXQocnx8W10pKSx0aGlzLnJlc2VlZD0xfSxuLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLnJlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcihcIlJlc2VlZCBpcyByZXF1aXJlZFwiKTtcInN0cmluZ1wiIT10eXBlb2YgZSYmKG49cixyPWUsZT1udWxsKSxyJiYocj1hLnRvQXJyYXkocixuKSx0aGlzLl91cGRhdGUocikpO2Zvcih2YXIgaT1bXTtpLmxlbmd0aDx0Oyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLGk9aS5jb25jYXQodGhpcy5WKTt2YXIgbz1pLnNsaWNlKDAsdCk7cmV0dXJuIHRoaXMuX3VwZGF0ZShyKSx0aGlzLnJlc2VlZCsrLGEuZW5jb2RlKG8sZSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbW1wiZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYVwiLFwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMVwiXSxbXCI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4XCIsXCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmXCJdLFtcIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzlcIixcImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTVcIl0sW1wiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MFwiLFwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5XCJdLFtcIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGNcIixcIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzZcIl0sW1wiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYVwiLFwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZlwiXSxbXCJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhXCIsXCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5XCJdLFtcIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjBcIixcImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDlcIl0sW1wiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZFwiLFwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZFwiXSxbXCJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkXCIsXCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4XCJdLFtcImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjFcIixcIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWRcIl0sW1wiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMFwiLFwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOFwiXSxbXCI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3XCIsXCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhXCJdLFtcIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjJcIixcIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTNcIl0sW1wiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3XCIsXCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwXCJdLFtcIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmRcIixcIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTBcIl0sW1wiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4M1wiLFwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNlwiXSxbXCI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGFcIixcIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODlcIl0sW1wiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOFwiLFwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxN1wiXSxbXCJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkXCIsXCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhXCJdLFtcImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjVcIixcIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGRcIl0sW1wiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NFwiLFwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMlwiXSxbXCI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjXCIsXCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2XCJdLFtcImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjZcIixcIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmZcIl0sW1wiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOVwiLFwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMVwiXSxbXCJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxXCIsXCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzXCJdLFtcImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGJcIixcImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWZcIl0sW1wiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwM1wiLFwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlN1wiXSxbXCJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkXCIsXCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4XCJdLFtcImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzBcIixcIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTFcIl0sW1wiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNFwiLFwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwXCJdLFtcIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGFcIixcIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODJcIl0sW1wiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMVwiLFwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiY1wiXSxbXCI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllXCIsXCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiXCJdLFtcImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDFcIixcIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTFcIl0sW1wiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZlwiLFwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1XCJdLFtcImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZThcIixcImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjBcIl0sW1wiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZFwiLFwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NFwiXSxbXCI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2XCIsXCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZFwiXSxbXCI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkXCIsXCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkXCJdLFtcIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTVcIixcIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYThcIl0sW1wiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NlwiLFwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOFwiXSxbXCI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxXCIsXCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjXCJdLFtcIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhY1wiLFwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZlwiXSxbXCI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxXCIsXCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyXCJdLFtcImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2VcIixcIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDdcIl0sW1wiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MVwiLFwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlY1wiXSxbXCJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzXCIsXCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkXCJdLFtcImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGZcIixcIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTRcIl0sW1wiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOVwiLFwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZFwiXSxbXCIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlXCIsXCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwXCJdLFtcImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjlcIixcIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTFcIl0sW1wiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMlwiLFwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMVwiXSxbXCJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzXCIsXCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjXCJdLFtcIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2NcIixcImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzNcIl0sW1wiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYVwiLFwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZFwiXSxbXCJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxXCIsXCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1XCJdLFtcIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzNcIixcImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODlcIl0sW1wiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OFwiLFwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZVwiXSxbXCIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiXCIsXCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3XCJdLFtcImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjZcIixcImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMVwiXSxbXCI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhXCIsXCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyXCJdLFtcIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMFwiLFwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NVwiXSxbXCJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3XCIsXCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczXCJdLFtcImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWVcIixcImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODJcIl1dfSxuYWY6e3duZDo3LHBvaW50czpbW1wiZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOVwiLFwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MlwiXSxbXCIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0XCIsXCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2XCJdLFtcIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmNcIixcIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGFcIl0sW1wiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZVwiLFwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzN1wiXSxbXCI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiXCIsXCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiXCJdLFtcImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYThcIixcImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MVwiXSxbXCJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlXCIsXCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4XCJdLFtcImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzRcIixcIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzdcIl0sW1wiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2Y1wiLFwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YVwiXSxbXCIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1XCIsXCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjXCJdLFtcIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2ZcIixcIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2N1wiXSxbXCI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0XCIsXCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyXCJdLFtcImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjlcIixcImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTVcIl0sW1wiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYlwiLFwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MlwiXSxbXCI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0XCIsXCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyXCJdLFtcIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTVcIixcImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTZcIl0sW1wiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OVwiLFwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5XCJdLFtcIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2RcIixcIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWZcIl0sW1wiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZlwiLFwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YVwiXSxbXCI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiXCIsXCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjdcIl0sW1wiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOVwiLFwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzM1wiXSxbXCI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjNcIixcIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWFcIl0sW1wiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NFwiLFwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNlwiXSxbXCJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwXCIsXCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3XCJdLFtcIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWJcIixcIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2VcIl0sW1wiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0N1wiLFwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNlwiXSxbXCJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxXCIsXCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2XCJdLFtcIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjBcIixcIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDBcIl0sW1wiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNVwiLFwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxXCJdLFtcIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMThcIixcIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4M1wiXSxbXCJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4XCIsXCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1XCJdLFtcIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWJcIixcIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGJcIl0sW1wiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZlwiLFwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxN1wiXSxbXCI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzXCIsXCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4XCJdLFtcIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmFcIixcImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2FcIl0sW1wiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NVwiLFwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNlwiXSxbXCI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhXCIsXCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2XCJdLFtcIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2VcIixcImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmVcIl0sW1wiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOFwiLFwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZFwiXSxbXCI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjXCIsXCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyXCJdLFtcIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTlcIixcImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2VcIl0sW1wiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYlwiLFwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzN1wiXSxbXCIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhXCIsXCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExXCJdLFtcImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWZcIixcIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTRcIl0sW1wiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMFwiLFwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NVwiXSxbXCI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0XCIsXCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkXCJdLFtcIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWNcIixcImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGRcIl0sW1wiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MFwiLFwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOVwiXSxbXCJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwXCIsXCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDZcIl0sW1wiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliM1wiLFwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NFwiXSxbXCIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmXCIsXCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWVcIl0sW1wiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2M1wiLFwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMVwiXSxbXCJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4XCIsXCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiXCJdLFtcIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmZcIixcIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjFcIl0sW1wiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNVwiLFwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNlwiXSxbXCJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2XCIsXCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlXCJdLFtcIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjVcIixcIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGRcIl0sW1wiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OVwiLFwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkY1wiXSxbXCI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTFcIixcImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjRcIl0sW1wiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNVwiLFwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyY1wiXSxbXCJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1XCIsXCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiXCJdLFtcImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTdcIixcIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxM1wiXSxbXCI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxXCIsXCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTRcIl0sW1wiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNVwiLFwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NVwiXSxbXCIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2XCIsXCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjXCJdLFtcIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNlwiLFwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNFwiXSxbXCI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlXCIsXCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlXCJdLFtcIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTRcIixcIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNlwiXSxbXCI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxXCIsXCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExXCJdLFtcIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTFcIixcImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YlwiXSxbXCJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyXCIsXCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyXCJdLFtcIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNVwiLFwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzY1wiXSxbXCJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiXCIsXCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzXCJdLFtcImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDRcIixcIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGRcIl0sW1wiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZlwiLFwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMFwiXSxbXCJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OVwiLFwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNFwiXSxbXCI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2XCIsXCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2XCJdLFtcIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODRcIixcIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTRcIl0sW1wiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YVwiLFwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1N1wiXSxbXCJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwXCIsXCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzXCJdLFtcImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTdcIixcIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTZcIl0sW1wiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzXCIsXCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4XCJdLFtcImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWZcIixcIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZlwiXSxbXCIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4XCIsXCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4XCJdLFtcImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmFcIixcIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGFcIl0sW1wiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMVwiLFwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNFwiXSxbXCI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyXCIsXCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3XCJdLFtcIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWFcIixcImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjdcIl0sW1wiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNlwiLFwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZFwiXSxbXCJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2XCIsXCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhXCJdLFtcImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGVcIixcIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTRcIl0sW1wiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNFwiLFwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3N1wiXSxbXCJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhXCIsXCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3XCJdLFtcIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTlcIixcImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTBcIl0sW1wiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZlwiLFwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNVwiXSxbXCJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjXCIsXCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlXCJdLFtcIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDJcIixcImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjFcIl0sW1wiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YVwiLFwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMlwiXSxbXCJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwXCIsXCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzXCJdLFtcImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGRcIixcIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDhcIl0sW1wiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMVwiLFwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OFwiXSxbXCI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzXCIsXCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzVcIl0sW1wiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MlwiLFwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZFwiXSxbXCI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzXCIsXCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjXCJdLFtcIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDBcIixcIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMFwiXSxbXCIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4XCIsXCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjXCJdLFtcImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjdcIixcImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTRcIl0sW1wiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOFwiLFwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZlwiXSxbXCI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlXCIsXCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5XCJdLFtcIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2RcIixcImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNlwiXSxbXCI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiXCIsXCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1XCJdLFtcImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGZcIixcImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODdcIl0sW1wiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNlwiLFwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YlwiXSxbXCJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3XCIsXCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjXCJdLFtcIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGFcIixcIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2NcIl0sW1wiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyY1wiLFwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZlwiXSxbXCJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyXCIsXCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhXCJdLFtcImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmJcIixcImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDZcIl0sW1wiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NVwiLFwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZlwiXSxbXCI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3XCIsXCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzXCJdLFtcIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTlcIixcImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDhcIl0sW1wiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhM1wiLFwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOFwiXSxbXCI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3XCIsXCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzNcIl0sW1wiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NlwiLFwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjM1wiXSxbXCI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4XCIsXCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4XCJdLFtcIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjFcIixcIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzFcIl0sW1wiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MFwiLFwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOVwiXV1cbn19fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuc2xpY2UoKTtpZighdClyZXR1cm5bXTt2YXIgcj1bXTtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT0wfHRbbl07cmV0dXJuIHJ9aWYoZSl7aWYoXCJoZXhcIj09PWUpe3Q9dC5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLFwiXCIpLHQubGVuZ3RoJTIhPT0wJiYodD1cIjBcIit0KTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTIpci5wdXNoKHBhcnNlSW50KHRbbl0rdFtuKzFdLDE2KSl9fWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXQuY2hhckNvZGVBdChuKSxvPWk+PjgsYT0yNTUmaTtvP3IucHVzaChvLGEpOnIucHVzaChhKX1yZXR1cm4gcn1mdW5jdGlvbiBpKHQpe3JldHVybiAxPT09dC5sZW5ndGg/XCIwXCIrdDp0fWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVwiXCIscj0wO3I8dC5sZW5ndGg7cisrKWUrPWkodFtyXS50b1N0cmluZygxNikpO3JldHVybiBlfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9W10sbj0xPDxlKzEsaT10LmNsb25lKCk7aS5jbXBuKDEpPj0wOyl7dmFyIG87aWYoaS5pc09kZCgpKXt2YXIgYT1pLmFuZGxuKG4tMSk7bz1hPihuPj4xKS0xPyhuPj4xKS1hOmEsaS5pc3VibihvKX1lbHNlIG89MDtyLnB1c2gobyk7Zm9yKHZhciBmPTAhPT1pLmNtcG4oMCkmJjA9PT1pLmFuZGxuKG4tMSk/ZSsxOjEscz0xO3M8ZjtzKyspci5wdXNoKDApO2kuaXVzaHJuKGYpfXJldHVybiByfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1bW10sW11dO3Q9dC5jbG9uZSgpLGU9ZS5jbG9uZSgpO2Zvcih2YXIgbj0wLGk9MDt0LmNtcG4oLW4pPjB8fGUuY21wbigtaSk+MDspe3ZhciBvPXQuYW5kbG4oMykrbiYzLGE9ZS5hbmRsbigzKStpJjM7Mz09PW8mJihvPS0xKSwzPT09YSYmKGE9LTEpO3ZhciBmO2lmKDA9PT0oMSZvKSlmPTA7ZWxzZXt2YXIgcz10LmFuZGxuKDcpK24mNztmPTMhPT1zJiY1IT09c3x8MiE9PWE/bzotb31yWzBdLnB1c2goZik7dmFyIHU7aWYoMD09PSgxJmEpKXU9MDtlbHNle3ZhciBzPWUuYW5kbG4oNykraSY3O3U9MyE9PXMmJjUhPT1zfHwyIT09bz9hOi1hfXJbMV0ucHVzaCh1KSwyKm49PT1mKzEmJihuPTEtbiksMippPT09dSsxJiYoaT0xLWkpLHQuaXVzaHJuKDEpLGUuaXVzaHJuKDEpfXJldHVybiByfWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuPVwiX1wiK2U7dC5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tuXT90aGlzW25dOnRoaXNbbl09ci5jYWxsKHRoaXMpfX1mdW5jdGlvbiB1KHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P2MudG9BcnJheSh0LFwiaGV4XCIpOnR9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbmV3IGQodCxcImhleFwiLFwibGVcIil9dmFyIGM9ZSxkPXIoMzApO2MuYXNzZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX0sYy50b0FycmF5PW4sYy56ZXJvMj1pLGMudG9IZXg9byxjLmVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVyblwiaGV4XCI9PT1lP28odCk6dH0sYy5nZXROQUY9YSxjLmdldEpTRj1mLGMuY2FjaGVkUHJvcGVydHk9cyxjLnBhcnNlQnl0ZXM9dSxjLmludEZyb21MRT1ofSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLnJhbmQ9dH12YXIgaTtpZih0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGl8fChpPW5ldyBuKG51bGwpKSxpLmdlbmVyYXRlKHQpfSx0LmV4cG9ydHMuUmFuZD1uLG4ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYW5kKHQpfSxcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXdpbmRvdy5jcnlwdG8mJndpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlfTp3aW5kb3cubXNDcnlwdG8mJndpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSksZX06bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQgeWV0XCIpfTtlbHNlIHRyeXt2YXIgbz1yKDYxMCk7bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8ucmFuZG9tQnl0ZXModCl9fWNhdGNoKHQpe24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheSh0KSxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBlfX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49XCJiaWdcIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfXZhciBpPXIoNTApLG89aS51dGlscyxhPW8uYXNzZXJ0O2UuQmxvY2tIYXNoPW4sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYodD1vLnRvQXJyYXkodCxlKSx0aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZy5jb25jYXQodCk6dGhpcy5wZW5kaW5nPXQsdGhpcy5wZW5kaW5nVG90YWwrPXQubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dD10aGlzLnBlbmRpbmc7dmFyIHI9dC5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz10LnNsaWNlKHQubGVuZ3RoLXIsdC5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHQ9by5qb2luMzIodCwwLHQubGVuZ3RoLXIsdGhpcy5lbmRpYW4pO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodCxuLG4rdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLGEobnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHQpfSxuLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wZW5kaW5nVG90YWwsZT10aGlzLl9kZWx0YTgscj1lLSh0K3RoaXMucGFkTGVuZ3RoKSVlLG49bmV3IEFycmF5KHIrdGhpcy5wYWRMZW5ndGgpO25bMF09MTI4O2Zvcih2YXIgaT0xO2k8cjtpKyspbltpXT0wO2lmKHQ8PD0zLFwiYmlnXCI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBvPTg7bzx0aGlzLnBhZExlbmd0aDtvKyspbltpKytdPTA7bltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPXQ+Pj4yNCYyNTUsbltpKytdPXQ+Pj4xNiYyNTUsbltpKytdPXQ+Pj44JjI1NSxuW2krK109MjU1JnR9ZWxzZXtuW2krK109MjU1JnQsbltpKytdPXQ+Pj44JjI1NSxuW2krK109dD4+PjE2JjI1NSxuW2krK109dD4+PjI0JjI1NSxuW2krK109MCxuW2krK109MCxuW2krK109MCxuW2krK109MDtmb3IodmFyIG89ODtvPHRoaXMucGFkTGVuZ3RoO28rKyluW2krK109MH1yZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHRoaXMuSGFzaD10LHRoaXMuYmxvY2tTaXplPXQuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPXQub3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdm9pZCB0aGlzLl9pbml0KG8udG9BcnJheShlLHIpKSk6bmV3IG4odCxlLHIpfXZhciBpPXIoNTApLG89aS51dGlscyxhPW8uYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQpe3QubGVuZ3RoPnRoaXMuYmxvY2tTaXplJiYodD0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHQpLmRpZ2VzdCgpKSxhKHQubGVuZ3RoPD10aGlzLmJsb2NrU2l6ZSk7Zm9yKHZhciBlPXQubGVuZ3RoO2U8dGhpcy5ibG9ja1NpemU7ZSsrKXQucHVzaCgwKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdXj01NDt0aGlzLmlubmVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodCk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh0KX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHQsZSksdGhpc30sbi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhsLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdm9pZCh0aGlzLmVuZGlhbj1cImxpdHRsZVwiKSk6bmV3IG59ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm4gdDw9MTU/ZV5yXm46dDw9MzE/ZSZyfH5lJm46dDw9NDc/KGV8fnIpXm46dDw9NjM/ZSZufHImfm46ZV4ocnx+bil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDw9MTU/MDp0PD0zMT8xNTE4NTAwMjQ5OnQ8PTQ3PzE4NTk3NzUzOTM6dDw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4fWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQ8PTE1PzEzNTI4Mjk5MjY6dDw9MzE/MTU0ODYwMzY4NDp0PD00Nz8xODM2MDcyNjkxOnQ8PTYzPzIwNTM5OTQyMTc6MH12YXIgZj1yKDUwKSxzPWYudXRpbHMsdT1zLnJvdGwzMixoPXMuc3VtMzIsYz1zLnN1bTMyXzMsZD1zLnN1bTMyXzQsbD1mLmNvbW1vbi5CbG9ja0hhc2g7cy5pbmhlcml0cyhuLGwpLGUucmlwZW1kMTYwPW4sbi5ibG9ja1NpemU9NTEyLG4ub3V0U2l6ZT0xNjAsbi5obWFjU3RyZW5ndGg9MTkyLG4ucGFkTGVuZ3RoPTY0LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5oWzBdLG49dGhpcy5oWzFdLGY9dGhpcy5oWzJdLHM9dGhpcy5oWzNdLGw9dGhpcy5oWzRdLG09cixnPW4sdz1mLF89cyxNPWwsUz0wO1M8ODA7UysrKXt2YXIgRT1oKHUoZChyLGkoUyxuLGYscyksdFtwW1NdK2VdLG8oUykpLHZbU10pLGwpO3I9bCxsPXMscz11KGYsMTApLGY9bixuPUUsRT1oKHUoZChtLGkoNzktUyxnLHcsXyksdFtiW1NdK2VdLGEoUykpLHlbU10pLE0pLG09TSxNPV8sXz11KHcsMTApLHc9ZyxnPUV9RT1jKHRoaXMuaFsxXSxmLF8pLHRoaXMuaFsxXT1jKHRoaXMuaFsyXSxzLE0pLHRoaXMuaFsyXT1jKHRoaXMuaFszXSxsLG0pLHRoaXMuaFszXT1jKHRoaXMuaFs0XSxyLGcpLHRoaXMuaFs0XT1jKHRoaXMuaFswXSxuLHcpLHRoaXMuaFswXT1FfSxuLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P3MudG9IZXgzMih0aGlzLmgsXCJsaXR0bGVcIik6cy5zcGxpdDMyKHRoaXMuaCxcImxpdHRsZVwiKX07dmFyIHA9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sYj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSx2PVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSx5PVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KFguY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9WSx2b2lkKHRoaXMuVz1uZXcgQXJyYXkoNjQpKSk6bmV3IG59ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT8obi5jYWxsKHRoaXMpLHZvaWQodGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XSkpOm5ldyBpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG8/KFguY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1XLHZvaWQodGhpcy5XPW5ldyBBcnJheSgxNjApKSk6bmV3IG99ZnVuY3Rpb24gYSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYT8oby5jYWxsKHRoaXMpLHZvaWQodGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XSkpOm5ldyBhfWZ1bmN0aW9uIGYoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGY/KFguY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx2b2lkKHRoaXMuVz1uZXcgQXJyYXkoODApKSk6bmV3IGZ9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHQmZV5+dCZyfWZ1bmN0aW9uIHUodCxlLHIpe3JldHVybiB0JmVedCZyXmUmcn1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4gdF5lXnJ9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gUih0LDIpXlIodCwxMyleUih0LDIyKX1mdW5jdGlvbiBkKHQpe3JldHVybiBSKHQsNileUih0LDExKV5SKHQsMjUpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIFIodCw3KV5SKHQsMTgpXnQ+Pj4zfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFIodCwxNyleUih0LDE5KV50Pj4+MTB9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gMD09PXQ/cyhlLHIsbik6MT09PXR8fDM9PT10P2goZSxyLG4pOjI9PT10P3UoZSxyLG4pOnZvaWQgMH1mdW5jdGlvbiB2KHQsZSxyLG4saSxvKXt2YXIgYT10JnJefnQmaTtyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiB5KHQsZSxyLG4saSxvKXt2YXIgYT1lJm5efmUmbztyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiBtKHQsZSxyLG4saSxvKXt2YXIgYT10JnJedCZpXnImaTtyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiBnKHQsZSxyLG4saSxvKXt2YXIgYT1lJm5eZSZvXm4mbztyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9Tih0LGUsMjgpLG49TihlLHQsMiksaT1OKGUsdCw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1MKHQsZSwyOCksbj1MKGUsdCwyKSxpPUwoZSx0LDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gTSh0LGUpe3ZhciByPU4odCxlLDE0KSxuPU4odCxlLDE4KSxpPU4oZSx0LDkpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gUyh0LGUpe3ZhciByPUwodCxlLDE0KSxuPUwodCxlLDE4KSxpPUwoZSx0LDkpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gRSh0LGUpe3ZhciByPU4odCxlLDEpLG49Tih0LGUsOCksaT1VKHQsZSw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj1MKHQsZSwxKSxuPUwodCxlLDgpLGk9eih0LGUsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBrKHQsZSl7dmFyIHI9Tih0LGUsMTkpLG49TihlLHQsMjkpLGk9VSh0LGUsNiksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiB4KHQsZSl7dmFyIHI9TCh0LGUsMTkpLG49TChlLHQsMjkpLGk9eih0LGUsNiksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb312YXIgST1yKDUwKSxCPUkudXRpbHMsTz1CLmFzc2VydCxSPUIucm90cjMyLFA9Qi5yb3RsMzIsVD1CLnN1bTMyLGo9Qi5zdW0zMl80LEM9Qi5zdW0zMl81LE49Qi5yb3RyNjRfaGksTD1CLnJvdHI2NF9sbyxVPUIuc2hyNjRfaGksej1CLnNocjY0X2xvLEQ9Qi5zdW02NCxxPUIuc3VtNjRfaGksRj1CLnN1bTY0X2xvLEs9Qi5zdW02NF80X2hpLEc9Qi5zdW02NF80X2xvLFY9Qi5zdW02NF81X2hpLEg9Qi5zdW02NF81X2xvLFg9SS5jb21tb24uQmxvY2tIYXNoLFk9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sVz1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLFo9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO0IuaW5oZXJpdHMobixYKSxlLnNoYTI1Nj1uLG4uYmxvY2tTaXplPTUxMixuLm91dFNpemU9MjU2LG4uaG1hY1N0cmVuZ3RoPTE5MixuLnBhZExlbmd0aD02NCxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuVyxuPTA7bjwxNjtuKyspcltuXT10W2Urbl07Zm9yKDtuPHIubGVuZ3RoO24rKylyW25dPWoocChyW24tMl0pLHJbbi03XSxsKHJbbi0xNV0pLHJbbi0xNl0pO3ZhciBpPXRoaXMuaFswXSxvPXRoaXMuaFsxXSxhPXRoaXMuaFsyXSxmPXRoaXMuaFszXSxoPXRoaXMuaFs0XSxiPXRoaXMuaFs1XSx2PXRoaXMuaFs2XSx5PXRoaXMuaFs3XTtPKHRoaXMuay5sZW5ndGg9PT1yLmxlbmd0aCk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBtPUMoeSxkKGgpLHMoaCxiLHYpLHRoaXMua1tuXSxyW25dKSxnPVQoYyhpKSx1KGksbyxhKSk7eT12LHY9YixiPWgsaD1UKGYsbSksZj1hLGE9byxvPWksaT1UKG0sZyl9dGhpcy5oWzBdPVQodGhpcy5oWzBdLGkpLHRoaXMuaFsxXT1UKHRoaXMuaFsxXSxvKSx0aGlzLmhbMl09VCh0aGlzLmhbMl0sYSksdGhpcy5oWzNdPVQodGhpcy5oWzNdLGYpLHRoaXMuaFs0XT1UKHRoaXMuaFs0XSxoKSx0aGlzLmhbNV09VCh0aGlzLmhbNV0sYiksdGhpcy5oWzZdPVQodGhpcy5oWzZdLHYpLHRoaXMuaFs3XT1UKHRoaXMuaFs3XSx5KX0sbi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9LEIuaW5oZXJpdHMoaSxuKSxlLnNoYTIyND1pLGkuYmxvY2tTaXplPTUxMixpLm91dFNpemU9MjI0LGkuaG1hY1N0cmVuZ3RoPTE5MixpLnBhZExlbmd0aD02NCxpLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksXCJiaWdcIil9LEIuaW5oZXJpdHMobyxYKSxlLnNoYTUxMj1vLG8uYmxvY2tTaXplPTEwMjQsby5vdXRTaXplPTUxMixvLmhtYWNTdHJlbmd0aD0xOTIsby5wYWRMZW5ndGg9MTI4LG8ucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDMyO24rKylyW25dPXRbZStuXTtmb3IoO248ci5sZW5ndGg7bis9Mil7dmFyIGk9ayhyW24tNF0scltuLTNdKSxvPXgocltuLTRdLHJbbi0zXSksYT1yW24tMTRdLGY9cltuLTEzXSxzPUUocltuLTMwXSxyW24tMjldKSx1PUEocltuLTMwXSxyW24tMjldKSxoPXJbbi0zMl0sYz1yW24tMzFdO3Jbbl09SyhpLG8sYSxmLHMsdSxoLGMpLHJbbisxXT1HKGksbyxhLGYscyx1LGgsYyl9fSxvLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcHJlcGFyZUJsb2NrKHQsZSk7dmFyIHI9dGhpcy5XLG49dGhpcy5oWzBdLGk9dGhpcy5oWzFdLG89dGhpcy5oWzJdLGE9dGhpcy5oWzNdLGY9dGhpcy5oWzRdLHM9dGhpcy5oWzVdLHU9dGhpcy5oWzZdLGg9dGhpcy5oWzddLGM9dGhpcy5oWzhdLGQ9dGhpcy5oWzldLGw9dGhpcy5oWzEwXSxwPXRoaXMuaFsxMV0sYj10aGlzLmhbMTJdLEU9dGhpcy5oWzEzXSxBPXRoaXMuaFsxNF0saz10aGlzLmhbMTVdO08odGhpcy5rLmxlbmd0aD09PXIubGVuZ3RoKTtmb3IodmFyIHg9MDt4PHIubGVuZ3RoO3grPTIpe3ZhciBJPUEsQj1rLFI9TShjLGQpLFA9UyhjLGQpLFQ9dihjLGQsbCxwLGIsRSksaj15KGMsZCxsLHAsYixFKSxDPXRoaXMua1t4XSxOPXRoaXMua1t4KzFdLEw9clt4XSxVPXJbeCsxXSx6PVYoSSxCLFIsUCxULGosQyxOLEwsVSksSz1IKEksQixSLFAsVCxqLEMsTixMLFUpLEk9dyhuLGkpLEI9XyhuLGkpLFI9bShuLGksbyxhLGYscyksUD1nKG4saSxvLGEsZixzKSxHPXEoSSxCLFIsUCksWD1GKEksQixSLFApO0E9YixrPUUsYj1sLEU9cCxsPWMscD1kLGM9cSh1LGgseixLKSxkPUYoaCxoLHosSyksdT1mLGg9cyxmPW8scz1hLG89bixhPWksbj1xKHosSyxHLFgpLGk9Rih6LEssRyxYKX1EKHRoaXMuaCwwLG4saSksRCh0aGlzLmgsMixvLGEpLEQodGhpcy5oLDQsZixzKSxEKHRoaXMuaCw2LHUsaCksRCh0aGlzLmgsOCxjLGQpLEQodGhpcy5oLDEwLGwscCksRCh0aGlzLmgsMTIsYixFKSxEKHRoaXMuaCwxNCxBLGspfSxvLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmgsXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaCxcImJpZ1wiKX0sQi5pbmhlcml0cyhhLG8pLGUuc2hhMzg0PWEsYS5ibG9ja1NpemU9MTAyNCxhLm91dFNpemU9Mzg0LGEuaG1hY1N0cmVuZ3RoPTE5MixhLnBhZExlbmd0aD0xMjgsYS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksXCJiaWdcIil9LEIuaW5oZXJpdHMoZixYKSxlLnNoYTE9ZixmLmJsb2NrU2l6ZT01MTIsZi5vdXRTaXplPTE2MCxmLmhtYWNTdHJlbmd0aD04MCxmLnBhZExlbmd0aD02NCxmLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuVyxuPTA7bjwxNjtuKyspcltuXT10W2Urbl07Zm9yKDtuPHIubGVuZ3RoO24rKylyW25dPVAocltuLTNdXnJbbi04XV5yW24tMTRdXnJbbi0xNl0sMSk7Zm9yKHZhciBpPXRoaXMuaFswXSxvPXRoaXMuaFsxXSxhPXRoaXMuaFsyXSxmPXRoaXMuaFszXSxzPXRoaXMuaFs0XSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciB1PX5+KG4vMjApLGg9QyhQKGksNSksYih1LG8sYSxmKSxzLHJbbl0sWlt1XSk7cz1mLGY9YSxhPVAobywzMCksbz1pLGk9aH10aGlzLmhbMF09VCh0aGlzLmhbMF0saSksdGhpcy5oWzFdPVQodGhpcy5oWzFdLG8pLHRoaXMuaFsyXT1UKHRoaXMuaFsyXSxhKSx0aGlzLmhbM109VCh0aGlzLmhbM10sZiksdGhpcy5oWzRdPVQodGhpcy5oWzRdLHMpfSxmLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmgsXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaCxcImJpZ1wiKX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5zbGljZSgpO2lmKCF0KXJldHVybltdO3ZhciByPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KWlmKGUpe2lmKFwiaGV4XCI9PT1lKXt0PXQucmVwbGFjZSgvW15hLXowLTldKy9naSxcIlwiKSx0Lmxlbmd0aCUyIT09MCYmKHQ9XCIwXCIrdCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0yKXIucHVzaChwYXJzZUludCh0W25dK3RbbisxXSwxNikpfX1lbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10LmNoYXJDb2RlQXQobiksbz1pPj44LGE9MjU1Jmk7bz9yLnB1c2gobyxhKTpyLnB1c2goYSl9ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylyW25dPTB8dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyllKz1mKHRbcl0udG9TdHJpbmcoMTYpKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQ+Pj4yNHx0Pj4+OCY2NTI4MHx0PDw4JjE2NzExNjgwfCgyNTUmdCk8PDI0O3JldHVybiBlPj4+MH1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVwiXCIsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO1wibGl0dGxlXCI9PT1lJiYoaT1vKGkpKSxyKz1zKGkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQpe3JldHVybiAxPT09dC5sZW5ndGg/XCIwXCIrdDp0fWZ1bmN0aW9uIHModCl7cmV0dXJuIDc9PT10Lmxlbmd0aD9cIjBcIit0OjY9PT10Lmxlbmd0aD9cIjAwXCIrdDo1PT09dC5sZW5ndGg/XCIwMDBcIit0OjQ9PT10Lmxlbmd0aD9cIjAwMDBcIit0OjM9PT10Lmxlbmd0aD9cIjAwMDAwXCIrdDoyPT09dC5sZW5ndGg/XCIwMDAwMDBcIit0OjE9PT10Lmxlbmd0aD9cIjAwMDAwMDBcIit0OnR9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT1yLWU7eShpJTQ9PT0wKTtmb3IodmFyIG89bmV3IEFycmF5KGkvNCksYT0wLGY9ZTthPG8ubGVuZ3RoO2ErKyxmKz00KXt2YXIgcztzPVwiYmlnXCI9PT1uP3RbZl08PDI0fHRbZisxXTw8MTZ8dFtmKzJdPDw4fHRbZiszXTp0W2YrM108PDI0fHRbZisyXTw8MTZ8dFtmKzFdPDw4fHRbZl0sb1thXT1zPj4+MH1yZXR1cm4gb31mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSg0KnQubGVuZ3RoKSxuPTAsaT0wO248dC5sZW5ndGg7bisrLGkrPTQpe3ZhciBvPXRbbl07XCJiaWdcIj09PWU/KHJbaV09bz4+PjI0LHJbaSsxXT1vPj4+MTYmMjU1LHJbaSsyXT1vPj4+OCYyNTUscltpKzNdPTI1NSZvKToocltpKzNdPW8+Pj4yNCxyW2krMl09bz4+PjE2JjI1NSxyW2krMV09bz4+PjgmMjU1LHJbaV09MjU1Jm8pfXJldHVybiByfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD4+PmV8dDw8MzItZX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ8PGV8dD4+PjMyLWV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0K2U+Pj4wfWZ1bmN0aW9uIHAodCxlLHIpe3JldHVybiB0K2Urcj4+PjB9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gdCtlK3Irbj4+PjB9ZnVuY3Rpb24gdih0LGUscixuLGkpe3JldHVybiB0K2UrcituK2k+Pj4wfWZ1bmN0aW9uIHkodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfWZ1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk9dFtlXSxvPXRbZSsxXSxhPW4rbz4+PjAsZj0oYTxuPzE6MCkrcitpO3RbZV09Zj4+PjAsdFtlKzFdPWF9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1lK24+Pj4wLG89KGk8ZT8xOjApK3QrcjtyZXR1cm4gbz4+PjB9ZnVuY3Rpb24gdyh0LGUscixuKXt2YXIgaT1lK247cmV0dXJuIGk+Pj4wfWZ1bmN0aW9uIF8odCxlLHIsbixpLG8sYSxmKXt2YXIgcz0wLHU9ZTt1PXUrbj4+PjAscys9dTxlPzE6MCx1PXUrbz4+PjAscys9dTxvPzE6MCx1PXUrZj4+PjAscys9dTxmPzE6MDt2YXIgaD10K3IraSthK3M7cmV0dXJuIGg+Pj4wfWZ1bmN0aW9uIE0odCxlLHIsbixpLG8sYSxmKXt2YXIgcz1lK24rbytmO3JldHVybiBzPj4+MH1mdW5jdGlvbiBTKHQsZSxyLG4saSxvLGEsZixzLHUpe3ZhciBoPTAsYz1lO2M9YytuPj4+MCxoKz1jPGU/MTowLGM9YytvPj4+MCxoKz1jPG8/MTowLGM9YytmPj4+MCxoKz1jPGY/MTowLGM9Yyt1Pj4+MCxoKz1jPHU/MTowO3ZhciBkPXQrcitpK2ErcytoO3JldHVybiBkPj4+MH1mdW5jdGlvbiBFKHQsZSxyLG4saSxvLGEsZixzLHUpe3ZhciBoPWUrbitvK2YrdTtyZXR1cm4gaD4+PjB9ZnVuY3Rpb24gQSh0LGUscil7dmFyIG49ZTw8MzItcnx0Pj4+cjtyZXR1cm4gbj4+PjB9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49dDw8MzItcnxlPj4+cjtyZXR1cm4gbj4+PjB9ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIHQ+Pj5yfWZ1bmN0aW9uIEkodCxlLHIpe3ZhciBuPXQ8PDMyLXJ8ZT4+PnI7cmV0dXJuIG4+Pj4wfXZhciBCPWUsTz1yKDIpO0IudG9BcnJheT1uLEIudG9IZXg9aSxCLmh0b25sPW8sQi50b0hleDMyPWEsQi56ZXJvMj1mLEIuemVybzg9cyxCLmpvaW4zMj11LEIuc3BsaXQzMj1oLEIucm90cjMyPWMsQi5yb3RsMzI9ZCxCLnN1bTMyPWwsQi5zdW0zMl8zPXAsQi5zdW0zMl80PWIsQi5zdW0zMl81PXYsQi5hc3NlcnQ9eSxCLmluaGVyaXRzPU8sZS5zdW02ND1tLGUuc3VtNjRfaGk9ZyxlLnN1bTY0X2xvPXcsZS5zdW02NF80X2hpPV8sZS5zdW02NF80X2xvPU0sZS5zdW02NF81X2hpPVMsZS5zdW02NF81X2xvPUUsZS5yb3RyNjRfaGk9QSxlLnJvdHI2NF9sbz1rLGUuc2hyNjRfaGk9eCxlLnNocjY0X2xvPUl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHIpe2lmKGUubGVuZ3RoJW8hPT0wKXt2YXIgbj1lLmxlbmd0aCsoby1lLmxlbmd0aCVvKTtlPXQuY29uY2F0KFtlLGFdLG4pfWZvcih2YXIgaT1bXSxmPXI/ZS5yZWFkSW50MzJCRTplLnJlYWRJbnQzMkxFLHM9MDtzPGUubGVuZ3RoO3MrPW8paS5wdXNoKGYuY2FsbChlLHMpKTtyZXR1cm4gaX1mdW5jdGlvbiBuKGUscixuKXtmb3IodmFyIGk9bmV3IHQociksbz1uP2kud3JpdGVJbnQzMkJFOmkud3JpdGVJbnQzMkxFLGE9MDthPGUubGVuZ3RoO2ErKylvLmNhbGwoaSxlW2FdLDQqYSwhMCk7cmV0dXJuIGl9ZnVuY3Rpb24gaShlLGksbyxhKXt0LmlzQnVmZmVyKGUpfHwoZT1uZXcgdChlKSk7dmFyIHM9aShyKGUsYSksZS5sZW5ndGgqZik7cmV0dXJuIG4ocyxvLGEpfXZhciBvPTQsYT1uZXcgdChvKTthLmZpbGwoMCk7dmFyIGY9ODtlLmhhc2g9aX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT1cInN0cmluZ1wiPT10eXBlb2YgdCx0aGlzLmhhc2hNb2RlP3RoaXNbdF09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9dmFyIGk9cigzMSkuVHJhbnNmb3JtLG89cigyKSxhPXIoNTIpLlN0cmluZ0RlY29kZXI7dC5leHBvcnRzPW4sbyhuLGkpLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LHIsbil7XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQscikpO3ZhciBpPXRoaXMuX3VwZGF0ZSh0KTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihuJiYoaT10aGlzLl90b1N0cmluZyhpLG4pKSxpKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3ZhciBuO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh0KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHQpKX1jYXRjaCh0KXtuPXR9ZmluYWxseXtyKG4pfX0sbi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0aGlzLnB1c2godGhpcy5fZmluYWwoKSl9Y2F0Y2godCl7ZT10fWZpbmFsbHl7dChlKX19LG4ucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX2ZpbmFsKCl8fG5ldyBlKFwiXCIpO3JldHVybiB0JiYocj10aGlzLl90b1N0cmluZyhyLHQsITApKSxyfSxuLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBhKGUpLHRoaXMuX2VuY29kaW5nPWUpLHRoaXMuX2VuY29kaW5nIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzXCIpO3ZhciBuPXRoaXMuX2RlY29kZXIud3JpdGUodCk7cmV0dXJuIHImJihuKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxufX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0KXtmb3IodmFyIGU9W10scj0wLG49MDtyPHQubGVuZ3RoO3IrKyxuKz04KWVbbj4+PjVdfD10W3JdPDwyNC1uJTMyO3JldHVybiBlfWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPVtdLHI9MDtyPDMyKnQubGVuZ3RoO3IrPTgpZS5wdXNoKHRbcj4+PjVdPj4+MjQtciUzMiYyNTUpO3JldHVybiBlfWZ1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj0wO248MTY7bisrKXt2YXIgaT1yK24sYz1lW2ldO2VbaV09MTY3MTE5MzUmKGM8PDh8Yz4+PjI0KXw0Mjc4MjU1MzYwJihjPDwyNHxjPj4+OCl9dmFyIG0sZyx3LF8sTSxTLEUsQSxrLHg7Uz1tPXRbMF0sRT1nPXRbMV0sQT13PXRbMl0saz1fPXRbM10seD1NPXRbNF07dmFyIEk7Zm9yKG49MDtuPDgwO24rPTEpST1tK2VbcitkW25dXXwwLEkrPW48MTY/byhnLHcsXykrdlswXTpuPDMyP2EoZyx3LF8pK3ZbMV06bjw0OD9mKGcsdyxfKSt2WzJdOm48NjQ/cyhnLHcsXykrdlszXTp1KGcsdyxfKSt2WzRdLEl8PTAsST1oKEkscFtuXSksST1JK018MCxtPU0sTT1fLF89aCh3LDEwKSx3PWcsZz1JLEk9UytlW3IrbFtuXV18MCxJKz1uPDE2P3UoRSxBLGspK3lbMF06bjwzMj9zKEUsQSxrKSt5WzFdOm48NDg/ZihFLEEsaykreVsyXTpuPDY0P2EoRSxBLGspK3lbM106byhFLEEsaykreVs0XSxJfD0wLEk9aChJLGJbbl0pLEk9SSt4fDAsUz14LHg9ayxrPWgoQSwxMCksQT1FLEU9STtJPXRbMV0rdytrfDAsdFsxXT10WzJdK18reHwwLHRbMl09dFszXStNK1N8MCx0WzNdPXRbNF0rbStFfDAsdFs0XT10WzBdK2crQXwwLHRbMF09SX1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gdF5lXnJ9ZnVuY3Rpb24gYSh0LGUscil7cmV0dXJuIHQmZXx+dCZyfWZ1bmN0aW9uIGYodCxlLHIpe3JldHVybih0fH5lKV5yfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiB0JnJ8ZSZ+cn1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4gdF4oZXx+cil9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0PDxlfHQ+Pj4zMi1lfWZ1bmN0aW9uIGModCl7dmFyIG89WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxcInV0ZjhcIikpO3ZhciBhPXIodCksZj04KnQubGVuZ3RoLHM9OCp0Lmxlbmd0aDthW2Y+Pj41XXw9MTI4PDwyNC1mJTMyLGFbKGYrNjQ+Pj45PDw0KSsxNF09MTY3MTE5MzUmKHM8PDh8cz4+PjI0KXw0Mjc4MjU1MzYwJihzPDwyNHxzPj4+OCk7Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1Kz0xNilpKG8sYSx1KTtmb3IodT0wO3U8NTt1Kyspe3ZhciBoPW9bdV07b1t1XT0xNjcxMTkzNSYoaDw8OHxoPj4+MjQpfDQyNzgyNTUzNjAmKGg8PDI0fGg+Pj44KX12YXIgYz1uKG8pO3JldHVybiBuZXcgZShjKX0vKiogQHByZXNlcnZlXG4oYykgMjAxMiBieSBDw6lkcmljIE1lc25pbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG52YXIgZD1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxsPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLHA9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLGI9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLHY9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0seT1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTt0LmV4cG9ydHM9Y30pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgZT10LmV4cG9ydHM9ZnVuY3Rpb24odCl7dD10LnRvTG93ZXJDYXNlKCk7dmFyIHI9ZVt0XTtpZighcil0aHJvdyBuZXcgRXJyb3IodCtcIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cylcIik7cmV0dXJuIG5ldyByfTtlLnNoYT1yKDU2OSksZS5zaGExPXIoNTcwKSxlLnNoYTIyND1yKDU3MSksZS5zaGEyNTY9cigyMjcpLGUuc2hhMzg0PXIoNTcyKSxlLnNoYTUxMj1yKDIyOCl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9aCxzLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdDw8NXx0Pj4+Mjd9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDw8MzB8dD4+PjJ9ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm4gMD09PXQ/ZSZyfH5lJm46Mj09PXQ/ZSZyfGUmbnxyJm46ZV5yXm59dmFyIGY9cigyKSxzPXIoNjApLHU9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxoPW5ldyBBcnJheSg4MCk7ZihuLHMpLG4ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3cscj0wfHRoaXMuX2Esbj0wfHRoaXMuX2IsZj0wfHRoaXMuX2Mscz0wfHRoaXMuX2QsaD0wfHRoaXMuX2UsYz0wO2M8MTY7KytjKWVbY109dC5yZWFkSW50MzJCRSg0KmMpO2Zvcig7Yzw4MDsrK2MpZVtjXT1lW2MtM11eZVtjLThdXmVbYy0xNF1eZVtjLTE2XTtmb3IodmFyIGQ9MDtkPDgwOysrZCl7dmFyIGw9fn4oZC8yMCkscD1pKHIpK2EobCxuLGYscykraCtlW2RdK3VbbF18MDtoPXMscz1mLGY9byhuKSxuPXIscj1wfXRoaXMuX2E9cit0aGlzLl9hfDAsdGhpcy5fYj1uK3RoaXMuX2J8MCx0aGlzLl9jPWYrdGhpcy5fY3wwLHRoaXMuX2Q9cyt0aGlzLl9kfDAsdGhpcy5fZT1oK3RoaXMuX2V8MH0sbi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSgyMCk7cmV0dXJuIHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksdC53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSx0fSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9Yyx1LmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdDw8MXx0Pj4+MzF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDw8NXx0Pj4+Mjd9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdDw8MzB8dD4+PjJ9ZnVuY3Rpb24gZih0LGUscixuKXtyZXR1cm4gMD09PXQ/ZSZyfH5lJm46Mj09PXQ/ZSZyfGUmbnxyJm46ZV5yXm59dmFyIHM9cigyKSx1PXIoNjApLGg9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxjPW5ldyBBcnJheSg4MCk7cyhuLHUpLG4ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3cscj0wfHRoaXMuX2Esbj0wfHRoaXMuX2Iscz0wfHRoaXMuX2MsdT0wfHRoaXMuX2QsYz0wfHRoaXMuX2UsZD0wO2Q8MTY7KytkKWVbZF09dC5yZWFkSW50MzJCRSg0KmQpO2Zvcig7ZDw4MDsrK2QpZVtkXT1pKGVbZC0zXV5lW2QtOF1eZVtkLTE0XV5lW2QtMTZdKTtmb3IodmFyIGw9MDtsPDgwOysrbCl7dmFyIHA9fn4obC8yMCksYj1vKHIpK2YocCxuLHMsdSkrYytlW2xdK2hbcF18MDtjPXUsdT1zLHM9YShuKSxuPXIscj1ifXRoaXMuX2E9cit0aGlzLl9hfDAsdGhpcy5fYj1uK3RoaXMuX2J8MCx0aGlzLl9jPXMrdGhpcy5fY3wwLHRoaXMuX2Q9dSt0aGlzLl9kfDAsdGhpcy5fZT1jK3RoaXMuX2V8MH0sbi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSgyMCk7cmV0dXJuIHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksdC53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSx0fSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9ZixhLmNhbGwodGhpcyw2NCw1Nil9dmFyIGk9cigyKSxvPXIoMjI3KSxhPXIoNjApLGY9bmV3IEFycmF5KDY0KTtpKG4sbyksbi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxuLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciB0PW5ldyBlKDI4KTtyZXR1cm4gdC53cml0ZUludDMyQkUodGhpcy5fYSwwKSx0LndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksdC53cml0ZUludDMyQkUodGhpcy5fZCwxMiksdC53cml0ZUludDMyQkUodGhpcy5fZSwxNiksdC53cml0ZUludDMyQkUodGhpcy5fZiwyMCksdC53cml0ZUludDMyQkUodGhpcy5fZywyNCksdH0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmluaXQoKSx0aGlzLl93PWYsYS5jYWxsKHRoaXMsMTI4LDExMil9dmFyIGk9cigyKSxvPXIoMjI4KSxhPXIoNjApLGY9bmV3IEFycmF5KDE2MCk7aShuLG8pLG4ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxuLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3Iud3JpdGVJbnQzMkJFKHQsbiksci53cml0ZUludDMyQkUoZSxuKzQpfXZhciByPW5ldyBlKDQ4KTtyZXR1cm4gdCh0aGlzLl9haCx0aGlzLl9hbCwwKSx0KHRoaXMuX2JoLHRoaXMuX2JsLDgpLHQodGhpcy5fY2gsdGhpcy5fY2wsMTYpLHQodGhpcy5fZGgsdGhpcy5fZGwsMjQpLHQodGhpcy5fZWgsdGhpcy5fZWwsMzIpLHQodGhpcy5fZmgsdGhpcy5fZmwsNDApLHJ9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUpe3ZhciByPW5ldyB0KGFbZV0ucHJpbWUsXCJoZXhcIiksbj1uZXcgdChhW2VdLmdlbixcImhleFwiKTtyZXR1cm4gbmV3IGYocixuKX1mdW5jdGlvbiBpKGUscixuLGEpe3JldHVybiB0LmlzQnVmZmVyKHIpfHx2b2lkIDA9PT1zW3JdP2koZSxcImJpbmFyeVwiLHIsbik6KHI9cnx8XCJiaW5hcnlcIixhPWF8fFwiYmluYXJ5XCIsbj1ufHxuZXcgdChbMl0pLHQuaXNCdWZmZXIobil8fChuPW5ldyB0KG4sYSkpLFwibnVtYmVyXCI9PXR5cGVvZiBlP25ldyBmKG8oZSxuKSxuLCEwKToodC5pc0J1ZmZlcihlKXx8KGU9bmV3IHQoZSxyKSksbmV3IGYoZSxuLCEwKSkpfXZhciBvPXIoMjI5KSxhPXIoNDY4KSxmPXIoNTc0KSxzPXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07ZS5EaWZmaWVIZWxsbWFuR3JvdXA9ZS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9ZS5nZXREaWZmaWVIZWxsbWFuPW4sZS5jcmVhdGVEaWZmaWVIZWxsbWFuPWUuRGlmZmllSGVsbG1hbj1pfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscil7cmV0dXJuIHI9cnx8XCJ1dGY4XCIsZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxyKSksdGhpcy5fcHViPW5ldyBzKHQpLHRoaXN9ZnVuY3Rpb24gaSh0LHIpe3JldHVybiByPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpLHRoaXMuX3ByaXY9bmV3IHModCksdGhpc31mdW5jdGlvbiBvKHQsZSl7dmFyIHI9ZS50b1N0cmluZyhcImhleFwiKSxuPVtyLHQudG9TdHJpbmcoMTYpXS5qb2luKFwiX1wiKTtpZihuIGluIG0pcmV0dXJuIG1bbl07dmFyIGk9MDtpZih0LmlzRXZlbigpfHwhdi5zaW1wbGVTaWV2ZXx8IXYuZmVybWF0VGVzdCh0KXx8IWgudGVzdCh0KSlyZXR1cm4gaSs9MSxpKz1cIjAyXCI9PT1yfHxcIjA1XCI9PT1yPzg6NCxtW25dPWksaTtoLnRlc3QodC5zaHJuKDEpKXx8KGkrPTIpO3ZhciBvO3N3aXRjaChyKXtjYXNlXCIwMlwiOnQubW9kKGMpLmNtcChkKSYmKGkrPTgpO2JyZWFrO2Nhc2VcIjA1XCI6bz10Lm1vZChsKSxvLmNtcChwKSYmby5jbXAoYikmJihpKz04KTticmVhaztkZWZhdWx0OmkrPTR9cmV0dXJuIG1bbl09aSxpfWZ1bmN0aW9uIGEodCxlLHIpe3RoaXMuc2V0R2VuZXJhdG9yKGUpLHRoaXMuX19wcmltZT1uZXcgcyh0KSx0aGlzLl9wcmltZT1zLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj10Lmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12b2lkIDAscj8odGhpcy5zZXRQdWJsaWNLZXk9bix0aGlzLnNldFByaXZhdGVLZXk9aSk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gZih0LHIpe3ZhciBuPW5ldyBlKHQudG9BcnJheSgpKTtyZXR1cm4gcj9uLnRvU3RyaW5nKHIpOm59dmFyIHM9cigxNTApLHU9cigyMzApLGg9bmV3IHUsYz1uZXcgcygyNCksZD1uZXcgcygxMSksbD1uZXcgcygxMCkscD1uZXcgcygzKSxiPW5ldyBzKDcpLHY9cigyMjkpLHk9cig2MSk7dC5leHBvcnRzPWE7dmFyIG09e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGEucHJvdG90eXBlLFwidmVyaWZ5RXJyb3JcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPW8odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSksYS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBzKHkodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxhLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKHQpe3Q9bmV3IHModCksdD10LnRvUmVkKHRoaXMuX3ByaW1lKTt2YXIgcj10LnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksbj1uZXcgZShyLnRvQXJyYXkoKSksaT10aGlzLmdldFByaW1lKCk7aWYobi5sZW5ndGg8aS5sZW5ndGgpe3ZhciBvPW5ldyBlKGkubGVuZ3RoLW4ubGVuZ3RoKTtvLmZpbGwoMCksbj1lLmNvbmNhdChbbyxuXSl9cmV0dXJuIG59LGEucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9wdWIsdCl9LGEucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGYodGhpcy5fcHJpdix0KX0sYS5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIGYodGhpcy5fX3ByaW1lLHQpfSxhLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGYodGhpcy5fZ2VuLHQpfSxhLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24odCxyKXtyZXR1cm4gcj1yfHxcInV0ZjhcIixlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LHIpKSx0aGlzLl9fZ2VuPXQsdGhpcy5fZ2VuPW5ldyBzKHQpLHRoaXN9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5yYW5kPXR9dmFyIGk7aWYodC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpfHwoaT1uZXcgbihudWxsKSksaS5nZW5lcmF0ZSh0KX0sdC5leHBvcnRzLlJhbmQ9bixuLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFuZCh0KX0sXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyl3aW5kb3cuY3J5cHRvJiZ3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9uLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSksZX06d2luZG93Lm1zQ3J5cHRvJiZ3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiB3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGV9Om4ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkIHlldFwiKX07ZWxzZSB0cnl7dmFyIG89cig2MTEpO24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBvLnJhbmRvbUJ5dGVzKHQpfX1jYXRjaCh0KXtuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkodCkscj0wO3I8ZS5sZW5ndGg7cisrKWVbcl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gZX19fSxmdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucG93KDIsMzApLTE7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkl0ZXJhdGlvbnMgbm90IGEgbnVtYmVyXCIpO2lmKHQ8MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmFkIGl0ZXJhdGlvbnNcIik7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIktleSBsZW5ndGggbm90IGEgbnVtYmVyXCIpO2lmKGU8MHx8ZT5yfHxlIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmFkIGtleSBsZW5ndGhcIil9fSxmdW5jdGlvbih0LGUscil7ZS5wdWJsaWNFbmNyeXB0PXIoNTkzKSxlLnByaXZhdGVEZWNyeXB0PXIoNTkyKSxlLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uKHQscil7cmV0dXJuIGUucHVibGljRW5jcnlwdCh0LHIsITApfSxlLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wcml2YXRlRGVjcnlwdCh0LHIsITApfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTA2KSxpPW4uZGVmaW5lKFwiUlNBUHJpdmF0ZUtleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwibW9kdWx1c1wiKS5pbnQoKSx0aGlzLmtleShcInB1YmxpY0V4cG9uZW50XCIpLmludCgpLHRoaXMua2V5KFwicHJpdmF0ZUV4cG9uZW50XCIpLmludCgpLHRoaXMua2V5KFwicHJpbWUxXCIpLmludCgpLHRoaXMua2V5KFwicHJpbWUyXCIpLmludCgpLHRoaXMua2V5KFwiZXhwb25lbnQxXCIpLmludCgpLHRoaXMua2V5KFwiZXhwb25lbnQyXCIpLmludCgpLHRoaXMua2V5KFwiY29lZmZpY2llbnRcIikuaW50KCkpfSk7ZS5SU0FQcml2YXRlS2V5PWk7dmFyIG89bi5kZWZpbmUoXCJSU0FQdWJsaWNLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwibW9kdWx1c1wiKS5pbnQoKSx0aGlzLmtleShcInB1YmxpY0V4cG9uZW50XCIpLmludCgpKX0pO2UuUlNBUHVibGljS2V5PW87dmFyIGE9bi5kZWZpbmUoXCJTdWJqZWN0UHVibGljS2V5SW5mb1wiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikudXNlKGYpLHRoaXMua2V5KFwic3ViamVjdFB1YmxpY0tleVwiKS5iaXRzdHIoKSl9KTtlLlB1YmxpY0tleT1hO3ZhciBmPW4uZGVmaW5lKFwiQWxnb3JpdGhtSWRlbnRpZmllclwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikub2JqaWQoKSx0aGlzLmtleShcIm5vbmVcIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KFwiY3VydmVcIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5KFwicGFyYW1zXCIpLnNlcSgpLm9iaih0aGlzLmtleShcInBcIikuaW50KCksdGhpcy5rZXkoXCJxXCIpLmludCgpLHRoaXMua2V5KFwiZ1wiKS5pbnQoKSkub3B0aW9uYWwoKSl9KSxzPW4uZGVmaW5lKFwiUHJpdmF0ZUtleUluZm9cIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcImFsZ29yaXRobVwiKS51c2UoZiksdGhpcy5rZXkoXCJzdWJqZWN0UHJpdmF0ZUtleVwiKS5vY3RzdHIoKSl9KTtlLlByaXZhdGVLZXk9czt2YXIgdT1uLmRlZmluZShcIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJpZFwiKS5vYmppZCgpLHRoaXMua2V5KFwiZGVjcnlwdFwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJrZGVcIikuc2VxKCkub2JqKHRoaXMua2V5KFwiaWRcIikub2JqaWQoKSx0aGlzLmtleShcImtkZXBhcmFtc1wiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJzYWx0XCIpLm9jdHN0cigpLHRoaXMua2V5KFwiaXRlcnNcIikuaW50KCkpKSx0aGlzLmtleShcImNpcGhlclwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvXCIpLm9iamlkKCksdGhpcy5rZXkoXCJpdlwiKS5vY3RzdHIoKSkpKSx0aGlzLmtleShcInN1YmplY3RQcml2YXRlS2V5XCIpLm9jdHN0cigpKX0pO2UuRW5jcnlwdGVkUHJpdmF0ZUtleT11O3ZhciBoPW4uZGVmaW5lKFwiRFNBUHJpdmF0ZUtleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwicFwiKS5pbnQoKSx0aGlzLmtleShcInFcIikuaW50KCksdGhpcy5rZXkoXCJnXCIpLmludCgpLHRoaXMua2V5KFwicHViX2tleVwiKS5pbnQoKSx0aGlzLmtleShcInByaXZfa2V5XCIpLmludCgpKX0pO2UuRFNBUHJpdmF0ZUtleT1oLGUuRFNBcGFyYW09bi5kZWZpbmUoXCJEU0FwYXJhbVwiLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBjPW4uZGVmaW5lKFwiRUNQcml2YXRlS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJwcml2YXRlS2V5XCIpLm9jdHN0cigpLHRoaXMua2V5KFwicGFyYW1ldGVyc1wiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZShkKSx0aGlzLmtleShcInB1YmxpY0tleVwiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO2UuRUNQcml2YXRlS2V5PWM7dmFyIGQ9bi5kZWZpbmUoXCJFQ1BhcmFtZXRlcnNcIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSk7ZS5zaWduYXR1cmU9bi5kZWZpbmUoXCJzaWduYXR1cmVcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiclwiKS5pbnQoKSx0aGlzLmtleShcInNcIikuaW50KCkpfSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7dmFyIG49L1Byb2MtVHlwZTogNCxFTkNSWVBURURcXHI/XFxuREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVxccj9cXG5cXHI/XFxuKFswLTlBLXpcXG5cXHJcXCtcXC9cXD1dKylcXHI/XFxuL20saT0vXi0tLS0tQkVHSU4gKC4qKSBLRVktLS0tLVxccj9cXG4vbSxvPS9eLS0tLS1CRUdJTiAoLiopIEtFWS0tLS0tXFxyP1xcbihbMC05QS16XFxuXFxyXFwrXFwvXFw9XSspXFxyP1xcbi0tLS0tRU5EIFxcMSBLRVktLS0tLSQvbSxhPXIoMTUzKSxmPXIoMjM5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXt2YXIgcyx1PXQudG9TdHJpbmcoKSxoPXUubWF0Y2gobik7aWYoaCl7dmFyIGM9XCJhZXNcIitoWzFdLGQ9bmV3IGUoaFsyXSxcImhleFwiKSxsPW5ldyBlKGhbM10ucmVwbGFjZSgvXFxyP1xcbi9nLFwiXCIpLFwiYmFzZTY0XCIpLHA9YShyLGQuc2xpY2UoMCw4KSxwYXJzZUludChoWzFdLDEwKSkua2V5LGI9W10sdj1mLmNyZWF0ZURlY2lwaGVyaXYoYyxwLGQpO2IucHVzaCh2LnVwZGF0ZShsKSksYi5wdXNoKHYuZmluYWwoKSkscz1lLmNvbmNhdChiKX1lbHNle3ZhciB5PXUubWF0Y2gobyk7cz1uZXcgZSh5WzJdLnJlcGxhY2UoL1xccj9cXG4vZyxcIlwiKSxcImJhc2U2NFwiKX12YXIgbT11Lm1hdGNoKGkpWzFdK1wiIEtFWVwiO3JldHVybnt0YWc6bSxkYXRhOnN9fX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5ib2R5PWUsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fXZhciBpPXIoMTA2KSxvPXIoMiksYT1lO2EuZGVmaW5lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBuKHQsZSl9LG4ucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT1yKDI1MSkucnVuSW5UaGlzQ29udGV4dChcIihmdW5jdGlvbiBcIit0aGlzLm5hbWUrXCIoZW50aXR5KSB7XFxuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcXG59KVwiKX1jYXRjaCh0KXtlPWZ1bmN0aW9uKHQpe3RoaXMuX2luaXROYW1lZCh0KX19cmV0dXJuIG8oZSx0KSxlLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLGUpfSxuZXcgZSh0aGlzKX0sbi5wcm90b3R5cGUuX2dldERlY29kZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dHx8XCJkZXJcIix0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5kZWNvZGVyc1t0XT10aGlzLl9jcmVhdGVOYW1lZChpLmRlY29kZXJzW3RdKSksdGhpcy5kZWNvZGVyc1t0XX0sbi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihlKS5kZWNvZGUodCxyKX0sbi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dHx8XCJkZXJcIix0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5lbmNvZGVyc1t0XT10aGlzLl9jcmVhdGVOYW1lZChpLmVuY29kZXJzW3RdKSksdGhpcy5lbmNvZGVyc1t0XX0sbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihlKS5lbmNvZGUodCxyKX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9e307dGhpcy5fYmFzZVN0YXRlPXIsci5lbmM9dCxyLnBhcmVudD1lfHxudWxsLHIuY2hpbGRyZW49bnVsbCxyLnRhZz1udWxsLHIuYXJncz1udWxsLHIucmV2ZXJzZUFyZ3M9bnVsbCxyLmNob2ljZT1udWxsLHIub3B0aW9uYWw9ITEsci5hbnk9ITEsci5vYmo9ITEsci51c2U9bnVsbCxyLnVzZURlY29kZXI9bnVsbCxyLmtleT1udWxsLHIuZGVmYXVsdD1udWxsLHIuZXhwbGljaXQ9bnVsbCxyLmltcGxpY2l0PW51bGwsci5jb250YWlucz1udWxsLHIucGFyZW50fHwoci5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfXZhciBpPXIoNzEpLlJlcG9ydGVyLG89cig3MSkuRW5jb2RlckJ1ZmZlcixhPXIoNzEpLkRlY29kZXJCdWZmZXIsZj1yKDU4OCkscz1bXCJzZXFcIixcInNlcW9mXCIsXCJzZXRcIixcInNldG9mXCIsXCJvYmppZFwiLFwiYm9vbFwiLFwiZ2VudGltZVwiLFwidXRjdGltZVwiLFwibnVsbF9cIixcImVudW1cIixcImludFwiLFwiYml0c3RyXCIsXCJibXBzdHJcIixcImNoYXJzdHJcIixcImdlbnN0clwiLFwiZ3JhcGhzdHJcIixcImlhNXN0clwiLFwiaXNvNjQ2c3RyXCIsXCJudW1zdHJcIixcIm9jdHN0clwiLFwicHJpbnRzdHJcIixcInQ2MXN0clwiLFwidW5pc3RyXCIsXCJ1dGY4c3RyXCIsXCJ2aWRlb3N0clwiXSx1PVtcImtleVwiLFwib2JqXCIsXCJ1c2VcIixcIm9wdGlvbmFsXCIsXCJleHBsaWNpdFwiLFwiaW1wbGljaXRcIixcImRlZlwiLFwiY2hvaWNlXCIsXCJhbnlcIixcImNvbnRhaW5zXCJdLmNvbmNhdChzKSxoPVtcIl9wZWVrVGFnXCIsXCJfZGVjb2RlVGFnXCIsXCJfdXNlXCIsXCJfZGVjb2RlU3RyXCIsXCJfZGVjb2RlT2JqaWRcIixcIl9kZWNvZGVUaW1lXCIsXCJfZGVjb2RlTnVsbFwiLFwiX2RlY29kZUludFwiLFwiX2RlY29kZUJvb2xcIixcIl9kZWNvZGVMaXN0XCIsXCJfZW5jb2RlQ29tcG9zaXRlXCIsXCJfZW5jb2RlU3RyXCIsXCJfZW5jb2RlT2JqaWRcIixcIl9lbmNvZGVUaW1lXCIsXCJfZW5jb2RlTnVsbFwiLFwiX2VuY29kZUludFwiLFwiX2VuY29kZUJvb2xcIl07dC5leHBvcnRzPW47dmFyIGM9W1wiZW5jXCIsXCJwYXJlbnRcIixcImNoaWxkcmVuXCIsXCJ0YWdcIixcImFyZ3NcIixcInJldmVyc2VBcmdzXCIsXCJjaG9pY2VcIixcIm9wdGlvbmFsXCIsXCJhbnlcIixcIm9ialwiLFwidXNlXCIsXCJhbHRlcmVkVXNlXCIsXCJrZXlcIixcImRlZmF1bHRcIixcImV4cGxpY2l0XCIsXCJpbXBsaWNpdFwiLFwiY29udGFpbnNcIl07bi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGUsZT17fTtjLmZvckVhY2goZnVuY3Rpb24ocil7ZVtyXT10W3JdfSk7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IoZS5wYXJlbnQpO3JldHVybiByLl9iYXNlU3RhdGU9ZSxyfSxuLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTt1LmZvckVhY2goZnVuY3Rpb24oZSl7dGhpc1tlXT1mdW5jdGlvbigpe3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiB0LmNoaWxkcmVuLnB1c2gocikscltlXS5hcHBseShyLGFyZ3VtZW50cyl9fSx0aGlzKX0sbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO2YobnVsbD09PWUucGFyZW50KSx0LmNhbGwodGhpcyksZS5jaGlsZHJlbj1lLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLGYuZXF1YWwoZS5jaGlsZHJlbi5sZW5ndGgsMSxcIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZFwiKX0sbi5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlLHI9dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTt0PXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09ci5sZW5ndGgmJihmKG51bGw9PT1lLmNoaWxkcmVuKSxlLmNoaWxkcmVuPXIsci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAhPT10Lmxlbmd0aCYmKGYobnVsbD09PWUuYXJncyksZS5hcmdzPXQsZS5yZXZlcnNlQXJncz10Lm1hcChmdW5jdGlvbih0KXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8dC5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gdDt2YXIgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtyPT0oMHxyKSYmKHJ8PTApO3ZhciBuPXRbcl07ZVtuXT1yfSksZX0pKX0saC5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3Rocm93IG5ldyBFcnJvcih0K1wiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6IFwiK2UuZW5jKX19KSxzLmZvckVhY2goZnVuY3Rpb24odCl7bi5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9iYXNlU3RhdGUscj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBmKG51bGw9PT1lLnRhZyksZS50YWc9dCx0aGlzLl91c2VBcmdzKHIpLHRoaXN9fSksbi5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS51c2UpLGUudXNlPXQsdGhpc30sbi5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHQub3B0aW9uYWw9ITAsdGhpc30sbi5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5kZWZhdWx0KSxlLmRlZmF1bHQ9dCxlLm9wdGlvbmFsPSEwLHRoaXN9LG4ucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5leHBsaWNpdCYmbnVsbD09PWUuaW1wbGljaXQpLGUuZXhwbGljaXQ9dCx0aGlzfSxuLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuZXhwbGljaXQmJm51bGw9PT1lLmltcGxpY2l0KSxlLmltcGxpY2l0PXQsdGhpc30sbi5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gdC5vYmo9ITAsMCE9PWUubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKGUpLHRoaXN9LG4ucHJvdG90eXBlLmtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUua2V5KSxlLmtleT10LHRoaXN9LG4ucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdC5hbnk9ITAsdGhpc30sbi5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5jaG9pY2UpLGUuY2hvaWNlPXQsdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSksdGhpc30sbi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLnVzZSksZS5jb250YWlucz10LHRoaXN9LG4ucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PXIucGFyZW50KXJldHVybiB0LndyYXBSZXN1bHQoci5jaGlsZHJlblswXS5fZGVjb2RlKHQsZSkpO3ZhciBuPXIuZGVmYXVsdCxpPSEwLG89bnVsbDtpZihudWxsIT09ci5rZXkmJihvPXQuZW50ZXJLZXkoci5rZXkpKSxyLm9wdGlvbmFsKXt2YXIgZj1udWxsO2lmKG51bGwhPT1yLmV4cGxpY2l0P2Y9ci5leHBsaWNpdDpudWxsIT09ci5pbXBsaWNpdD9mPXIuaW1wbGljaXQ6bnVsbCE9PXIudGFnJiYoZj1yLnRhZyksbnVsbCE9PWZ8fHIuYW55KXtpZihpPXRoaXMuX3BlZWtUYWcodCxmLHIuYW55KSx0LmlzRXJyb3IoaSkpcmV0dXJuIGl9ZWxzZXt2YXIgcz10LnNhdmUoKTt0cnl7bnVsbD09PXIuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoci50YWcsdCxlKTp0aGlzLl9kZWNvZGVDaG9pY2UodCxlKSxpPSEwfWNhdGNoKHQpe2k9ITF9dC5yZXN0b3JlKHMpfX12YXIgdTtpZihyLm9iaiYmaSYmKHU9dC5lbnRlck9iamVjdCgpKSxpKXtpZihudWxsIT09ci5leHBsaWNpdCl7dmFyIGg9dGhpcy5fZGVjb2RlVGFnKHQsci5leHBsaWNpdCk7aWYodC5pc0Vycm9yKGgpKXJldHVybiBoO3Q9aH12YXIgYz10Lm9mZnNldDtpZihudWxsPT09ci51c2UmJm51bGw9PT1yLmNob2ljZSl7aWYoci5hbnkpdmFyIHM9dC5zYXZlKCk7dmFyIGQ9dGhpcy5fZGVjb2RlVGFnKHQsbnVsbCE9PXIuaW1wbGljaXQ/ci5pbXBsaWNpdDpyLnRhZyxyLmFueSk7aWYodC5pc0Vycm9yKGQpKXJldHVybiBkO3IuYW55P249dC5yYXcocyk6dD1kfWlmKGUmJmUudHJhY2smJm51bGwhPT1yLnRhZyYmZS50cmFjayh0LnBhdGgoKSxjLHQubGVuZ3RoLFwidGFnZ2VkXCIpLGUmJmUudHJhY2smJm51bGwhPT1yLnRhZyYmZS50cmFjayh0LnBhdGgoKSx0Lm9mZnNldCx0Lmxlbmd0aCxcImNvbnRlbnRcIiksbj1yLmFueT9uOm51bGw9PT1yLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHIudGFnLHQsZSk6dGhpcy5fZGVjb2RlQ2hvaWNlKHQsZSksdC5pc0Vycm9yKG4pKXJldHVybiBuO2lmKHIuYW55fHxudWxsIT09ci5jaG9pY2V8fG51bGw9PT1yLmNoaWxkcmVufHxyLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24ocil7ci5fZGVjb2RlKHQsZSl9KSxyLmNvbnRhaW5zJiYoXCJvY3RzdHJcIj09PXIudGFnfHxcImJpdHN0clwiPT09ci50YWcpKXt2YXIgbD1uZXcgYShuKTtuPXRoaXMuX2dldFVzZShyLmNvbnRhaW5zLHQuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGwsZSl9fXJldHVybiByLm9iaiYmaSYmKG49dC5sZWF2ZU9iamVjdCh1KSksbnVsbD09PXIua2V5fHxudWxsPT09biYmaSE9PSEwP251bGwhPT1vJiZ0LmV4aXRLZXkobyk6dC5sZWF2ZUtleShvLHIua2V5LG4pLG59LG4ucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuXCJzZXFcIj09PXR8fFwic2V0XCI9PT10P251bGw6XCJzZXFvZlwiPT09dHx8XCJzZXRvZlwiPT09dD90aGlzLl9kZWNvZGVMaXN0KGUsdCxuLmFyZ3NbMF0scik6L3N0ciQvLnRlc3QodCk/dGhpcy5fZGVjb2RlU3RyKGUsdCxyKTpcIm9iamlkXCI9PT10JiZuLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoZSxuLmFyZ3NbMF0sbi5hcmdzWzFdLHIpOlwib2JqaWRcIj09PXQ/dGhpcy5fZGVjb2RlT2JqaWQoZSxudWxsLG51bGwscik6XCJnZW50aW1lXCI9PT10fHxcInV0Y3RpbWVcIj09PXQ/dGhpcy5fZGVjb2RlVGltZShlLHQscik6XCJudWxsX1wiPT09dD90aGlzLl9kZWNvZGVOdWxsKGUscik6XCJib29sXCI9PT10P3RoaXMuX2RlY29kZUJvb2woZSxyKTpcImludFwiPT09dHx8XCJlbnVtXCI9PT10P3RoaXMuX2RlY29kZUludChlLG4uYXJncyYmbi5hcmdzWzBdLHIpOm51bGwhPT1uLnVzZT90aGlzLl9nZXRVc2Uobi51c2UsZS5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoZSxyKTplLmVycm9yKFwidW5rbm93biB0YWc6IFwiK3QpfSxuLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByLnVzZURlY29kZXI9dGhpcy5fdXNlKHQsZSksZihudWxsPT09ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxyLnVzZURlY29kZXI9ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sci5pbXBsaWNpdCE9PXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoci51c2VEZWNvZGVyPXIudXNlRGVjb2Rlci5jbG9uZSgpLHIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PXIuaW1wbGljaXQpLHIudXNlRGVjb2Rlcn0sbi5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZSxuPW51bGwsaT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoci5jaG9pY2UpLnNvbWUoZnVuY3Rpb24obyl7dmFyIGE9dC5zYXZlKCksZj1yLmNob2ljZVtvXTt0cnl7dmFyIHM9Zi5fZGVjb2RlKHQsZSk7aWYodC5pc0Vycm9yKHMpKXJldHVybiExO249e3R5cGU6byx2YWx1ZTpzfSxpPSEwfWNhdGNoKGUpe3JldHVybiB0LnJlc3RvcmUoYSksITF9cmV0dXJuITB9LHRoaXMpLGk/bjp0LmVycm9yKFwiQ2hvaWNlIG5vdCBtYXRjaGVkXCIpfSxuLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCx0aGlzLnJlcG9ydGVyKX0sbi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1uLmRlZmF1bHR8fG4uZGVmYXVsdCE9PXQpe3ZhciBpPXRoaXMuX2VuY29kZVZhbHVlKHQsZSxyKTtpZih2b2lkIDAhPT1pJiYhdGhpcy5fc2tpcERlZmF1bHQoaSxlLHIpKXJldHVybiBpfX0sbi5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PW4ucGFyZW50KXJldHVybiBuLmNoaWxkcmVuWzBdLl9lbmNvZGUodCxlfHxuZXcgaSk7dmFyIG89bnVsbDtpZih0aGlzLnJlcG9ydGVyPWUsbi5vcHRpb25hbCYmdm9pZCAwPT09dCl7aWYobnVsbD09PW4uZGVmYXVsdClyZXR1cm47dD1uLmRlZmF1bHR9dmFyIGE9bnVsbCxmPSExO2lmKG4uYW55KW89dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTtlbHNlIGlmKG4uY2hvaWNlKW89dGhpcy5fZW5jb2RlQ2hvaWNlKHQsZSk7ZWxzZSBpZihuLmNvbnRhaW5zKWE9dGhpcy5fZ2V0VXNlKG4uY29udGFpbnMscikuX2VuY29kZSh0LGUpLGY9ITA7ZWxzZSBpZihuLmNoaWxkcmVuKWE9bi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24ocil7aWYoXCJudWxsX1wiPT09ci5fYmFzZVN0YXRlLnRhZylyZXR1cm4gci5fZW5jb2RlKG51bGwsZSx0KTtpZihudWxsPT09ci5fYmFzZVN0YXRlLmtleSlyZXR1cm4gZS5lcnJvcihcIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5XCIpO3ZhciBuPWUuZW50ZXJLZXkoci5fYmFzZVN0YXRlLmtleSk7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHQpcmV0dXJuIGUuZXJyb3IoXCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3RcIik7dmFyIGk9ci5fZW5jb2RlKHRbci5fYmFzZVN0YXRlLmtleV0sZSx0KTtyZXR1cm4gZS5sZWF2ZUtleShuKSxpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxhPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoYSk7ZWxzZSBpZihcInNlcW9mXCI9PT1uLnRhZ3x8XCJzZXRvZlwiPT09bi50YWcpe2lmKCFuLmFyZ3N8fDEhPT1uLmFyZ3MubGVuZ3RoKXJldHVybiBlLmVycm9yKFwiVG9vIG1hbnkgYXJncyBmb3IgOiBcIituLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuZXJyb3IoXCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5XCIpO3ZhciBzPXRoaXMuY2xvbmUoKTtzLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxhPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodC5tYXAoZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0aGlzLl9nZXRVc2Uobi5hcmdzWzBdLHQpLl9lbmNvZGUocixlKX0scykpfWVsc2UgbnVsbCE9PW4udXNlP289dGhpcy5fZ2V0VXNlKG4udXNlLHIpLl9lbmNvZGUodCxlKTooYT10aGlzLl9lbmNvZGVQcmltaXRpdmUobi50YWcsdCksZj0hMCk7dmFyIG87aWYoIW4uYW55JiZudWxsPT09bi5jaG9pY2Upe3ZhciB1PW51bGwhPT1uLmltcGxpY2l0P24uaW1wbGljaXQ6bi50YWcsaD1udWxsPT09bi5pbXBsaWNpdD9cInVuaXZlcnNhbFwiOlwiY29udGV4dFwiO251bGw9PT11P251bGw9PT1uLnVzZSYmZS5lcnJvcihcIlRhZyBjb3VsZCBiZSBvbW1pdGVkIG9ubHkgZm9yIC51c2UoKVwiKTpudWxsPT09bi51c2UmJihvPXRoaXMuX2VuY29kZUNvbXBvc2l0ZSh1LGYsaCxhKSl9cmV0dXJuIG51bGwhPT1uLmV4cGxpY2l0JiYobz10aGlzLl9lbmNvZGVDb21wb3NpdGUobi5leHBsaWNpdCwhMSxcImNvbnRleHRcIixvKSksb30sbi5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZSxuPXIuY2hvaWNlW3QudHlwZV07cmV0dXJuIG58fGYoITEsdC50eXBlK1wiIG5vdCBmb3VuZCBpbiBcIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhyLmNob2ljZSkpKSxuLl9lbmNvZGUodC52YWx1ZSxlKX0sbi5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdCh0KSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKGUsdCk7aWYoXCJvYmppZFwiPT09dCYmci5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChlLHIucmV2ZXJzZUFyZ3NbMF0sci5hcmdzWzFdKTtpZihcIm9iamlkXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChlLG51bGwsbnVsbCk7aWYoXCJnZW50aW1lXCI9PT10fHxcInV0Y3RpbWVcIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoZSx0KTtpZihcIm51bGxfXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7aWYoXCJpbnRcIj09PXR8fFwiZW51bVwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlSW50KGUsci5hcmdzJiZyLnJldmVyc2VBcmdzWzBdKTtpZihcImJvb2xcIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woZSk7dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdGFnOiBcIit0KX0sbi5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKHQpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QodCl9LG4ucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKHQpe3JldHVybi9eW0EtWmEtejAtOSAnXFwoXFwpXFwrLFxcLVxcLlxcLzo9XFw/XSokLy50ZXN0KHQpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOnR8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gaSh0LGUpe3RoaXMucGF0aD10LHRoaXMucmV0aHJvdyhlKX12YXIgbz1yKDIpO2UuUmVwb3J0ZXI9bixuLnByb3RvdHlwZS5pc0Vycm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaX0sbi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajp0Lm9iaixwYXRoTGVuOnQucGF0aC5sZW5ndGh9fSxuLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGU7ZS5vYmo9dC5vYmosZS5wYXRoPWUucGF0aC5zbGljZSgwLHQucGF0aExlbil9LG4ucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaCh0KX0sbi5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO2UucGF0aD1lLnBhdGguc2xpY2UoMCx0LTEpfSxuLnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkodCksbnVsbCE9PW4ub2JqJiYobi5vYmpbZV09cil9LG4ucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oXCIvXCIpfSxuLnByb3RvdHlwZS5lbnRlck9iamVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlcG9ydGVyU3RhdGUsZT10Lm9iajtyZXR1cm4gdC5vYmo9e30sZX0sbi5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxyPWUub2JqO3JldHVybiBlLm9iaj10LHJ9LG4ucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxuPXQgaW5zdGFuY2VvZiBpO2lmKGU9bj90Om5ldyBpKHIucGF0aC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCJbXCIrSlNPTi5zdHJpbmdpZnkodCkrXCJdXCJ9KS5qb2luKFwiXCIpLHQubWVzc2FnZXx8dCx0LnN0YWNrKSwhci5vcHRpb25zLnBhcnRpYWwpdGhyb3cgZTtyZXR1cm4gbnx8ci5lcnJvcnMucHVzaChlKSxlfSxuLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIGUub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKHQpP251bGw6dCxlcnJvcnM6ZS5lcnJvcnN9OnR9LG8oaSxFcnJvciksaS5wcm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbih0KXtpZih0aGlzLm1lc3NhZ2U9dCtcIiBhdDogXCIrKHRoaXMucGF0aHx8XCIoc2hhbGxvdylcIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsaSksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKHQpe3RoaXMuc3RhY2s9dC5zdGFja31yZXR1cm4gdGhpc319LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIzNSk7ZS50YWdDbGFzcz17MDpcInVuaXZlcnNhbFwiLDE6XCJhcHBsaWNhdGlvblwiLDI6XCJjb250ZXh0XCIsMzpcInByaXZhdGVcIn0sZS50YWdDbGFzc0J5TmFtZT1uLl9yZXZlcnNlKGUudGFnQ2xhc3MpLGUudGFnPXswOlwiZW5kXCIsMTpcImJvb2xcIiwyOlwiaW50XCIsMzpcImJpdHN0clwiLDQ6XCJvY3RzdHJcIiw1OlwibnVsbF9cIiw2Olwib2JqaWRcIiw3Olwib2JqRGVzY1wiLDg6XCJleHRlcm5hbFwiLDk6XCJyZWFsXCIsMTA6XCJlbnVtXCIsMTE6XCJlbWJlZFwiLDEyOlwidXRmOHN0clwiLDEzOlwicmVsYXRpdmVPaWRcIiwxNjpcInNlcVwiLDE3Olwic2V0XCIsMTg6XCJudW1zdHJcIiwxOTpcInByaW50c3RyXCIsMjA6XCJ0NjFzdHJcIiwyMTpcInZpZGVvc3RyXCIsMjI6XCJpYTVzdHJcIiwyMzpcInV0Y3RpbWVcIiwyNDpcImdlbnRpbWVcIiwyNTpcImdyYXBoc3RyXCIsMjY6XCJpc282NDZzdHJcIiwyNzpcImdlbnN0clwiLDI4OlwidW5pc3RyXCIsMjk6XCJjaGFyc3RyXCIsMzA6XCJibXBzdHJcIn0sZS50YWdCeU5hbWU9bi5fcmV2ZXJzZShlLnRhZyl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uZGVyPXIoMjM2KSxuLnBlbT1yKDU4NSl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2EuY2FsbCh0aGlzLHQpLHRoaXMuZW5jPVwicGVtXCJ9dmFyIGk9cigyKSxvPXIoMSkuQnVmZmVyLGE9cigyMzYpO2kobixhKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC50b1N0cmluZygpLnNwbGl0KC9bXFxyXFxuXSsvZyksbj1lLmxhYmVsLnRvVXBwZXJDYXNlKCksaT0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC8sZj0tMSxzPS0xLHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGg9clt1XS5tYXRjaChpKTtpZihudWxsIT09aCYmaFsyXT09PW4pe2lmKGYhPT0tMSl7aWYoXCJFTkRcIiE9PWhbMV0pYnJlYWs7cz11O2JyZWFrfWlmKFwiQkVHSU5cIiE9PWhbMV0pYnJlYWs7Zj11fX1pZihmPT09LTF8fHM9PT0tMSl0aHJvdyBuZXcgRXJyb3IoXCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiBcIituKTt2YXIgYz1yLnNsaWNlKGYrMSxzKS5qb2luKFwiXCIpO2MucmVwbGFjZSgvW15hLXowLTlcXCtcXC89XSsvZ2ksXCJcIik7dmFyIGQ9bmV3IG8oYyxcImJhc2U2NFwiKTtyZXR1cm4gYS5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxkLGUpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5kZXI9cigyMzcpLG4ucGVtPXIoNTg3KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7by5jYWxsKHRoaXMsdCksdGhpcy5lbmM9XCJwZW1cIn12YXIgaT1yKDIpLG89cigyMzcpO2kobixvKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9by5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyx0KSxuPXIudG9TdHJpbmcoXCJiYXNlNjRcIiksaT1bXCItLS0tLUJFR0lOIFwiK2UubGFiZWwrXCItLS0tLVwiXSxhPTA7YTxuLmxlbmd0aDthKz02NClpLnB1c2gobi5zbGljZShhLGErNjQpKTtyZXR1cm4gaS5wdXNoKFwiLS0tLS1FTkQgXCIrZS5sYWJlbCtcIi0tLS0tXCIpLGkuam9pbihcIlxcblwiKX19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9dC5leHBvcnRzPXIsci5lcXVhbD1mdW5jdGlvbih0LGUscil7aWYodCE9ZSl0aHJvdyBuZXcgRXJyb3Iocnx8XCJBc3NlcnRpb24gZmFpbGVkOiBcIit0K1wiICE9IFwiK2UpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHUuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IHMuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dFsxNV0scj0tMTsrK3I8ZTspaWYodFtyKygxNi1lKV0hPT1lKXRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBkZWNyeXB0IGRhdGFcIik7aWYoMTYhPT1lKXJldHVybiB0LnNsaWNlKDAsMTYtZSl9ZnVuY3Rpb24gYShlLHIsaSl7dmFyIG89Y1tlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKGJbby5tb2RlXSxyLGksITApOlwiYXV0aFwiPT09by50eXBlP25ldyBsKGJbby5tb2RlXSxyLGksITApOm5ldyBuKGJbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1jW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1wKGUsITEsci5rZXksci5pdik7cmV0dXJuIGEodCxuLmtleSxuLml2KX12YXIgcz1yKDEwNyksdT1yKDEwOSksaD1yKDIpLGM9cigxNTIpLGQ9cigyNDYpLGw9cigyMzgpLHA9cigxNTMpO2gobix1KSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspbj10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxyKSxpLnB1c2gobik7cmV0dXJuIHQuY29uY2F0KGkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBvKHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHQpKTtpZih0KXRocm93IG5ldyBFcnJvcihcImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aFwiKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhdCx0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZT10LmNvbmNhdChbdGhpcy5jYWNoZSxlXSl9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZTtpZih0KXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gZT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gZT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZTtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX07dmFyIGI9e0VDQjpyKDI0NCksQ0JDOnIoMjQwKSxDRkI6cigyNDEpLENGQjg6cigyNDMpLENGQjE6cigyNDIpLE9GQjpyKDI0NSksQ1RSOnIoMTA4KSxHQ006cigxMDgpfTtlLmNyZWF0ZURlY2lwaGVyPWYsZS5jcmVhdGVEZWNpcGhlcml2PWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG8pe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8ocy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBpLHRoaXMuX2NpcGhlcj1uZXcgZi5BRVMociksdGhpcy5fcHJldj1uZXcgdChvLmxlbmd0aCksby5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9ZSx2b2lkKHRoaXMuX2F1dG9wYWRkaW5nPSEwKSk6bmV3IG4oZSxyLG8pfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dm9pZCh0aGlzLmNhY2hlPW5ldyB0KFwiXCIpKTpuZXcgaX1mdW5jdGlvbiBvKGUscixpKXt2YXIgbz1oW2UudG9Mb3dlckNhc2UoKV07aWYoIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bmV3IHQoaSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgdChyKSksci5sZW5ndGghPT1vLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGggXCIrci5sZW5ndGgpO2lmKGkubGVuZ3RoIT09by5pdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBpdiBsZW5ndGggXCIraS5sZW5ndGgpO3JldHVyblwic3RyZWFtXCI9PT1vLnR5cGU/bmV3IGQocFtvLm1vZGVdLHIsaSk6XCJhdXRoXCI9PT1vLnR5cGU/bmV3IGwocFtvLm1vZGVdLHIsaSk6bmV3IG4ocFtvLm1vZGVdLHIsaSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWhbdC50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBuPWMoZSwhMSxyLmtleSxyLml2KTtyZXR1cm4gbyh0LG4ua2V5LG4uaXYpfXZhciBmPXIoMTA3KSxzPXIoMTA5KSx1PXIoMiksaD1yKDE1MiksYz1yKDE1MyksZD1yKDI0NiksbD1yKDIzOCk7dShuLHMpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgcixuLGk9W107cj10aGlzLl9jYWNoZS5nZXQoKTspbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxyKSxpLnB1c2gobik7cmV0dXJuIHQuY29uY2F0KGkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiB0PXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQpLHRoaXMuX2NpcGhlci5zY3J1YigpLHQ7aWYoXCIxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMFwiIT09dC50b1N0cmluZyhcImhleFwiKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXQsdGhpc30saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9dC5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIHQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0fXJldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgZT0xNi10aGlzLmNhY2hlLmxlbmd0aCxyPW5ldyB0KGUpLG49LTE7KytuPGU7KXIud3JpdGVVSW50OChlLG4pO3ZhciBpPXQuY29uY2F0KFt0aGlzLmNhY2hlLHJdKTtyZXR1cm4gaX07dmFyIHA9e0VDQjpyKDI0NCksQ0JDOnIoMjQwKSxDRkI6cigyNDEpLENGQjg6cigyNDMpLENGQjE6cigyNDIpLE9GQjpyKDI0NSksQ1RSOnIoMTA4KSxHQ006cigxMDgpfTtlLmNyZWF0ZUNpcGhlcml2PW8sZS5jcmVhdGVDaXBoZXI9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0KXt0aGlzLmg9dCx0aGlzLnN0YXRlPW5ldyBlKDE2KSx0aGlzLnN0YXRlLmZpbGwoMCksdGhpcy5jYWNoZT1uZXcgZShcIlwiKX1mdW5jdGlvbiBuKHQpe3JldHVyblt0LnJlYWRVSW50MzJCRSgwKSx0LnJlYWRVSW50MzJCRSg0KSx0LnJlYWRVSW50MzJCRSg4KSx0LnJlYWRVSW50MzJCRSgxMildfWZ1bmN0aW9uIGkodCl7dD10Lm1hcChvKTt2YXIgcj1uZXcgZSgxNik7cmV0dXJuIHIud3JpdGVVSW50MzJCRSh0WzBdLDApLHIud3JpdGVVSW50MzJCRSh0WzFdLDQpLHIud3JpdGVVSW50MzJCRSh0WzJdLDgpLHIud3JpdGVVSW50MzJCRSh0WzNdLDEyKSxyfWZ1bmN0aW9uIG8odCl7dmFyIGUscjtyZXR1cm4gZT10PnN8fHQ8MD8ocj1NYXRoLmFicyh0KSVzLHQ8MD9zLXI6cik6dH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuW3RbMF1eZVswXSx0WzFdXmVbMV0sdFsyXV5lWzJdLHRbM11eZVszXV19dmFyIGY9bmV3IGUoMTYpO2YuZmlsbCgwKSx0LmV4cG9ydHM9cixyLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9LTE7KytlPHQubGVuZ3RoOyl0aGlzLnN0YXRlW2VdXj10W2VdO3RoaXMuX211bHRpcGx5KCl9LHIucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbz1uKHRoaXMuaCksZj1bMCwwLDAsMF0scz0tMTsrK3M8MTI4Oyl7Zm9yKGU9MCE9PSh0aGlzLnN0YXRlW35+KHMvOCldJjE8PDctcyU4KSxlJiYoZj1hKGYsbykpLHI9MCE9PSgxJm9bM10pLHQ9Mzt0PjA7dC0tKW9bdF09b1t0XT4+PjF8KDEmb1t0LTFdKTw8MzE7b1swXT1vWzBdPj4+MSxyJiYob1swXT1vWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9aShmKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuY2FjaGU9ZS5jb25jYXQoW3RoaXMuY2FjaGUsdF0pO2Zvcih2YXIgcjt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KXI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2gocil9LHIucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKGUuY29uY2F0KFt0aGlzLmNhY2hlLGZdLDE2KSksdGhpcy5naGFzaChpKFswLHQsMCxyXSkpLHRoaXMuc3RhdGV9O3ZhciBzPU1hdGgucG93KDIsMzIpfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscil7dmFyIG49KHQubW9kdWx1cyx0Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpKSxpPShyLmxlbmd0aCxjKFwic2hhMVwiKS51cGRhdGUobmV3IGUoXCJcIikpLmRpZ2VzdCgpKSxhPWkubGVuZ3RoO2lmKDAhPT1yWzBdKXRocm93IG5ldyBFcnJvcihcImRlY3J5cHRpb24gZXJyb3JcIik7dmFyIHU9ci5zbGljZSgxLGErMSksaD1yLnNsaWNlKGErMSksZD1zKHUsZihoLGEpKSxsPXMoaCxmKGQsbi1hLTEpKTtpZihvKGksbC5zbGljZSgwLGEpKSl0aHJvdyBuZXcgRXJyb3IoXCJkZWNyeXB0aW9uIGVycm9yXCIpO2Zvcih2YXIgcD1hOzA9PT1sW3BdOylwKys7aWYoMSE9PWxbcCsrXSl0aHJvdyBuZXcgRXJyb3IoXCJkZWNyeXB0aW9uIGVycm9yXCIpO3JldHVybiBsLnNsaWNlKHApfWZ1bmN0aW9uIGkodCxlLHIpe2Zvcih2YXIgbj1lLnNsaWNlKDAsMiksaT0yLG89MDswIT09ZVtpKytdOylpZihpPj1lLmxlbmd0aCl7bysrO2JyZWFrfXZhciBhPWUuc2xpY2UoMixpLTEpO2Uuc2xpY2UoaS0xLGkpO2lmKChcIjAwMDJcIiE9PW4udG9TdHJpbmcoXCJoZXhcIikmJiFyfHxcIjAwMDFcIiE9PW4udG9TdHJpbmcoXCJoZXhcIikmJnIpJiZvKyssYS5sZW5ndGg8OCYmbysrLG8pdGhyb3cgbmV3IEVycm9yKFwiZGVjcnlwdGlvbiBlcnJvclwiKTtyZXR1cm4gZS5zbGljZShpKX1mdW5jdGlvbiBvKHQscil7dD1uZXcgZSh0KSxyPW5ldyBlKHIpO3ZhciBuPTAsaT10Lmxlbmd0aDt0Lmxlbmd0aCE9PXIubGVuZ3RoJiYobisrLGk9TWF0aC5taW4odC5sZW5ndGgsci5sZW5ndGgpKTtmb3IodmFyIG89LTE7KytvPGk7KW4rPXRbb11ecltvXTtyZXR1cm4gbn12YXIgYT1yKDIzMyksZj1yKDIzMSkscz1yKDI0OCksdT1yKDcwKSxoPXIoMjMyKSxjPXIoNTkpLGQ9cigyNDcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIsbyl7dmFyIGY7Zj10LnBhZGRpbmc/dC5wYWRkaW5nOm8/MTo0O3ZhciBzPWEodCksYz1zLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKHIubGVuZ3RoPmN8fG5ldyB1KHIpLmNtcChzLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcihcImRlY3J5cHRpb24gZXJyb3JcIik7dmFyIGw7bD1vP2QobmV3IHUocikscyk6aChyLHMpO3ZhciBwPW5ldyBlKGMtbC5sZW5ndGgpO2lmKHAuZmlsbCgwKSxsPWUuY29uY2F0KFtwLGxdLGMpLDQ9PT1mKXJldHVybiBuKHMsbCk7aWYoMT09PWYpcmV0dXJuIGkocyxsLG8pO2lmKDM9PT1mKXJldHVybiBsO3Rocm93IG5ldyBFcnJvcihcInVua25vd24gcGFkZGluZ1wiKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyKXt2YXIgbj10Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGk9ci5sZW5ndGgsbz1zKFwic2hhMVwiKS51cGRhdGUobmV3IGUoXCJcIikpLmRpZ2VzdCgpLGE9by5sZW5ndGgsZD0yKmE7aWYoaT5uLWQtMil0aHJvdyBuZXcgRXJyb3IoXCJtZXNzYWdlIHRvbyBsb25nXCIpO3ZhciBsPW5ldyBlKG4taS1kLTIpO2wuZmlsbCgwKTt2YXIgcD1uLWEtMSxiPWYoYSksdj1oKGUuY29uY2F0KFtvLGwsbmV3IGUoWzFdKSxyXSxwKSx1KGIscCkpLHk9aChiLHUodixhKSk7cmV0dXJuIG5ldyBjKGUuY29uY2F0KFtuZXcgZShbMF0pLHksdl0sbikpfWZ1bmN0aW9uIGkodCxyLG4pe3ZhciBpPXIubGVuZ3RoLGE9dC5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihpPmEtMTEpdGhyb3cgbmV3IEVycm9yKFwibWVzc2FnZSB0b28gbG9uZ1wiKTt2YXIgZjtyZXR1cm4gbj8oZj1uZXcgZShhLWktMyksZi5maWxsKDI1NSkpOmY9byhhLWktMyksbmV3IGMoZS5jb25jYXQoW25ldyBlKFswLG4/MToyXSksZixuZXcgZShbMF0pLHJdLGEpKX1mdW5jdGlvbiBvKHQscil7Zm9yKHZhciBuLGk9bmV3IGUodCksbz0wLGE9ZigyKnQpLHM9MDtvPHQ7KXM9PT1hLmxlbmd0aCYmKGE9ZigyKnQpLHM9MCksbj1hW3MrK10sbiYmKGlbbysrXT1uKTtyZXR1cm4gaX12YXIgYT1yKDIzMyksZj1yKDYxKSxzPXIoNTkpLHU9cigyMzEpLGg9cigyNDgpLGM9cig3MCksZD1yKDI0NyksbD1yKDIzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbztvPXQucGFkZGluZz90LnBhZGRpbmc6cj8xOjQ7dmFyIGYscz1hKHQpO2lmKDQ9PT1vKWY9bihzLGUpO2Vsc2UgaWYoMT09PW8pZj1pKHMsZSxyKTtlbHNle2lmKDMhPT1vKXRocm93IG5ldyBFcnJvcihcInVua25vd24gcGFkZGluZ1wiKTtpZihmPW5ldyBjKGUpLGYuY21wKHMubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKFwiZGF0YSB0b28gbG9uZyBmb3IgbW9kdWx1c1wiKX1yZXR1cm4gcj9sKGYscyk6ZChmLHMpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9dFtuXTtcIi5cIj09PWk/dC5zcGxpY2UobiwxKTpcIi4uXCI9PT1pPyh0LnNwbGljZShuLDEpLFxucisrKTpyJiYodC5zcGxpY2UobiwxKSxyLS0pfWlmKGUpZm9yKDtyLS07cil0LnVuc2hpZnQoXCIuLlwiKTtyZXR1cm4gdH1mdW5jdGlvbiBuKHQsZSl7aWYodC5maWx0ZXIpcmV0dXJuIHQuZmlsdGVyKGUpO2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspZSh0W25dLG4sdCkmJnIucHVzaCh0W25dKTtyZXR1cm4gcn12YXIgaT0vXihcXC8/fCkoW1xcc1xcU10qPykoKD86XFwuezEsMn18W15cXC9dKz98KShcXC5bXi5cXC9dKnwpKSg/OltcXC9dKikkLyxvPWZ1bmN0aW9uKHQpe3JldHVybiBpLmV4ZWModCkuc2xpY2UoMSl9O2UucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1cIlwiLGk9ITEsbz1hcmd1bWVudHMubGVuZ3RoLTE7bz49LTEmJiFpO28tLSl7dmFyIGE9bz49MD9hcmd1bWVudHNbb106dC5jd2QoKTtpZihcInN0cmluZ1wiIT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3NcIik7YSYmKGU9YStcIi9cIitlLGk9XCIvXCI9PT1hLmNoYXJBdCgwKSl9cmV0dXJuIGU9cihuKGUuc3BsaXQoXCIvXCIpLGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLCFpKS5qb2luKFwiL1wiKSwoaT9cIi9cIjpcIlwiKStlfHxcIi5cIn0sZS5ub3JtYWxpemU9ZnVuY3Rpb24odCl7dmFyIGk9ZS5pc0Fic29sdXRlKHQpLG89XCIvXCI9PT1hKHQsLTEpO3JldHVybiB0PXIobih0LnNwbGl0KFwiL1wiKSxmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSwhaSkuam9pbihcIi9cIiksdHx8aXx8KHQ9XCIuXCIpLHQmJm8mJih0Kz1cIi9cIiksKGk/XCIvXCI6XCJcIikrdH0sZS5pc0Fic29sdXRlPWZ1bmN0aW9uKHQpe3JldHVyblwiL1wiPT09dC5jaGFyQXQoMCl9LGUuam9pbj1mdW5jdGlvbigpe3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gZS5ub3JtYWxpemUobih0LGZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzXCIpO3JldHVybiB0fSkuam9pbihcIi9cIikpfSxlLnJlbGF0aXZlPWZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoJiZcIlwiPT09dFtlXTtlKyspO2Zvcih2YXIgcj10Lmxlbmd0aC0xO3I+PTAmJlwiXCI9PT10W3JdO3ItLSk7cmV0dXJuIGU+cj9bXTp0LnNsaWNlKGUsci1lKzEpfXQ9ZS5yZXNvbHZlKHQpLnN1YnN0cigxKSxyPWUucmVzb2x2ZShyKS5zdWJzdHIoMSk7Zm9yKHZhciBpPW4odC5zcGxpdChcIi9cIikpLG89bihyLnNwbGl0KFwiL1wiKSksYT1NYXRoLm1pbihpLmxlbmd0aCxvLmxlbmd0aCksZj1hLHM9MDtzPGE7cysrKWlmKGlbc10hPT1vW3NdKXtmPXM7YnJlYWt9Zm9yKHZhciB1PVtdLHM9ZjtzPGkubGVuZ3RoO3MrKyl1LnB1c2goXCIuLlwiKTtyZXR1cm4gdT11LmNvbmNhdChvLnNsaWNlKGYpKSx1LmpvaW4oXCIvXCIpfSxlLnNlcD1cIi9cIixlLmRlbGltaXRlcj1cIjpcIixlLmRpcm5hbWU9ZnVuY3Rpb24odCl7dmFyIGU9byh0KSxyPWVbMF0sbj1lWzFdO3JldHVybiByfHxuPyhuJiYobj1uLnN1YnN0cigwLG4ubGVuZ3RoLTEpKSxyK24pOlwiLlwifSxlLmJhc2VuYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9byh0KVsyXTtyZXR1cm4gZSYmci5zdWJzdHIoLTEqZS5sZW5ndGgpPT09ZSYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC1lLmxlbmd0aCkpLHJ9LGUuZXh0bmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gbyh0KVszXX07dmFyIGE9XCJiXCI9PT1cImFiXCIuc3Vic3RyKC0xKT9mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuc3Vic3RyKGUscil9OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZTwwJiYoZT10Lmxlbmd0aCtlKSx0LnN1YnN0cihlLHIpfX0pLmNhbGwoZSxyKDI2KSl9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cig1MSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKCl7dGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH12YXIgaT0ocigxKS5CdWZmZXIscigxNTYpKTt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXtkYXRhOnQsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PWU6dGhpcy5oZWFkPWUsdGhpcy50YWlsPWUsKyt0aGlzLmxlbmd0aH0sbi5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih0KXt2YXIgZT17ZGF0YTp0LG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9ZSksdGhpcy5oZWFkPWUsKyt0aGlzLmxlbmd0aH0sbi5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciB0PXRoaXMuaGVhZC5kYXRhO3JldHVybiAxPT09dGhpcy5sZW5ndGg/dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsOnRoaXMuaGVhZD10aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLHR9fSxuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfSxuLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKHQpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm5cIlwiO2Zvcih2YXIgZT10aGlzLmhlYWQscj1cIlwiK2UuZGF0YTtlPWUubmV4dDspcis9dCtlLmRhdGE7cmV0dXJuIHJ9LG4ucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbih0KXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIGkuYWxsb2MoMCk7aWYoMT09PXRoaXMubGVuZ3RoKXJldHVybiB0aGlzLmhlYWQuZGF0YTtmb3IodmFyIGU9aS5hbGxvY1Vuc2FmZSh0Pj4+MCkscj10aGlzLmhlYWQsbj0wO3I7KXIuZGF0YS5jb3B5KGUsbiksbis9ci5kYXRhLmxlbmd0aCxyPXIubmV4dDtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09ci5jYWxsKHQpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcigpe2lmKCFpKXtpZihuKFwidGhyb3dEZXByZWNhdGlvblwiKSl0aHJvdyBuZXcgRXJyb3IoZSk7bihcInRyYWNlRGVwcmVjYXRpb25cIik/Y29uc29sZS50cmFjZShlKTpjb25zb2xlLndhcm4oZSksaT0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYobihcIm5vRGVwcmVjYXRpb25cIikpcmV0dXJuIHQ7dmFyIGk9ITE7cmV0dXJuIHJ9ZnVuY3Rpb24gbih0KXt0cnl7aWYoIWUubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoKHQpe3JldHVybiExfXZhciByPWUubG9jYWxTdG9yYWdlW3RdO3JldHVybiBudWxsIT1yJiZcInRydWVcIj09PVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpfXQuZXhwb3J0cz1yfSkuY2FsbChlLHIoMzkpKX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDI0OSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24obil7dmFyIGk9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHIoMzEpfWNhdGNoKHQpe319KCk7ZT10LmV4cG9ydHM9cigyNTApLGUuU3RyZWFtPWl8fGUsZS5SZWFkYWJsZT1lLGUuV3JpdGFibGU9cigxNTUpLGUuRHVwbGV4PXIoNTEpLGUuVHJhbnNmb3JtPXIoMTU0KSxlLlBhc3NUaHJvdWdoPXIoMjQ5KSwhbi5icm93c2VyJiZcImRpc2FibGVcIj09PW4uZW52LlJFQURBQkxFX1NUUkVBTSYmaSYmKHQuZXhwb3J0cz1pKX0pLmNhbGwoZSxyKDI2KSl9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cigxNTQpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoMTU1KX0sZnVuY3Rpb24odCxlKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OnQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSxmdW5jdGlvbih0LGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5jb3B5JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmZpbGwmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQucmVhZFVJbnQ4fX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGkodCxyKXt2YXIgbj17c2VlbjpbXSxzdHlsaXplOmF9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYobi5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihuLmNvbG9ycz1hcmd1bWVudHNbM10pLGIocik/bi5zaG93SGlkZGVuPXI6ciYmZS5fZXh0ZW5kKG4sciksXyhuLnNob3dIaWRkZW4pJiYobi5zaG93SGlkZGVuPSExKSxfKG4uZGVwdGgpJiYobi5kZXB0aD0yKSxfKG4uY29sb3JzKSYmKG4uY29sb3JzPSExKSxfKG4uY3VzdG9tSW5zcGVjdCkmJihuLmN1c3RvbUluc3BlY3Q9ITApLG4uY29sb3JzJiYobi5zdHlsaXplPW8pLHMobix0LG4uZGVwdGgpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1pLnN0eWxlc1tlXTtyZXR1cm4gcj9cIlx1MDAxYltcIitpLmNvbG9yc1tyXVswXStcIm1cIit0K1wiXHUwMDFiW1wiK2kuY29sb3JzW3JdWzFdK1wibVwiOnR9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0fWZ1bmN0aW9uIGYodCl7dmFyIGU9e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0LHIpe2VbdF09ITB9KSxlfWZ1bmN0aW9uIHModCxyLG4pe2lmKHQuY3VzdG9tSW5zcGVjdCYmciYmayhyLmluc3BlY3QpJiZyLmluc3BlY3QhPT1lLmluc3BlY3QmJighci5jb25zdHJ1Y3Rvcnx8ci5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1yKSl7dmFyIGk9ci5pbnNwZWN0KG4sdCk7cmV0dXJuIGcoaSl8fChpPXModCxpLG4pKSxpfXZhciBvPXUodCxyKTtpZihvKXJldHVybiBvO3ZhciBhPU9iamVjdC5rZXlzKHIpLGI9ZihhKTtpZih0LnNob3dIaWRkZW4mJihhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpKSxBKHIpJiYoYS5pbmRleE9mKFwibWVzc2FnZVwiKT49MHx8YS5pbmRleE9mKFwiZGVzY3JpcHRpb25cIik+PTApKXJldHVybiBoKHIpO2lmKDA9PT1hLmxlbmd0aCl7aWYoayhyKSl7dmFyIHY9ci5uYW1lP1wiOiBcIityLm5hbWU6XCJcIjtyZXR1cm4gdC5zdHlsaXplKFwiW0Z1bmN0aW9uXCIrditcIl1cIixcInNwZWNpYWxcIil9aWYoTShyKSlyZXR1cm4gdC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSxcInJlZ2V4cFwiKTtpZihFKHIpKXJldHVybiB0LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSxcImRhdGVcIik7aWYoQShyKSlyZXR1cm4gaChyKX12YXIgeT1cIlwiLG09ITEsdz1bXCJ7XCIsXCJ9XCJdO2lmKHAocikmJihtPSEwLHc9W1wiW1wiLFwiXVwiXSksayhyKSl7dmFyIF89ci5uYW1lP1wiOiBcIityLm5hbWU6XCJcIjt5PVwiIFtGdW5jdGlvblwiK18rXCJdXCJ9aWYoTShyKSYmKHk9XCIgXCIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpKSxFKHIpJiYoeT1cIiBcIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHIpKSxBKHIpJiYoeT1cIiBcIitoKHIpKSwwPT09YS5sZW5ndGgmJighbXx8MD09ci5sZW5ndGgpKXJldHVybiB3WzBdK3krd1sxXTtpZihuPDApcmV0dXJuIE0ocik/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSxcInJlZ2V4cFwiKTp0LnN0eWxpemUoXCJbT2JqZWN0XVwiLFwic3BlY2lhbFwiKTt0LnNlZW4ucHVzaChyKTt2YXIgUztyZXR1cm4gUz1tP2ModCxyLG4sYixhKTphLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZCh0LHIsbixiLGUsbSl9KSx0LnNlZW4ucG9wKCksbChTLHksdyl9ZnVuY3Rpb24gdSh0LGUpe2lmKF8oZSkpcmV0dXJuIHQuc3R5bGl6ZShcInVuZGVmaW5lZFwiLFwidW5kZWZpbmVkXCIpO2lmKGcoZSkpe3ZhciByPVwiJ1wiK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL15cInxcIiQvZyxcIlwiKS5yZXBsYWNlKC8nL2csXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKStcIidcIjtyZXR1cm4gdC5zdHlsaXplKHIsXCJzdHJpbmdcIil9cmV0dXJuIG0oZSk/dC5zdHlsaXplKFwiXCIrZSxcIm51bWJlclwiKTpiKGUpP3Quc3R5bGl6ZShcIlwiK2UsXCJib29sZWFuXCIpOnYoZSk/dC5zdHlsaXplKFwibnVsbFwiLFwibnVsbFwiKTp2b2lkIDB9ZnVuY3Rpb24gaCh0KXtyZXR1cm5cIltcIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KStcIl1cIn1mdW5jdGlvbiBjKHQsZSxyLG4saSl7Zm9yKHZhciBvPVtdLGE9MCxmPWUubGVuZ3RoO2E8ZjsrK2EpUihlLFN0cmluZyhhKSk/by5wdXNoKGQodCxlLHIsbixTdHJpbmcoYSksITApKTpvLnB1c2goXCJcIik7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihpKXtpLm1hdGNoKC9eXFxkKyQvKXx8by5wdXNoKGQodCxlLHIsbixpLCEwKSl9KSxvfWZ1bmN0aW9uIGQodCxlLHIsbixpLG8pe3ZhciBhLGYsdTtpZih1PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxpKXx8e3ZhbHVlOmVbaV19LHUuZ2V0P2Y9dS5zZXQ/dC5zdHlsaXplKFwiW0dldHRlci9TZXR0ZXJdXCIsXCJzcGVjaWFsXCIpOnQuc3R5bGl6ZShcIltHZXR0ZXJdXCIsXCJzcGVjaWFsXCIpOnUuc2V0JiYoZj10LnN0eWxpemUoXCJbU2V0dGVyXVwiLFwic3BlY2lhbFwiKSksUihuLGkpfHwoYT1cIltcIitpK1wiXVwiKSxmfHwodC5zZWVuLmluZGV4T2YodS52YWx1ZSk8MD8oZj12KHIpP3ModCx1LnZhbHVlLG51bGwpOnModCx1LnZhbHVlLHItMSksZi5pbmRleE9mKFwiXFxuXCIpPi0xJiYoZj1vP2Yuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiICBcIit0fSkuam9pbihcIlxcblwiKS5zdWJzdHIoMik6XCJcXG5cIitmLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIiAgIFwiK3R9KS5qb2luKFwiXFxuXCIpKSk6Zj10LnN0eWxpemUoXCJbQ2lyY3VsYXJdXCIsXCJzcGVjaWFsXCIpKSxfKGEpKXtpZihvJiZpLm1hdGNoKC9eXFxkKyQvKSlyZXR1cm4gZjthPUpTT04uc3RyaW5naWZ5KFwiXCIraSksYS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLyk/KGE9YS5zdWJzdHIoMSxhLmxlbmd0aC0yKSxhPXQuc3R5bGl6ZShhLFwibmFtZVwiKSk6KGE9YS5yZXBsYWNlKC8nL2csXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKS5yZXBsYWNlKC8oXlwifFwiJCkvZyxcIidcIiksYT10LnN0eWxpemUoYSxcInN0cmluZ1wiKSl9cmV0dXJuIGErXCI6IFwiK2Z9ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49MCxpPXQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4rKyxlLmluZGV4T2YoXCJcXG5cIik+PTAmJm4rKyx0K2UucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csXCJcIikubGVuZ3RoKzF9LDApO3JldHVybiBpPjYwP3JbMF0rKFwiXCI9PT1lP1wiXCI6ZStcIlxcbiBcIikrXCIgXCIrdC5qb2luKFwiLFxcbiAgXCIpK1wiIFwiK3JbMV06clswXStlK1wiIFwiK3Quam9pbihcIiwgXCIpK1wiIFwiK3JbMV19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBiKHQpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdH1mdW5jdGlvbiB2KHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiB5KHQpe3JldHVybiBudWxsPT10fWZ1bmN0aW9uIG0odCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHR9ZnVuY3Rpb24gZyh0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdH1mdW5jdGlvbiB3KHQpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIF8odCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gUyh0KSYmXCJbb2JqZWN0IFJlZ0V4cF1cIj09PUkodCl9ZnVuY3Rpb24gUyh0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmbnVsbCE9PXR9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gUyh0KSYmXCJbb2JqZWN0IERhdGVdXCI9PT1JKHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIFModCkmJihcIltvYmplY3QgRXJyb3JdXCI9PT1JKHQpfHx0IGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIGsodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdH1mdW5jdGlvbiB4KHQpe3JldHVybiBudWxsPT09dHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJzdHJpbmdcIj09dHlwZW9mIHR8fFwic3ltYm9sXCI9PXR5cGVvZiB0fHxcInVuZGVmaW5lZFwiPT10eXBlb2YgdH1mdW5jdGlvbiBJKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gQih0KXtyZXR1cm4gdDwxMD9cIjBcIit0LnRvU3RyaW5nKDEwKTp0LnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBPKCl7dmFyIHQ9bmV3IERhdGUsZT1bQih0LmdldEhvdXJzKCkpLEIodC5nZXRNaW51dGVzKCkpLEIodC5nZXRTZWNvbmRzKCkpXS5qb2luKFwiOlwiKTtyZXR1cm5bdC5nZXREYXRlKCksQ1t0LmdldE1vbnRoKCldLGVdLmpvaW4oXCIgXCIpfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9dmFyIFA9LyVbc2RqJV0vZztlLmZvcm1hdD1mdW5jdGlvbih0KXtpZighZyh0KSl7Zm9yKHZhciBlPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWUucHVzaChpKGFyZ3VtZW50c1tyXSkpO3JldHVybiBlLmpvaW4oXCIgXCIpfWZvcih2YXIgcj0xLG49YXJndW1lbnRzLG89bi5sZW5ndGgsYT1TdHJpbmcodCkucmVwbGFjZShQLGZ1bmN0aW9uKHQpe2lmKFwiJSVcIj09PXQpcmV0dXJuXCIlXCI7aWYocj49bylyZXR1cm4gdDtzd2l0Y2godCl7Y2FzZVwiJXNcIjpyZXR1cm4gU3RyaW5nKG5bcisrXSk7Y2FzZVwiJWRcIjpyZXR1cm4gTnVtYmVyKG5bcisrXSk7Y2FzZVwiJWpcIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5bcisrXSl9Y2F0Y2godCl7cmV0dXJuXCJbQ2lyY3VsYXJdXCJ9ZGVmYXVsdDpyZXR1cm4gdH19KSxmPW5bcl07cjxvO2Y9blsrK3JdKWErPXYoZil8fCFTKGYpP1wiIFwiK2Y6XCIgXCIraShmKTtyZXR1cm4gYX0sZS5kZXByZWNhdGU9ZnVuY3Rpb24ocixpKXtmdW5jdGlvbiBvKCl7aWYoIWEpe2lmKG4udGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IoaSk7bi50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2UoaSk6Y29uc29sZS5lcnJvcihpKSxhPSEwfXJldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihfKHQucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVwcmVjYXRlKHIsaSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZihuLm5vRGVwcmVjYXRpb249PT0hMClyZXR1cm4gcjt2YXIgYT0hMTtyZXR1cm4gb307dmFyIFQsaj17fTtlLmRlYnVnbG9nPWZ1bmN0aW9uKHQpe2lmKF8oVCkmJihUPW4uZW52Lk5PREVfREVCVUd8fFwiXCIpLHQ9dC50b1VwcGVyQ2FzZSgpLCFqW3RdKWlmKG5ldyBSZWdFeHAoXCJcXFxcYlwiK3QrXCJcXFxcYlwiLFwiaVwiKS50ZXN0KFQpKXt2YXIgcj1uLnBpZDtqW3RdPWZ1bmN0aW9uKCl7dmFyIG49ZS5mb3JtYXQuYXBwbHkoZSxhcmd1bWVudHMpO2NvbnNvbGUuZXJyb3IoXCIlcyAlZDogJXNcIix0LHIsbil9fWVsc2Ugalt0XT1mdW5jdGlvbigpe307cmV0dXJuIGpbdF19LGUuaW5zcGVjdD1pLGkuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxpLnN0eWxlcz17c3BlY2lhbDpcImN5YW5cIixudW1iZXI6XCJ5ZWxsb3dcIixib29sZWFuOlwieWVsbG93XCIsdW5kZWZpbmVkOlwiZ3JleVwiLG51bGw6XCJib2xkXCIsc3RyaW5nOlwiZ3JlZW5cIixkYXRlOlwibWFnZW50YVwiLHJlZ2V4cDpcInJlZFwifSxlLmlzQXJyYXk9cCxlLmlzQm9vbGVhbj1iLGUuaXNOdWxsPXYsZS5pc051bGxPclVuZGVmaW5lZD15LGUuaXNOdW1iZXI9bSxlLmlzU3RyaW5nPWcsZS5pc1N5bWJvbD13LGUuaXNVbmRlZmluZWQ9XyxlLmlzUmVnRXhwPU0sZS5pc09iamVjdD1TLGUuaXNEYXRlPUUsZS5pc0Vycm9yPUEsZS5pc0Z1bmN0aW9uPWssZS5pc1ByaW1pdGl2ZT14LGUuaXNCdWZmZXI9cig2MDUpO3ZhciBDPVtcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl07ZS5sb2c9ZnVuY3Rpb24oKXtjb25zb2xlLmxvZyhcIiVzIC0gJXNcIixPKCksZS5mb3JtYXQuYXBwbHkoZSxhcmd1bWVudHMpKX0sZS5pbmhlcml0cz1yKDYwNCksZS5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7aWYoIWV8fCFTKGUpKXJldHVybiB0O2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPXIubGVuZ3RoO24tLTspdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fX0pLmNhbGwoZSxyKDM5KSxyKDI2KSl9LGZ1bmN0aW9uKHQsZSl7dmFyIHI9W10uaW5kZXhPZjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyKXJldHVybiB0LmluZGV4T2YoZSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24paWYodFtuXT09PWUpcmV0dXJuIG47cmV0dXJuLTF9fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSxyKXtyKDI1MyksdC5leHBvcnRzPXIoMjUyKX1dKX0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9maXZlLWJlbGxzLWNvbmRpdGlvbi9kaXN0L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IG5hY2wgZnJvbSAndHdlZXRuYWNsJztcblxuLyoqXG4gKiBAY2xhc3MgS2V5cGFpciBFZDI1NTE5IGtleXBhaXIgaW4gYmFzZTU4IChhcyBCaWdjaGFpbkRCIGV4cGVjdHMgYmFzZTU4IGtleXMpXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHB1YmxpY0tleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByaXZhdGVLZXlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWQyNTUxOUtleXBhaXIoKSB7XG4gICAgY29uc3Qga2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyKCk7XG4gICAgdGhpcy5wdWJsaWNLZXkgPSBiYXNlNTguZW5jb2RlKGtleVBhaXIucHVibGljS2V5KTtcbiAgICAvLyB0d2VldG5hY2wncyBnZW5lcmF0ZWQgc2VjcmV0IGtleSBpcyB0aGUgc2VjcmV0IGtleSArIHB1YmxpYyBrZXkgKHJlc3VsdGluZyBpbiBhIDY0LWJ5dGUgYnVmZmVyKVxuICAgIHRoaXMucHJpdmF0ZUtleSA9IGJhc2U1OC5lbmNvZGUoa2V5UGFpci5zZWNyZXRLZXkuc2xpY2UoMCwgMzIpKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9FZDI1NTE5S2V5cGFpci5qcyIsImltcG9ydCBzaGEzIGZyb20gJ2pzLXNoYTMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGEyNTZIYXNoKGRhdGEpIHtcbiAgICByZXR1cm4gc2hhMy5zaGEzXzI1NlxuICAgICAgICAuY3JlYXRlKClcbiAgICAgICAgLnVwZGF0ZShkYXRhKVxuICAgICAgICAuaGV4KCk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc2hhMjU2SGFzaC5qcyIsImltcG9ydCBzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcgZnJvbSAnLi9zZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcnO1xuaW1wb3J0IHNoYTI1Nkhhc2ggZnJvbSAnLi4vc2hhMjU2SGFzaCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhc2hUcmFuc2FjdGlvbih0cmFuc2FjdGlvbikge1xuICAgIC8vIFNhZmVseSByZW1vdmUgYW55IHR4IGlkIGZyb20gdGhlIGdpdmVuIHRyYW5zYWN0aW9uIGZvciBoYXNoaW5nXG4gICAgY29uc3QgdHggPSB7IC4uLnRyYW5zYWN0aW9uIH07XG4gICAgZGVsZXRlIHR4LmlkO1xuXG4gICAgcmV0dXJuIHNoYTI1Nkhhc2goc2VyaWFsaXplVHJhbnNhY3Rpb25JbnRvQ2Fub25pY2FsU3RyaW5nKHR4KSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL2hhc2hUcmFuc2FjdGlvbi5qcyIsImltcG9ydCBtYWtlSW5wdXRUZW1wbGF0ZSBmcm9tICcuL21ha2VJbnB1dFRlbXBsYXRlJztcbmltcG9ydCBtYWtlVHJhbnNhY3Rpb24gZnJvbSAnLi9tYWtlVHJhbnNhY3Rpb24nO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgYENSRUFURWAgdHJhbnNhY3Rpb24gaG9sZGluZyB0aGUgYGFzc2V0YCwgYG1ldGFkYXRhYCwgYW5kIGBvdXRwdXRzYCwgdG8gYmUgc2lnbmVkIGJ5XG4gKiB0aGUgYGlzc3VlcnNgLlxuICogQHBhcmFtIHtvYmplY3R9IGFzc2V0IENyZWF0ZWQgYXNzZXQncyBkYXRhXG4gKiBAcGFyYW0ge29iamVjdH0gbWV0YWRhdGEgTWV0YWRhdGEgZm9yIHRoZSBUcmFuc2FjdGlvblxuICogQHBhcmFtIHtvYmplY3RbXX0gb3V0cHV0cyBBcnJheSBvZiBPdXRwdXQgb2JqZWN0cyB0byBhZGQgdG8gdGhlIFRyYW5zYWN0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBUaGluayBvZiB0aGVzZSBhcyB0aGUgcmVjaXBpZW50cyBvZiB0aGUgYXNzZXQgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYENSRUFURWAgVHJhbnNhY3Rpb25zLCB0aGlzIHNob3VsZCB1c3VhbGx5IGp1c3QgYmUgYSBsaXN0IG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dHMgd3JhcHBpbmcgRWQyNTUxOSBDb25kaXRpb25zIGdlbmVyYXRlZCBmcm9tIHRoZSBpc3N1ZXJzJyBwdWJsaWNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cyAoc28gdGhhdCB0aGUgaXNzdWVycyBhcmUgdGhlIHJlY2lwaWVudHMgb2YgdGhlIGNyZWF0ZWQgYXNzZXQpLlxuICogQHBhcmFtIHsuLi5zdHJpbmdbXX0gaXNzdWVycyBQdWJsaWMga2V5IG9mIG9uZSBvciBtb3JlIGlzc3VlcnMgdG8gdGhlIGFzc2V0IGJlaW5nIGNyZWF0ZWQgYnkgdGhpc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZTogRWFjaCBvZiB0aGUgcHJpdmF0ZSBrZXlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHB1YmxpY1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzIE1VU1QgYmUgdXNlZCBsYXRlciAoYW5kIGluIHRoZSBzYW1lIG9yZGVyKSB3aGVuIHNpZ25pbmcgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uIChgc2lnblRyYW5zYWN0aW9uKClgKS5cbiAqIEByZXR1cm5zIHtvYmplY3R9IFVuc2lnbmVkIHRyYW5zYWN0aW9uIC0tIG1ha2Ugc3VyZSB0byBjYWxsIHNpZ25UcmFuc2FjdGlvbigpIG9uIGl0IGJlZm9yZVxuICogICAgICAgICAgICAgICAgICAgc2VuZGluZyBpdCBvZmYhXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VDcmVhdGVUcmFuc2FjdGlvbihhc3NldCwgbWV0YWRhdGEsIG91dHB1dHMsIC4uLmlzc3VlcnMpIHtcbiAgICBjb25zdCBhc3NldERlZmluaXRpb24gPSB7XG4gICAgICAgICdkYXRhJzogYXNzZXQgfHwgbnVsbCxcbiAgICB9O1xuICAgIGNvbnN0IGlucHV0cyA9IGlzc3VlcnMubWFwKChpc3N1ZXIpID0+IG1ha2VJbnB1dFRlbXBsYXRlKFtpc3N1ZXJdKSk7XG5cbiAgICByZXR1cm4gbWFrZVRyYW5zYWN0aW9uKCdDUkVBVEUnLCBhc3NldERlZmluaXRpb24sIG1ldGFkYXRhLCBvdXRwdXRzLCBpbnB1dHMpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlQ3JlYXRlVHJhbnNhY3Rpb24uanMiLCJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuXG5pbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IGNjIGZyb20gJ2ZpdmUtYmVsbHMtY29uZGl0aW9uJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRWQyNTUxOSBDcnlwdG9jb25kaXRpb24gZnJvbSBhbiBFZDI1NTE5IHB1YmxpYyBrZXkgdG8gcHV0IGludG8gYW4gT3V0cHV0IG9mIGEgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNLZXkgYmFzZTU4IGVuY29kZWQgRWQyNTUxOSBwdWJsaWMga2V5IGZvciB0aGUgcmVjaXBpZW50IG9mIHRoZSBUcmFuc2FjdGlvblxuICogQHJldHVybnMge29iamVjdH0gRWQyNTUxOSBDb25kaXRpb24gKHRoYXQgd2lsbCBuZWVkIHRvIHdyYXBwZWQgaW4gYW4gT3V0cHV0KVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlRWQyNTUxOUNvbmRpdGlvbihwdWJsaWNLZXkpIHtcbiAgICBjb25zdCBwdWJsaWNLZXlCdWZmZXIgPSBuZXcgQnVmZmVyKGJhc2U1OC5kZWNvZGUocHVibGljS2V5KSk7XG5cbiAgICBjb25zdCBlZDI1NTE5RnVsZmlsbG1lbnQgPSBuZXcgY2MuRWQyNTUxOSgpO1xuICAgIGVkMjU1MTlGdWxmaWxsbWVudC5zZXRQdWJsaWNLZXkocHVibGljS2V5QnVmZmVyKTtcbiAgICBjb25zdCBjb25kaXRpb25VcmkgPSBlZDI1NTE5RnVsZmlsbG1lbnQuZ2V0Q29uZGl0aW9uVXJpKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAnZGV0YWlscyc6IHtcbiAgICAgICAgICAgICdzaWduYXR1cmUnOiBudWxsLFxuICAgICAgICAgICAgJ3R5cGVfaWQnOiA0LFxuICAgICAgICAgICAgJ3R5cGUnOiAnZnVsZmlsbG1lbnQnLFxuICAgICAgICAgICAgJ2JpdG1hc2snOiAzMixcbiAgICAgICAgICAgICdwdWJsaWNfa2V5JzogcHVibGljS2V5LFxuICAgICAgICB9LFxuICAgICAgICAndXJpJzogY29uZGl0aW9uVXJpLFxuICAgIH07XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUVkMjU1MTlDb25kaXRpb24uanMiLCIvKipcbiAqIENyZWF0ZSBhbiBPdXRwdXQgZnJvbSBhIENvbmRpdGlvbi5cbiAqIE5vdGU6IEFzc3VtZXMgdGhlIGdpdmVuIENvbmRpdGlvbiB3YXMgZ2VuZXJhdGVkIGZyb20gYSBzaW5nbGUgcHVibGljIGtleSAoZS5nLiBhIEVkMjU1MTkgQ29uZGl0aW9uKVxuICogQHBhcmFtIHtvYmplY3R9IGNvbmRpdGlvbiBDb25kaXRpb24gKGUuZy4gYSBFZDI1NTE5IENvbmRpdGlvbiBmcm9tIGBtYWtlRWQyNTUxOUNvbmRpdGlvbigpYClcbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgQW1vdW50IG9mIHRoZSBvdXRwdXRcbiAqIEByZXR1cm5zIHtvYmplY3R9IEFuIE91dHB1dCB1c2FibGUgaW4gYSBUcmFuc2FjdGlvblxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlT3V0cHV0KGNvbmRpdGlvbiwgYW1vdW50ID0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAncHVibGljX2tleXMnOiBbY29uZGl0aW9uLmRldGFpbHMucHVibGljX2tleV0sXG4gICAgfTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZU91dHB1dC5qcyIsImltcG9ydCBtYWtlSW5wdXRUZW1wbGF0ZSBmcm9tICcuL21ha2VJbnB1dFRlbXBsYXRlJztcbmltcG9ydCBtYWtlVHJhbnNhY3Rpb24gZnJvbSAnLi9tYWtlVHJhbnNhY3Rpb24nO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgYFRSQU5TRkVSYCB0cmFuc2FjdGlvbiBob2xkaW5nIHRoZSBgYXNzZXRgLCBgbWV0YWRhdGFgLCBhbmQgYG91dHB1dHNgLCB0aGF0IGZ1bGZpbGxzXG4gKiB0aGUgYGZ1bGZpbGxlZE91dHB1dHNgIG9mIGB1bnNwZW50VHJhbnNhY3Rpb25gLlxuICogQHBhcmFtIHtvYmplY3R9IHVuc3BlbnRUcmFuc2FjdGlvbiBQcmV2aW91cyBUcmFuc2FjdGlvbiB5b3UgaGF2ZSBjb250cm9sIG92ZXIgKGkuZS4gY2FuIGZ1bGZpbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRzIE91dHB1dCBDb25kaXRpb24pXG4gKiBAcGFyYW0ge29iamVjdH0gbWV0YWRhdGEgTWV0YWRhdGEgZm9yIHRoZSBUcmFuc2FjdGlvblxuICogQHBhcmFtIHtvYmplY3RbXX0gb3V0cHV0cyBBcnJheSBvZiBPdXRwdXQgb2JqZWN0cyB0byBhZGQgdG8gdGhlIFRyYW5zYWN0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBUaGluayBvZiB0aGVzZSBhcyB0aGUgcmVjaXBpZW50cyBvZiB0aGUgYXNzZXQgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYFRSQU5TRkVSYCBUcmFuc2FjdGlvbnMsIHRoaXMgc2hvdWxkIHVzdWFsbHkganVzdCBiZSBhIGxpc3Qgb2ZcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0cyB3cmFwcGluZyBFZDI1NTE5IENvbmRpdGlvbnMgZ2VuZXJhdGVkIGZyb20gdGhlIHB1YmxpYyBrZXlzIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGllbnRzLlxuICogQHBhcmFtIHsuLi5udW1iZXJ9IGZ1bGZpbGxlZE91dHB1dHMgSW5kaWNlcyBvZiB0aGUgT3V0cHV0cyBpbiBgdW5zcGVudFRyYW5zYWN0aW9uYCB0aGF0IHRoaXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uIGZ1bGZpbGxzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBwdWJsaWMga2V5cyBsaXN0ZWQgaW4gdGhlIGZ1bGZpbGxlZCBPdXRwdXRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHVzZWQgKGFuZCBpbiB0aGUgc2FtZSBvcmRlcikgdG8gc2lnbiB0aGUgVHJhbnNhY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChgc2lnblRyYW5zYWN0aW9uKClgKS5cbiAqIEByZXR1cm5zIHtvYmplY3R9IFVuc2lnbmVkIHRyYW5zYWN0aW9uIC0tIG1ha2Ugc3VyZSB0byBjYWxsIHNpZ25UcmFuc2FjdGlvbigpIG9uIGl0IGJlZm9yZVxuICogICAgICAgICAgICAgICAgICAgc2VuZGluZyBpdCBvZmYhXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VUcmFuc2ZlclRyYW5zYWN0aW9uKHVuc3BlbnRUcmFuc2FjdGlvbiwgbWV0YWRhdGEsIG91dHB1dHMsIC4uLmZ1bGZpbGxlZE91dHB1dHMpIHtcbiAgICBjb25zdCBpbnB1dHMgPSBmdWxmaWxsZWRPdXRwdXRzLm1hcCgob3V0cHV0SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZnVsZmlsbGVkT3V0cHV0ID0gdW5zcGVudFRyYW5zYWN0aW9uLm91dHB1dHNbb3V0cHV0SW5kZXhdO1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbkxpbmsgPSB7XG4gICAgICAgICAgICAnb3V0cHV0Jzogb3V0cHV0SW5kZXgsXG4gICAgICAgICAgICAndHhpZCc6IHVuc3BlbnRUcmFuc2FjdGlvbi5pZCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbWFrZUlucHV0VGVtcGxhdGUoZnVsZmlsbGVkT3V0cHV0LnB1YmxpY19rZXlzLCB0cmFuc2FjdGlvbkxpbmspO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYXNzZXRMaW5rID0ge1xuICAgICAgICAnaWQnOiB1bnNwZW50VHJhbnNhY3Rpb24ub3BlcmF0aW9uID09PSAnQ1JFQVRFJyA/IHVuc3BlbnRUcmFuc2FjdGlvbi5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuc3BlbnRUcmFuc2FjdGlvbi5hc3NldC5pZFxuICAgIH07XG5cbiAgICByZXR1cm4gbWFrZVRyYW5zYWN0aW9uKCdUUkFOU0ZFUicsIGFzc2V0TGluaywgbWV0YWRhdGEsIG91dHB1dHMsIGlucHV0cyk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZVRyYW5zZmVyVHJhbnNhY3Rpb24uanMiLCJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuXG5pbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IGNjIGZyb20gJ2ZpdmUtYmVsbHMtY29uZGl0aW9uJztcbmltcG9ydCBzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcgZnJvbSAnLi9zZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcnO1xuXG4vKipcbiAqIFNpZ24gdGhlIGdpdmVuIGB0cmFuc2FjdGlvbmAgd2l0aCB0aGUgZ2l2ZW4gYHByaXZhdGVLZXlgcywgcmV0dXJuaW5nIGEgbmV3IGNvcHkgb2YgYHRyYW5zYWN0aW9uYFxuICogdGhhdCdzIGJlZW4gc2lnbmVkLlxuICogTm90ZTogT25seSBnZW5lcmF0ZXMgRWQyNTUxOSBGdWxmaWxsbWVudHMuIFRocmVzaG9sZHMgYW5kIG90aGVyIHR5cGVzIG9mIEZ1bGZpbGxtZW50cyBhcmUgbGVmdCBhc1xuICogYW4gZXhlcmNpc2UgZm9yIHRoZSB1c2VyLlxuICogQHBhcmFtIHtvYmplY3R9IHRyYW5zYWN0aW9uIFRyYW5zYWN0aW9uIHRvIHNpZ24uIGB0cmFuc2FjdGlvbmAgaXMgbm90IG1vZGlmaWVkLlxuICogQHBhcmFtIHsuLi5zdHJpbmd9IHByaXZhdGVLZXlzIFByaXZhdGUga2V5cyBhc3NvY2lhdGVkIHdpdGggdGhlIGlzc3VlcnMgb2YgdGhlIGB0cmFuc2FjdGlvbmAuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9vcGVkIHRocm91Z2ggdG8gaXRlcmF0aXZlbHkgc2lnbiBhbnkgSW5wdXQgRnVsZmlsbG1lbnRzIGZvdW5kIGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGB0cmFuc2FjdGlvbmAuXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgc2lnbmVkIHZlcnNpb24gb2YgYHRyYW5zYWN0aW9uYC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2lnblRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCAuLi5wcml2YXRlS2V5cykge1xuICAgIGNvbnN0IHNpZ25lZFR4ID0gY2xvbmUodHJhbnNhY3Rpb24pO1xuICAgIHNpZ25lZFR4LmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHByaXZhdGVLZXlzW2luZGV4XTtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleUJ1ZmZlciA9IG5ldyBCdWZmZXIoYmFzZTU4LmRlY29kZShwcml2YXRlS2V5KSk7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyh0cmFuc2FjdGlvbiwgaW5wdXQpO1xuICAgICAgICBjb25zdCBlZDI1NTE5RnVsZmlsbG1lbnQgPSBuZXcgY2MuRWQyNTUxOSgpO1xuICAgICAgICBlZDI1NTE5RnVsZmlsbG1lbnQuc2lnbihuZXcgQnVmZmVyKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiksIHByaXZhdGVLZXlCdWZmZXIpO1xuICAgICAgICBjb25zdCBmdWxmaWxsbWVudFVyaSA9IGVkMjU1MTlGdWxmaWxsbWVudC5zZXJpYWxpemVVcmkoKTtcblxuICAgICAgICBpbnB1dC5mdWxmaWxsbWVudCA9IGZ1bGZpbGxtZW50VXJpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25lZFR4O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL3NpZ25UcmFuc2FjdGlvbi5qcyIsIi8vIGJhc2UteCBlbmNvZGluZ1xuLy8gRm9ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0b2NvaW5qcy9iczU4XG4vLyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWlrZSBIZWFybiBmb3IgQml0Y29pbkpcbi8vIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jXG4vLyBQb3J0ZWQgdG8gSmF2YVNjcmlwdCBieSBTdGVmYW4gVGhvbWFzXG4vLyBNZXJnZWQgQnVmZmVyIHJlZmFjdG9yaW5ncyBmcm9tIGJhc2U1OC1uYXRpdmUgYnkgU3RlcGhlbiBQYWlyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTMgQml0UGF5IEluY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2UgKEFMUEhBQkVUKSB7XG4gIHZhciBBTFBIQUJFVF9NQVAgPSB7fVxuICB2YXIgQkFTRSA9IEFMUEhBQkVULmxlbmd0aFxuICB2YXIgTEVBREVSID0gQUxQSEFCRVQuY2hhckF0KDApXG5cbiAgLy8gcHJlLWNvbXB1dGUgbG9va3VwIHRhYmxlXG4gIGZvciAodmFyIHogPSAwOyB6IDwgQUxQSEFCRVQubGVuZ3RoOyB6KyspIHtcbiAgICB2YXIgeCA9IEFMUEhBQkVULmNoYXJBdCh6KVxuXG4gICAgaWYgKEFMUEhBQkVUX01BUFt4XSAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgVHlwZUVycm9yKHggKyAnIGlzIGFtYmlndW91cycpXG4gICAgQUxQSEFCRVRfTUFQW3hdID0gelxuICB9XG5cbiAgZnVuY3Rpb24gZW5jb2RlIChzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG5cbiAgICB2YXIgZGlnaXRzID0gWzBdXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyArK2kpIHtcbiAgICAgIGZvciAodmFyIGogPSAwLCBjYXJyeSA9IHNvdXJjZVtpXTsgaiA8IGRpZ2l0cy5sZW5ndGg7ICsraikge1xuICAgICAgICBjYXJyeSArPSBkaWdpdHNbal0gPDwgOFxuICAgICAgICBkaWdpdHNbal0gPSBjYXJyeSAlIEJBU0VcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyBCQVNFKSB8IDBcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGNhcnJ5ID4gMCkge1xuICAgICAgICBkaWdpdHMucHVzaChjYXJyeSAlIEJBU0UpXG4gICAgICAgIGNhcnJ5ID0gKGNhcnJ5IC8gQkFTRSkgfCAwXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZyA9ICcnXG5cbiAgICAvLyBkZWFsIHdpdGggbGVhZGluZyB6ZXJvc1xuICAgIGZvciAodmFyIGsgPSAwOyBzb3VyY2Vba10gPT09IDAgJiYgayA8IHNvdXJjZS5sZW5ndGggLSAxOyArK2spIHN0cmluZyArPSBBTFBIQUJFVFswXVxuICAgIC8vIGNvbnZlcnQgZGlnaXRzIHRvIGEgc3RyaW5nXG4gICAgZm9yICh2YXIgcSA9IGRpZ2l0cy5sZW5ndGggLSAxOyBxID49IDA7IC0tcSkgc3RyaW5nICs9IEFMUEhBQkVUW2RpZ2l0c1txXV1cblxuICAgIHJldHVybiBzdHJpbmdcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZVVuc2FmZSAoc3RyaW5nKSB7XG4gICAgaWYgKHN0cmluZy5sZW5ndGggPT09IDApIHJldHVybiBuZXcgQnVmZmVyKDApXG5cbiAgICB2YXIgYnl0ZXMgPSBbMF1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gQUxQSEFCRVRfTUFQW3N0cmluZ1tpXV1cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm5cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGNhcnJ5ID0gdmFsdWU7IGogPCBieXRlcy5sZW5ndGg7ICsraikge1xuICAgICAgICBjYXJyeSArPSBieXRlc1tqXSAqIEJBU0VcbiAgICAgICAgYnl0ZXNbal0gPSBjYXJyeSAmIDB4ZmZcbiAgICAgICAgY2FycnkgPj49IDhcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGNhcnJ5ID4gMCkge1xuICAgICAgICBieXRlcy5wdXNoKGNhcnJ5ICYgMHhmZilcbiAgICAgICAgY2FycnkgPj49IDhcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWFsIHdpdGggbGVhZGluZyB6ZXJvc1xuICAgIGZvciAodmFyIGsgPSAwOyBzdHJpbmdba10gPT09IExFQURFUiAmJiBrIDwgc3RyaW5nLmxlbmd0aCAtIDE7ICsraykge1xuICAgICAgYnl0ZXMucHVzaCgwKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgQnVmZmVyKGJ5dGVzLnJldmVyc2UoKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZSAoc3RyaW5nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IGRlY29kZVVuc2FmZShzdHJpbmcpXG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGJ1ZmZlclxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb24tYmFzZScgKyBCQVNFICsgJyBjaGFyYWN0ZXInKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBkZWNvZGVVbnNhZmU6IGRlY29kZVVuc2FmZSxcbiAgICBkZWNvZGU6IGRlY29kZVxuICB9XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFzZS14L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBwbGFjZUhvbGRlcnNDb3VudCAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyB0aGUgbnVtYmVyIG9mIGVxdWFsIHNpZ25zIChwbGFjZSBob2xkZXJzKVxuICAvLyBpZiB0aGVyZSBhcmUgdHdvIHBsYWNlaG9sZGVycywgdGhhbiB0aGUgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIGl0XG4gIC8vIHJlcHJlc2VudCBvbmUgYnl0ZVxuICAvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSwgdGhlbiB0aGUgdGhyZWUgY2hhcmFjdGVycyBiZWZvcmUgaXQgcmVwcmVzZW50IDIgYnl0ZXNcbiAgLy8gdGhpcyBpcyBqdXN0IGEgY2hlYXAgaGFjayB0byBub3QgZG8gaW5kZXhPZiB0d2ljZVxuICByZXR1cm4gYjY0W2xlbiAtIDJdID09PSAnPScgPyAyIDogYjY0W2xlbiAtIDFdID09PSAnPScgPyAxIDogMFxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG4gIHJldHVybiBiNjQubGVuZ3RoICogMyAvIDQgLSBwbGFjZUhvbGRlcnNDb3VudChiNjQpXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIGksIGosIGwsIHRtcCwgcGxhY2VIb2xkZXJzLCBhcnJcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcbiAgcGxhY2VIb2xkZXJzID0gcGxhY2VIb2xkZXJzQ291bnQoYjY0KVxuXG4gIGFyciA9IG5ldyBBcnIobGVuICogMyAvIDQgLSBwbGFjZUhvbGRlcnMpXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICBsID0gcGxhY2VIb2xkZXJzID4gMCA/IGxlbiAtIDQgOiBsZW5cblxuICB2YXIgTCA9IDBcblxuICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGw7IGkgKz0gNCwgaiArPSAzKSB7XG4gICAgdG1wID0gKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8IHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW0wrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzID09PSAyKSB7XG4gICAgdG1wID0gKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfSBlbHNlIGlmIChwbGFjZUhvbGRlcnMgPT09IDEpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW0wrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gKyBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gKyBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPSAodWludDhbaV0gPDwgMTYpICsgKHVpbnQ4W2kgKyAxXSA8PCA4KSArICh1aW50OFtpICsgMl0pXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBvdXRwdXQgPSAnJ1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFt0bXAgPj4gMl1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXVxuICAgIG91dHB1dCArPSAnPT0nXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArICh1aW50OFtsZW4gLSAxXSlcbiAgICBvdXRwdXQgKz0gbG9va3VwW3RtcCA+PiAxMF1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9ICc9J1xuICB9XG5cbiAgcGFydHMucHVzaChvdXRwdXQpXG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYmFzZTY0LWpzL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9pZWVlNzU0L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9pc2FycmF5L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcclxuICogW2pzLXNoYTNde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW4xNzgvanMtc2hhM31cclxuICpcclxuICogQHZlcnNpb24gMC41LjdcclxuICogQGF1dGhvciBDaGVuLCBZaS1DeXVhbiBbZW1uMTc4QGdtYWlsLmNvbV1cclxuICogQGNvcHlyaWdodCBDaGVuLCBZaS1DeXVhbiAyMDE1LTIwMTZcclxuICogQGxpY2Vuc2UgTUlUXHJcbiAqL1xyXG4vKmpzbGludCBiaXR3aXNlOiB0cnVlICovXHJcbihmdW5jdGlvbiAoKSB7XHJcbiAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuICB2YXIgcm9vdCA9IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnID8gd2luZG93IDoge307XHJcbiAgdmFyIE5PREVfSlMgPSAhcm9vdC5KU19TSEEzX05PX05PREVfSlMgJiYgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xyXG4gIGlmIChOT0RFX0pTKSB7XHJcbiAgICByb290ID0gZ2xvYmFsO1xyXG4gIH1cclxuICB2YXIgQ09NTU9OX0pTID0gIXJvb3QuSlNfU0hBM19OT19DT01NT05fSlMgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHM7XHJcbiAgdmFyIEhFWF9DSEFSUyA9ICcwMTIzNDU2Nzg5YWJjZGVmJy5zcGxpdCgnJyk7XHJcbiAgdmFyIFNIQUtFX1BBRERJTkcgPSBbMzEsIDc5MzYsIDIwMzE2MTYsIDUyMDA5MzY5Nl07XHJcbiAgdmFyIEtFQ0NBS19QQURESU5HID0gWzEsIDI1NiwgNjU1MzYsIDE2Nzc3MjE2XTtcclxuICB2YXIgUEFERElORyA9IFs2LCAxNTM2LCAzOTMyMTYsIDEwMDY2MzI5Nl07XHJcbiAgdmFyIFNISUZUID0gWzAsIDgsIDE2LCAyNF07XHJcbiAgdmFyIFJDID0gWzEsIDAsIDMyODk4LCAwLCAzMjkwNiwgMjE0NzQ4MzY0OCwgMjE0NzUxNjQxNiwgMjE0NzQ4MzY0OCwgMzI5MDcsIDAsIDIxNDc0ODM2NDksXHJcbiAgICAgICAgICAgIDAsIDIxNDc1MTY1NDUsIDIxNDc0ODM2NDgsIDMyNzc3LCAyMTQ3NDgzNjQ4LCAxMzgsIDAsIDEzNiwgMCwgMjE0NzUxNjQyNSwgMCxcclxuICAgICAgICAgICAgMjE0NzQ4MzY1OCwgMCwgMjE0NzUxNjU1NSwgMCwgMTM5LCAyMTQ3NDgzNjQ4LCAzMjkwNSwgMjE0NzQ4MzY0OCwgMzI3NzEsXHJcbiAgICAgICAgICAgIDIxNDc0ODM2NDgsIDMyNzcwLCAyMTQ3NDgzNjQ4LCAxMjgsIDIxNDc0ODM2NDgsIDMyNzc4LCAwLCAyMTQ3NDgzNjU4LCAyMTQ3NDgzNjQ4LFxyXG4gICAgICAgICAgICAyMTQ3NTE2NTQ1LCAyMTQ3NDgzNjQ4LCAzMjg5NiwgMjE0NzQ4MzY0OCwgMjE0NzQ4MzY0OSwgMCwgMjE0NzUxNjQyNCwgMjE0NzQ4MzY0OF07XHJcbiAgdmFyIEJJVFMgPSBbMjI0LCAyNTYsIDM4NCwgNTEyXTtcclxuICB2YXIgU0hBS0VfQklUUyA9IFsxMjgsIDI1Nl07XHJcbiAgdmFyIE9VVFBVVF9UWVBFUyA9IFsnaGV4JywgJ2J1ZmZlcicsICdhcnJheUJ1ZmZlcicsICdhcnJheSddO1xyXG5cclxuICB2YXIgY3JlYXRlT3V0cHV0TWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcsIG91dHB1dFR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBiaXRzKS51cGRhdGUobWVzc2FnZSlbb3V0cHV0VHlwZV0oKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdmFyIGNyZWF0ZVNoYWtlT3V0cHV0TWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcsIG91dHB1dFR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwgb3V0cHV0Qml0cykge1xyXG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKS51cGRhdGUobWVzc2FnZSlbb3V0cHV0VHlwZV0oKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nKSB7XHJcbiAgICB2YXIgbWV0aG9kID0gY3JlYXRlT3V0cHV0TWV0aG9kKGJpdHMsIHBhZGRpbmcsICdoZXgnKTtcclxuICAgIG1ldGhvZC5jcmVhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBuZXcgS2VjY2FrKGJpdHMsIHBhZGRpbmcsIGJpdHMpO1xyXG4gICAgfTtcclxuICAgIG1ldGhvZC51cGRhdGUgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgICByZXR1cm4gbWV0aG9kLmNyZWF0ZSgpLnVwZGF0ZShtZXNzYWdlKTtcclxuICAgIH07XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE9VVFBVVF9UWVBFUy5sZW5ndGg7ICsraSkge1xyXG4gICAgICB2YXIgdHlwZSA9IE9VVFBVVF9UWVBFU1tpXTtcclxuICAgICAgbWV0aG9kW3R5cGVdID0gY3JlYXRlT3V0cHV0TWV0aG9kKGJpdHMsIHBhZGRpbmcsIHR5cGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1ldGhvZDtcclxuICB9O1xyXG5cclxuICB2YXIgY3JlYXRlU2hha2VNZXRob2QgPSBmdW5jdGlvbiAoYml0cywgcGFkZGluZykge1xyXG4gICAgdmFyIG1ldGhvZCA9IGNyZWF0ZVNoYWtlT3V0cHV0TWV0aG9kKGJpdHMsIHBhZGRpbmcsICdoZXgnKTtcclxuICAgIG1ldGhvZC5jcmVhdGUgPSBmdW5jdGlvbiAob3V0cHV0Qml0cykge1xyXG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKTtcclxuICAgIH07XHJcbiAgICBtZXRob2QudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG91dHB1dEJpdHMpIHtcclxuICAgICAgcmV0dXJuIG1ldGhvZC5jcmVhdGUob3V0cHV0Qml0cykudXBkYXRlKG1lc3NhZ2UpO1xyXG4gICAgfTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgT1VUUFVUX1RZUEVTLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIHZhciB0eXBlID0gT1VUUFVUX1RZUEVTW2ldO1xyXG4gICAgICBtZXRob2RbdHlwZV0gPSBjcmVhdGVTaGFrZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCB0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRob2Q7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGFsZ29yaXRobXMgPSBbXHJcbiAgICB7bmFtZTogJ2tlY2NhaycsIHBhZGRpbmc6IEtFQ0NBS19QQURESU5HLCBiaXRzOiBCSVRTLCBjcmVhdGVNZXRob2Q6IGNyZWF0ZU1ldGhvZH0sXHJcbiAgICB7bmFtZTogJ3NoYTMnLCBwYWRkaW5nOiBQQURESU5HLCBiaXRzOiBCSVRTLCBjcmVhdGVNZXRob2Q6IGNyZWF0ZU1ldGhvZH0sXHJcbiAgICB7bmFtZTogJ3NoYWtlJywgcGFkZGluZzogU0hBS0VfUEFERElORywgYml0czogU0hBS0VfQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVTaGFrZU1ldGhvZH1cclxuICBdO1xyXG5cclxuICB2YXIgbWV0aG9kcyA9IHt9LCBtZXRob2ROYW1lcyA9IFtdO1xyXG5cclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsZ29yaXRobXMubGVuZ3RoOyArK2kpIHtcclxuICAgIHZhciBhbGdvcml0aG0gPSBhbGdvcml0aG1zW2ldO1xyXG4gICAgdmFyIGJpdHMgID0gYWxnb3JpdGhtLmJpdHM7XHJcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJpdHMubGVuZ3RoOyArK2opIHtcclxuICAgICAgdmFyIG1ldGhvZE5hbWUgPSBhbGdvcml0aG0ubmFtZSArJ18nICsgYml0c1tqXTtcclxuICAgICAgbWV0aG9kTmFtZXMucHVzaChtZXRob2ROYW1lKTtcclxuICAgICAgbWV0aG9kc1ttZXRob2ROYW1lXSA9IGFsZ29yaXRobS5jcmVhdGVNZXRob2QoYml0c1tqXSwgYWxnb3JpdGhtLnBhZGRpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gS2VjY2FrKGJpdHMsIHBhZGRpbmcsIG91dHB1dEJpdHMpIHtcclxuICAgIHRoaXMuYmxvY2tzID0gW107XHJcbiAgICB0aGlzLnMgPSBbXTtcclxuICAgIHRoaXMucGFkZGluZyA9IHBhZGRpbmc7XHJcbiAgICB0aGlzLm91dHB1dEJpdHMgPSBvdXRwdXRCaXRzO1xyXG4gICAgdGhpcy5yZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLmJsb2NrID0gMDtcclxuICAgIHRoaXMuc3RhcnQgPSAwO1xyXG4gICAgdGhpcy5ibG9ja0NvdW50ID0gKDE2MDAgLSAoYml0cyA8PCAxKSkgPj4gNTtcclxuICAgIHRoaXMuYnl0ZUNvdW50ID0gdGhpcy5ibG9ja0NvdW50IDw8IDI7XHJcbiAgICB0aGlzLm91dHB1dEJsb2NrcyA9IG91dHB1dEJpdHMgPj4gNTtcclxuICAgIHRoaXMuZXh0cmFCeXRlcyA9IChvdXRwdXRCaXRzICYgMzEpID4+IDM7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKSB7XHJcbiAgICAgIHRoaXMuc1tpXSA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XHJcbiAgICB2YXIgbm90U3RyaW5nID0gdHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnO1xyXG4gICAgaWYgKG5vdFN0cmluZyAmJiBtZXNzYWdlLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xyXG4gICAgICBtZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGgsIGJsb2NrcyA9IHRoaXMuYmxvY2tzLCBieXRlQ291bnQgPSB0aGlzLmJ5dGVDb3VudCxcclxuICAgICAgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgaW5kZXggPSAwLCBzID0gdGhpcy5zLCBpLCBjb2RlO1xyXG5cclxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgICBpZiAodGhpcy5yZXNldCkge1xyXG4gICAgICAgIHRoaXMucmVzZXQgPSBmYWxzZTtcclxuICAgICAgICBibG9ja3NbMF0gPSB0aGlzLmJsb2NrO1xyXG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBibG9ja0NvdW50ICsgMTsgKytpKSB7XHJcbiAgICAgICAgICBibG9ja3NbaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobm90U3RyaW5nKSB7XHJcbiAgICAgICAgZm9yIChpID0gdGhpcy5zdGFydDsgaW5kZXggPCBsZW5ndGggJiYgaSA8IGJ5dGVDb3VudDsgKytpbmRleCkge1xyXG4gICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gbWVzc2FnZVtpbmRleF0gPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSA9IHRoaXMuc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCBieXRlQ291bnQ7ICsraW5kZXgpIHtcclxuICAgICAgICAgIGNvZGUgPSBtZXNzYWdlLmNoYXJDb2RlQXQoaW5kZXgpO1xyXG4gICAgICAgICAgaWYgKGNvZGUgPCAweDgwKSB7XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9IGNvZGUgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweDgwMCkge1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhjMCB8IChjb2RlID4+IDYpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ZDgwMCB8fCBjb2RlID49IDB4ZTAwMCkge1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhlMCB8IChjb2RlID4+IDEyKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8IChjb2RlICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChtZXNzYWdlLmNoYXJDb2RlQXQoKytpbmRleCkgJiAweDNmZikpO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhmMCB8IChjb2RlID4+IDE4KSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDEyKSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKGNvZGUgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFzdEJ5dGVJbmRleCA9IGk7XHJcbiAgICAgIGlmIChpID49IGJ5dGVDb3VudCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSBpIC0gYnl0ZUNvdW50O1xyXG4gICAgICAgIHRoaXMuYmxvY2sgPSBibG9ja3NbYmxvY2tDb3VudF07XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQ7ICsraSkge1xyXG4gICAgICAgICAgc1tpXSBePSBibG9ja3NbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGYocyk7XHJcbiAgICAgICAgdGhpcy5yZXNldCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGFydCA9IGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIEtlY2Nhay5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYmxvY2tzID0gdGhpcy5ibG9ja3MsIGkgPSB0aGlzLmxhc3RCeXRlSW5kZXgsIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnM7XHJcbiAgICBibG9ja3NbaSA+PiAyXSB8PSB0aGlzLnBhZGRpbmdbaSAmIDNdO1xyXG4gICAgaWYgKHRoaXMubGFzdEJ5dGVJbmRleCA9PT0gdGhpcy5ieXRlQ291bnQpIHtcclxuICAgICAgYmxvY2tzWzBdID0gYmxvY2tzW2Jsb2NrQ291bnRdO1xyXG4gICAgICBmb3IgKGkgPSAxOyBpIDwgYmxvY2tDb3VudCArIDE7ICsraSkge1xyXG4gICAgICAgIGJsb2Nrc1tpXSA9IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGJsb2Nrc1tibG9ja0NvdW50IC0gMV0gfD0gMHg4MDAwMDAwMDtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50OyArK2kpIHtcclxuICAgICAgc1tpXSBePSBibG9ja3NbaV07XHJcbiAgICB9XHJcbiAgICBmKHMpO1xyXG4gIH07XHJcblxyXG4gIEtlY2Nhay5wcm90b3R5cGUudG9TdHJpbmcgPSBLZWNjYWsucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZmluYWxpemUoKTtcclxuXHJcbiAgICB2YXIgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgcyA9IHRoaXMucywgb3V0cHV0QmxvY2tzID0gdGhpcy5vdXRwdXRCbG9ja3MsXHJcbiAgICAgICAgZXh0cmFCeXRlcyA9IHRoaXMuZXh0cmFCeXRlcywgaSA9IDAsIGogPSAwO1xyXG4gICAgdmFyIGhleCA9ICcnLCBibG9jaztcclxuICAgIHdoaWxlIChqIDwgb3V0cHV0QmxvY2tzKSB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50ICYmIGogPCBvdXRwdXRCbG9ja3M7ICsraSwgKytqKSB7XHJcbiAgICAgICAgYmxvY2sgPSBzW2ldO1xyXG4gICAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGJsb2NrID4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbYmxvY2sgJiAweDBGXSArXHJcbiAgICAgICAgICAgICAgIEhFWF9DSEFSU1soYmxvY2sgPj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGJsb2NrID4+IDgpICYgMHgwRl0gK1xyXG4gICAgICAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiAxNikgJiAweDBGXSArXHJcbiAgICAgICAgICAgICAgIEhFWF9DSEFSU1soYmxvY2sgPj4gMjgpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGJsb2NrID4+IDI0KSAmIDB4MEZdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChqICUgYmxvY2tDb3VudCA9PT0gMCkge1xyXG4gICAgICAgIGYocyk7XHJcbiAgICAgICAgaSA9IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChleHRyYUJ5dGVzKSB7XHJcbiAgICAgIGJsb2NrID0gc1tpXTtcclxuICAgICAgaWYgKGV4dHJhQnl0ZXMgPiAwKSB7XHJcbiAgICAgICAgaGV4ICs9IEhFWF9DSEFSU1soYmxvY2sgPj4gNCkgJiAweDBGXSArIEhFWF9DSEFSU1tibG9jayAmIDB4MEZdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMSkge1xyXG4gICAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGJsb2NrID4+IDEyKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiA4KSAmIDB4MEZdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMikge1xyXG4gICAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGJsb2NrID4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiAxNikgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhleDtcclxuICB9O1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLmFycmF5QnVmZmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5maW5hbGl6ZSgpO1xyXG5cclxuICAgIHZhciBibG9ja0NvdW50ID0gdGhpcy5ibG9ja0NvdW50LCBzID0gdGhpcy5zLCBvdXRwdXRCbG9ja3MgPSB0aGlzLm91dHB1dEJsb2NrcyxcclxuICAgICAgICBleHRyYUJ5dGVzID0gdGhpcy5leHRyYUJ5dGVzLCBpID0gMCwgaiA9IDA7XHJcbiAgICB2YXIgYnl0ZXMgPSB0aGlzLm91dHB1dEJpdHMgPj4gMztcclxuICAgIHZhciBidWZmZXI7XHJcbiAgICBpZiAoZXh0cmFCeXRlcykge1xyXG4gICAgICBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoKG91dHB1dEJsb2NrcyArIDEpIDw8IDIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVzKTtcclxuICAgIH1cclxuICAgIHZhciBhcnJheSA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xyXG4gICAgd2hpbGUgKGogPCBvdXRwdXRCbG9ja3MpIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQgJiYgaiA8IG91dHB1dEJsb2NrczsgKytpLCArK2opIHtcclxuICAgICAgICBhcnJheVtqXSA9IHNbaV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGogJSBibG9ja0NvdW50ID09PSAwKSB7XHJcbiAgICAgICAgZihzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGV4dHJhQnl0ZXMpIHtcclxuICAgICAgYXJyYXlbaV0gPSBzW2ldO1xyXG4gICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UoMCwgYnl0ZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1ZmZlcjtcclxuICB9O1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLmJ1ZmZlciA9IEtlY2Nhay5wcm90b3R5cGUuYXJyYXlCdWZmZXI7XHJcblxyXG4gIEtlY2Nhay5wcm90b3R5cGUuZGlnZXN0ID0gS2VjY2FrLnByb3RvdHlwZS5hcnJheSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZmluYWxpemUoKTtcclxuXHJcbiAgICB2YXIgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgcyA9IHRoaXMucywgb3V0cHV0QmxvY2tzID0gdGhpcy5vdXRwdXRCbG9ja3MsXHJcbiAgICAgICAgZXh0cmFCeXRlcyA9IHRoaXMuZXh0cmFCeXRlcywgaSA9IDAsIGogPSAwO1xyXG4gICAgdmFyIGFycmF5ID0gW10sIG9mZnNldCwgYmxvY2s7XHJcbiAgICB3aGlsZSAoaiA8IG91dHB1dEJsb2Nrcykge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudCAmJiBqIDwgb3V0cHV0QmxvY2tzOyArK2ksICsraikge1xyXG4gICAgICAgIG9mZnNldCA9IGogPDwgMjtcclxuICAgICAgICBibG9jayA9IHNbaV07XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IGJsb2NrICYgMHhGRjtcclxuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IChibG9jayA+PiA4KSAmIDB4RkY7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMl0gPSAoYmxvY2sgPj4gMTYpICYgMHhGRjtcclxuICAgICAgICBhcnJheVtvZmZzZXQgKyAzXSA9IChibG9jayA+PiAyNCkgJiAweEZGO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChqICUgYmxvY2tDb3VudCA9PT0gMCkge1xyXG4gICAgICAgIGYocyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChleHRyYUJ5dGVzKSB7XHJcbiAgICAgIG9mZnNldCA9IGogPDwgMjtcclxuICAgICAgYmxvY2sgPSBzW2ldO1xyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDApIHtcclxuICAgICAgICBhcnJheVtvZmZzZXRdID0gYmxvY2sgJiAweEZGO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMSkge1xyXG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gKGJsb2NrID4+IDgpICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDIpIHtcclxuICAgICAgICBhcnJheVtvZmZzZXQgKyAyXSA9IChibG9jayA+PiAxNikgJiAweEZGO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGYgPSBmdW5jdGlvbiAocykge1xyXG4gICAgdmFyIGgsIGwsIG4sIGMwLCBjMSwgYzIsIGMzLCBjNCwgYzUsIGM2LCBjNywgYzgsIGM5LFxyXG4gICAgICAgIGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNywgYjgsIGI5LCBiMTAsIGIxMSwgYjEyLCBiMTMsIGIxNCwgYjE1LCBiMTYsIGIxNyxcclxuICAgICAgICBiMTgsIGIxOSwgYjIwLCBiMjEsIGIyMiwgYjIzLCBiMjQsIGIyNSwgYjI2LCBiMjcsIGIyOCwgYjI5LCBiMzAsIGIzMSwgYjMyLCBiMzMsXHJcbiAgICAgICAgYjM0LCBiMzUsIGIzNiwgYjM3LCBiMzgsIGIzOSwgYjQwLCBiNDEsIGI0MiwgYjQzLCBiNDQsIGI0NSwgYjQ2LCBiNDcsIGI0OCwgYjQ5O1xyXG4gICAgZm9yIChuID0gMDsgbiA8IDQ4OyBuICs9IDIpIHtcclxuICAgICAgYzAgPSBzWzBdIF4gc1sxMF0gXiBzWzIwXSBeIHNbMzBdIF4gc1s0MF07XHJcbiAgICAgIGMxID0gc1sxXSBeIHNbMTFdIF4gc1syMV0gXiBzWzMxXSBeIHNbNDFdO1xyXG4gICAgICBjMiA9IHNbMl0gXiBzWzEyXSBeIHNbMjJdIF4gc1szMl0gXiBzWzQyXTtcclxuICAgICAgYzMgPSBzWzNdIF4gc1sxM10gXiBzWzIzXSBeIHNbMzNdIF4gc1s0M107XHJcbiAgICAgIGM0ID0gc1s0XSBeIHNbMTRdIF4gc1syNF0gXiBzWzM0XSBeIHNbNDRdO1xyXG4gICAgICBjNSA9IHNbNV0gXiBzWzE1XSBeIHNbMjVdIF4gc1szNV0gXiBzWzQ1XTtcclxuICAgICAgYzYgPSBzWzZdIF4gc1sxNl0gXiBzWzI2XSBeIHNbMzZdIF4gc1s0Nl07XHJcbiAgICAgIGM3ID0gc1s3XSBeIHNbMTddIF4gc1syN10gXiBzWzM3XSBeIHNbNDddO1xyXG4gICAgICBjOCA9IHNbOF0gXiBzWzE4XSBeIHNbMjhdIF4gc1szOF0gXiBzWzQ4XTtcclxuICAgICAgYzkgPSBzWzldIF4gc1sxOV0gXiBzWzI5XSBeIHNbMzldIF4gc1s0OV07XHJcblxyXG4gICAgICBoID0gYzggXiAoKGMyIDw8IDEpIHwgKGMzID4+PiAzMSkpO1xyXG4gICAgICBsID0gYzkgXiAoKGMzIDw8IDEpIHwgKGMyID4+PiAzMSkpO1xyXG4gICAgICBzWzBdIF49IGg7XHJcbiAgICAgIHNbMV0gXj0gbDtcclxuICAgICAgc1sxMF0gXj0gaDtcclxuICAgICAgc1sxMV0gXj0gbDtcclxuICAgICAgc1syMF0gXj0gaDtcclxuICAgICAgc1syMV0gXj0gbDtcclxuICAgICAgc1szMF0gXj0gaDtcclxuICAgICAgc1szMV0gXj0gbDtcclxuICAgICAgc1s0MF0gXj0gaDtcclxuICAgICAgc1s0MV0gXj0gbDtcclxuICAgICAgaCA9IGMwIF4gKChjNCA8PCAxKSB8IChjNSA+Pj4gMzEpKTtcclxuICAgICAgbCA9IGMxIF4gKChjNSA8PCAxKSB8IChjNCA+Pj4gMzEpKTtcclxuICAgICAgc1syXSBePSBoO1xyXG4gICAgICBzWzNdIF49IGw7XHJcbiAgICAgIHNbMTJdIF49IGg7XHJcbiAgICAgIHNbMTNdIF49IGw7XHJcbiAgICAgIHNbMjJdIF49IGg7XHJcbiAgICAgIHNbMjNdIF49IGw7XHJcbiAgICAgIHNbMzJdIF49IGg7XHJcbiAgICAgIHNbMzNdIF49IGw7XHJcbiAgICAgIHNbNDJdIF49IGg7XHJcbiAgICAgIHNbNDNdIF49IGw7XHJcbiAgICAgIGggPSBjMiBeICgoYzYgPDwgMSkgfCAoYzcgPj4+IDMxKSk7XHJcbiAgICAgIGwgPSBjMyBeICgoYzcgPDwgMSkgfCAoYzYgPj4+IDMxKSk7XHJcbiAgICAgIHNbNF0gXj0gaDtcclxuICAgICAgc1s1XSBePSBsO1xyXG4gICAgICBzWzE0XSBePSBoO1xyXG4gICAgICBzWzE1XSBePSBsO1xyXG4gICAgICBzWzI0XSBePSBoO1xyXG4gICAgICBzWzI1XSBePSBsO1xyXG4gICAgICBzWzM0XSBePSBoO1xyXG4gICAgICBzWzM1XSBePSBsO1xyXG4gICAgICBzWzQ0XSBePSBoO1xyXG4gICAgICBzWzQ1XSBePSBsO1xyXG4gICAgICBoID0gYzQgXiAoKGM4IDw8IDEpIHwgKGM5ID4+PiAzMSkpO1xyXG4gICAgICBsID0gYzUgXiAoKGM5IDw8IDEpIHwgKGM4ID4+PiAzMSkpO1xyXG4gICAgICBzWzZdIF49IGg7XHJcbiAgICAgIHNbN10gXj0gbDtcclxuICAgICAgc1sxNl0gXj0gaDtcclxuICAgICAgc1sxN10gXj0gbDtcclxuICAgICAgc1syNl0gXj0gaDtcclxuICAgICAgc1syN10gXj0gbDtcclxuICAgICAgc1szNl0gXj0gaDtcclxuICAgICAgc1szN10gXj0gbDtcclxuICAgICAgc1s0Nl0gXj0gaDtcclxuICAgICAgc1s0N10gXj0gbDtcclxuICAgICAgaCA9IGM2IF4gKChjMCA8PCAxKSB8IChjMSA+Pj4gMzEpKTtcclxuICAgICAgbCA9IGM3IF4gKChjMSA8PCAxKSB8IChjMCA+Pj4gMzEpKTtcclxuICAgICAgc1s4XSBePSBoO1xyXG4gICAgICBzWzldIF49IGw7XHJcbiAgICAgIHNbMThdIF49IGg7XHJcbiAgICAgIHNbMTldIF49IGw7XHJcbiAgICAgIHNbMjhdIF49IGg7XHJcbiAgICAgIHNbMjldIF49IGw7XHJcbiAgICAgIHNbMzhdIF49IGg7XHJcbiAgICAgIHNbMzldIF49IGw7XHJcbiAgICAgIHNbNDhdIF49IGg7XHJcbiAgICAgIHNbNDldIF49IGw7XHJcblxyXG4gICAgICBiMCA9IHNbMF07XHJcbiAgICAgIGIxID0gc1sxXTtcclxuICAgICAgYjMyID0gKHNbMTFdIDw8IDQpIHwgKHNbMTBdID4+PiAyOCk7XHJcbiAgICAgIGIzMyA9IChzWzEwXSA8PCA0KSB8IChzWzExXSA+Pj4gMjgpO1xyXG4gICAgICBiMTQgPSAoc1syMF0gPDwgMykgfCAoc1syMV0gPj4+IDI5KTtcclxuICAgICAgYjE1ID0gKHNbMjFdIDw8IDMpIHwgKHNbMjBdID4+PiAyOSk7XHJcbiAgICAgIGI0NiA9IChzWzMxXSA8PCA5KSB8IChzWzMwXSA+Pj4gMjMpO1xyXG4gICAgICBiNDcgPSAoc1szMF0gPDwgOSkgfCAoc1szMV0gPj4+IDIzKTtcclxuICAgICAgYjI4ID0gKHNbNDBdIDw8IDE4KSB8IChzWzQxXSA+Pj4gMTQpO1xyXG4gICAgICBiMjkgPSAoc1s0MV0gPDwgMTgpIHwgKHNbNDBdID4+PiAxNCk7XHJcbiAgICAgIGIyMCA9IChzWzJdIDw8IDEpIHwgKHNbM10gPj4+IDMxKTtcclxuICAgICAgYjIxID0gKHNbM10gPDwgMSkgfCAoc1syXSA+Pj4gMzEpO1xyXG4gICAgICBiMiA9IChzWzEzXSA8PCAxMikgfCAoc1sxMl0gPj4+IDIwKTtcclxuICAgICAgYjMgPSAoc1sxMl0gPDwgMTIpIHwgKHNbMTNdID4+PiAyMCk7XHJcbiAgICAgIGIzNCA9IChzWzIyXSA8PCAxMCkgfCAoc1syM10gPj4+IDIyKTtcclxuICAgICAgYjM1ID0gKHNbMjNdIDw8IDEwKSB8IChzWzIyXSA+Pj4gMjIpO1xyXG4gICAgICBiMTYgPSAoc1szM10gPDwgMTMpIHwgKHNbMzJdID4+PiAxOSk7XHJcbiAgICAgIGIxNyA9IChzWzMyXSA8PCAxMykgfCAoc1szM10gPj4+IDE5KTtcclxuICAgICAgYjQ4ID0gKHNbNDJdIDw8IDIpIHwgKHNbNDNdID4+PiAzMCk7XHJcbiAgICAgIGI0OSA9IChzWzQzXSA8PCAyKSB8IChzWzQyXSA+Pj4gMzApO1xyXG4gICAgICBiNDAgPSAoc1s1XSA8PCAzMCkgfCAoc1s0XSA+Pj4gMik7XHJcbiAgICAgIGI0MSA9IChzWzRdIDw8IDMwKSB8IChzWzVdID4+PiAyKTtcclxuICAgICAgYjIyID0gKHNbMTRdIDw8IDYpIHwgKHNbMTVdID4+PiAyNik7XHJcbiAgICAgIGIyMyA9IChzWzE1XSA8PCA2KSB8IChzWzE0XSA+Pj4gMjYpO1xyXG4gICAgICBiNCA9IChzWzI1XSA8PCAxMSkgfCAoc1syNF0gPj4+IDIxKTtcclxuICAgICAgYjUgPSAoc1syNF0gPDwgMTEpIHwgKHNbMjVdID4+PiAyMSk7XHJcbiAgICAgIGIzNiA9IChzWzM0XSA8PCAxNSkgfCAoc1szNV0gPj4+IDE3KTtcclxuICAgICAgYjM3ID0gKHNbMzVdIDw8IDE1KSB8IChzWzM0XSA+Pj4gMTcpO1xyXG4gICAgICBiMTggPSAoc1s0NV0gPDwgMjkpIHwgKHNbNDRdID4+PiAzKTtcclxuICAgICAgYjE5ID0gKHNbNDRdIDw8IDI5KSB8IChzWzQ1XSA+Pj4gMyk7XHJcbiAgICAgIGIxMCA9IChzWzZdIDw8IDI4KSB8IChzWzddID4+PiA0KTtcclxuICAgICAgYjExID0gKHNbN10gPDwgMjgpIHwgKHNbNl0gPj4+IDQpO1xyXG4gICAgICBiNDIgPSAoc1sxN10gPDwgMjMpIHwgKHNbMTZdID4+PiA5KTtcclxuICAgICAgYjQzID0gKHNbMTZdIDw8IDIzKSB8IChzWzE3XSA+Pj4gOSk7XHJcbiAgICAgIGIyNCA9IChzWzI2XSA8PCAyNSkgfCAoc1syN10gPj4+IDcpO1xyXG4gICAgICBiMjUgPSAoc1syN10gPDwgMjUpIHwgKHNbMjZdID4+PiA3KTtcclxuICAgICAgYjYgPSAoc1szNl0gPDwgMjEpIHwgKHNbMzddID4+PiAxMSk7XHJcbiAgICAgIGI3ID0gKHNbMzddIDw8IDIxKSB8IChzWzM2XSA+Pj4gMTEpO1xyXG4gICAgICBiMzggPSAoc1s0N10gPDwgMjQpIHwgKHNbNDZdID4+PiA4KTtcclxuICAgICAgYjM5ID0gKHNbNDZdIDw8IDI0KSB8IChzWzQ3XSA+Pj4gOCk7XHJcbiAgICAgIGIzMCA9IChzWzhdIDw8IDI3KSB8IChzWzldID4+PiA1KTtcclxuICAgICAgYjMxID0gKHNbOV0gPDwgMjcpIHwgKHNbOF0gPj4+IDUpO1xyXG4gICAgICBiMTIgPSAoc1sxOF0gPDwgMjApIHwgKHNbMTldID4+PiAxMik7XHJcbiAgICAgIGIxMyA9IChzWzE5XSA8PCAyMCkgfCAoc1sxOF0gPj4+IDEyKTtcclxuICAgICAgYjQ0ID0gKHNbMjldIDw8IDcpIHwgKHNbMjhdID4+PiAyNSk7XHJcbiAgICAgIGI0NSA9IChzWzI4XSA8PCA3KSB8IChzWzI5XSA+Pj4gMjUpO1xyXG4gICAgICBiMjYgPSAoc1szOF0gPDwgOCkgfCAoc1szOV0gPj4+IDI0KTtcclxuICAgICAgYjI3ID0gKHNbMzldIDw8IDgpIHwgKHNbMzhdID4+PiAyNCk7XHJcbiAgICAgIGI4ID0gKHNbNDhdIDw8IDE0KSB8IChzWzQ5XSA+Pj4gMTgpO1xyXG4gICAgICBiOSA9IChzWzQ5XSA8PCAxNCkgfCAoc1s0OF0gPj4+IDE4KTtcclxuXHJcbiAgICAgIHNbMF0gPSBiMCBeICh+YjIgJiBiNCk7XHJcbiAgICAgIHNbMV0gPSBiMSBeICh+YjMgJiBiNSk7XHJcbiAgICAgIHNbMTBdID0gYjEwIF4gKH5iMTIgJiBiMTQpO1xyXG4gICAgICBzWzExXSA9IGIxMSBeICh+YjEzICYgYjE1KTtcclxuICAgICAgc1syMF0gPSBiMjAgXiAofmIyMiAmIGIyNCk7XHJcbiAgICAgIHNbMjFdID0gYjIxIF4gKH5iMjMgJiBiMjUpO1xyXG4gICAgICBzWzMwXSA9IGIzMCBeICh+YjMyICYgYjM0KTtcclxuICAgICAgc1szMV0gPSBiMzEgXiAofmIzMyAmIGIzNSk7XHJcbiAgICAgIHNbNDBdID0gYjQwIF4gKH5iNDIgJiBiNDQpO1xyXG4gICAgICBzWzQxXSA9IGI0MSBeICh+YjQzICYgYjQ1KTtcclxuICAgICAgc1syXSA9IGIyIF4gKH5iNCAmIGI2KTtcclxuICAgICAgc1szXSA9IGIzIF4gKH5iNSAmIGI3KTtcclxuICAgICAgc1sxMl0gPSBiMTIgXiAofmIxNCAmIGIxNik7XHJcbiAgICAgIHNbMTNdID0gYjEzIF4gKH5iMTUgJiBiMTcpO1xyXG4gICAgICBzWzIyXSA9IGIyMiBeICh+YjI0ICYgYjI2KTtcclxuICAgICAgc1syM10gPSBiMjMgXiAofmIyNSAmIGIyNyk7XHJcbiAgICAgIHNbMzJdID0gYjMyIF4gKH5iMzQgJiBiMzYpO1xyXG4gICAgICBzWzMzXSA9IGIzMyBeICh+YjM1ICYgYjM3KTtcclxuICAgICAgc1s0Ml0gPSBiNDIgXiAofmI0NCAmIGI0Nik7XHJcbiAgICAgIHNbNDNdID0gYjQzIF4gKH5iNDUgJiBiNDcpO1xyXG4gICAgICBzWzRdID0gYjQgXiAofmI2ICYgYjgpO1xyXG4gICAgICBzWzVdID0gYjUgXiAofmI3ICYgYjkpO1xyXG4gICAgICBzWzE0XSA9IGIxNCBeICh+YjE2ICYgYjE4KTtcclxuICAgICAgc1sxNV0gPSBiMTUgXiAofmIxNyAmIGIxOSk7XHJcbiAgICAgIHNbMjRdID0gYjI0IF4gKH5iMjYgJiBiMjgpO1xyXG4gICAgICBzWzI1XSA9IGIyNSBeICh+YjI3ICYgYjI5KTtcclxuICAgICAgc1szNF0gPSBiMzQgXiAofmIzNiAmIGIzOCk7XHJcbiAgICAgIHNbMzVdID0gYjM1IF4gKH5iMzcgJiBiMzkpO1xyXG4gICAgICBzWzQ0XSA9IGI0NCBeICh+YjQ2ICYgYjQ4KTtcclxuICAgICAgc1s0NV0gPSBiNDUgXiAofmI0NyAmIGI0OSk7XHJcbiAgICAgIHNbNl0gPSBiNiBeICh+YjggJiBiMCk7XHJcbiAgICAgIHNbN10gPSBiNyBeICh+YjkgJiBiMSk7XHJcbiAgICAgIHNbMTZdID0gYjE2IF4gKH5iMTggJiBiMTApO1xyXG4gICAgICBzWzE3XSA9IGIxNyBeICh+YjE5ICYgYjExKTtcclxuICAgICAgc1syNl0gPSBiMjYgXiAofmIyOCAmIGIyMCk7XHJcbiAgICAgIHNbMjddID0gYjI3IF4gKH5iMjkgJiBiMjEpO1xyXG4gICAgICBzWzM2XSA9IGIzNiBeICh+YjM4ICYgYjMwKTtcclxuICAgICAgc1szN10gPSBiMzcgXiAofmIzOSAmIGIzMSk7XHJcbiAgICAgIHNbNDZdID0gYjQ2IF4gKH5iNDggJiBiNDApO1xyXG4gICAgICBzWzQ3XSA9IGI0NyBeICh+YjQ5ICYgYjQxKTtcclxuICAgICAgc1s4XSA9IGI4IF4gKH5iMCAmIGIyKTtcclxuICAgICAgc1s5XSA9IGI5IF4gKH5iMSAmIGIzKTtcclxuICAgICAgc1sxOF0gPSBiMTggXiAofmIxMCAmIGIxMik7XHJcbiAgICAgIHNbMTldID0gYjE5IF4gKH5iMTEgJiBiMTMpO1xyXG4gICAgICBzWzI4XSA9IGIyOCBeICh+YjIwICYgYjIyKTtcclxuICAgICAgc1syOV0gPSBiMjkgXiAofmIyMSAmIGIyMyk7XHJcbiAgICAgIHNbMzhdID0gYjM4IF4gKH5iMzAgJiBiMzIpO1xyXG4gICAgICBzWzM5XSA9IGIzOSBeICh+YjMxICYgYjMzKTtcclxuICAgICAgc1s0OF0gPSBiNDggXiAofmI0MCAmIGI0Mik7XHJcbiAgICAgIHNbNDldID0gYjQ5IF4gKH5iNDEgJiBiNDMpO1xyXG5cclxuICAgICAgc1swXSBePSBSQ1tuXTtcclxuICAgICAgc1sxXSBePSBSQ1tuICsgMV07XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgaWYgKENPTU1PTl9KUykge1xyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBtZXRob2RzO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIHJvb3RbbWV0aG9kTmFtZXNbaV1dID0gbWV0aG9kc1ttZXRob2ROYW1lc1tpXV07XHJcbiAgICB9XHJcbiAgfVxyXG59KSgpO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vanMtc2hhMy9zcmMvc2hhMy5qc1xuLy8gbW9kdWxlIGlkID0gMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGpzb24gPSB0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgPyBKU09OIDogcmVxdWlyZSgnanNvbmlmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmosIG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIG9wdHMgPSB7IGNtcDogb3B0cyB9O1xuICAgIHZhciBzcGFjZSA9IG9wdHMuc3BhY2UgfHwgJyc7XG4gICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHNwYWNlID0gQXJyYXkoc3BhY2UrMSkuam9pbignICcpO1xuICAgIHZhciBjeWNsZXMgPSAodHlwZW9mIG9wdHMuY3ljbGVzID09PSAnYm9vbGVhbicpID8gb3B0cy5jeWNsZXMgOiBmYWxzZTtcbiAgICB2YXIgcmVwbGFjZXIgPSBvcHRzLnJlcGxhY2VyIHx8IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gICAgdmFyIGNtcCA9IG9wdHMuY21wICYmIChmdW5jdGlvbiAoZikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHZhciBhb2JqID0geyBrZXk6IGEsIHZhbHVlOiBub2RlW2FdIH07XG4gICAgICAgICAgICAgICAgdmFyIGJvYmogPSB7IGtleTogYiwgdmFsdWU6IG5vZGVbYl0gfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZihhb2JqLCBib2JqKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfSkob3B0cy5jbXApO1xuXG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICByZXR1cm4gKGZ1bmN0aW9uIHN0cmluZ2lmeSAocGFyZW50LCBrZXksIG5vZGUsIGxldmVsKSB7XG4gICAgICAgIHZhciBpbmRlbnQgPSBzcGFjZSA/ICgnXFxuJyArIG5ldyBBcnJheShsZXZlbCArIDEpLmpvaW4oc3BhY2UpKSA6ICcnO1xuICAgICAgICB2YXIgY29sb25TZXBhcmF0b3IgPSBzcGFjZSA/ICc6ICcgOiAnOic7XG5cbiAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS50b0pTT04gJiYgdHlwZW9mIG5vZGUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZS50b0pTT04oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSByZXBsYWNlci5jYWxsKHBhcmVudCwga2V5LCBub2RlKTtcblxuICAgICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JyB8fCBub2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ganNvbi5zdHJpbmdpZnkobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gc3RyaW5naWZ5KG5vZGUsIGksIG5vZGVbaV0sIGxldmVsKzEpIHx8IGpzb24uc3RyaW5naWZ5KG51bGwpO1xuICAgICAgICAgICAgICAgIG91dC5wdXNoKGluZGVudCArIHNwYWNlICsgaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ1snICsgb3V0LmpvaW4oJywnKSArIGluZGVudCArICddJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzZWVuLmluZGV4T2Yobm9kZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN5Y2xlcykgcmV0dXJuIGpzb24uc3RyaW5naWZ5KCdfX2N5Y2xlX18nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHNlZW4ucHVzaChub2RlKTtcblxuICAgICAgICAgICAgdmFyIGtleXMgPSBvYmplY3RLZXlzKG5vZGUpLnNvcnQoY21wICYmIGNtcChub2RlKSk7XG4gICAgICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzdHJpbmdpZnkobm9kZSwga2V5LCBub2RlW2tleV0sIGxldmVsKzEpO1xuXG4gICAgICAgICAgICAgICAgaWYoIXZhbHVlKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIHZhciBrZXlWYWx1ZSA9IGpzb24uc3RyaW5naWZ5KGtleSlcbiAgICAgICAgICAgICAgICAgICAgKyBjb2xvblNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICArIHZhbHVlO1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICBvdXQucHVzaChpbmRlbnQgKyBzcGFjZSArIGtleVZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZW4uc3BsaWNlKHNlZW4uaW5kZXhPZihub2RlKSwgMSk7XG4gICAgICAgICAgICByZXR1cm4gJ3snICsgb3V0LmpvaW4oJywnKSArIGluZGVudCArICd9JztcbiAgICAgICAgfVxuICAgIH0pKHsgJyc6IG9iaiB9LCAnJywgb2JqLCAwKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB7fS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gICAgdmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZSB9O1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2pzb24tc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vbGliL3BhcnNlJyk7XG5leHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeScpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2pzb25pZnkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDIzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBhdCwgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGNoLCAvLyBUaGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBlc2NhcGVlID0ge1xuICAgICAgICAnXCInOiAgJ1wiJyxcbiAgICAgICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgICAgICcvJzogICcvJyxcbiAgICAgICAgYjogICAgJ1xcYicsXG4gICAgICAgIGY6ICAgICdcXGYnLFxuICAgICAgICBuOiAgICAnXFxuJyxcbiAgICAgICAgcjogICAgJ1xccicsXG4gICAgICAgIHQ6ICAgICdcXHQnXG4gICAgfSxcbiAgICB0ZXh0LFxuXG4gICAgZXJyb3IgPSBmdW5jdGlvbiAobSkge1xuICAgICAgICAvLyBDYWxsIGVycm9yIHdoZW4gc29tZXRoaW5nIGlzIHdyb25nLlxuICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAgICAnU3ludGF4RXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogbSxcbiAgICAgICAgICAgIGF0OiAgICAgIGF0LFxuICAgICAgICAgICAgdGV4dDogICAgdGV4dFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgXG4gICAgbmV4dCA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIC8vIElmIGEgYyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHZlcmlmeSB0aGF0IGl0IG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLlxuICAgICAgICBpZiAoYyAmJiBjICE9PSBjaCkge1xuICAgICAgICAgICAgZXJyb3IoXCJFeHBlY3RlZCAnXCIgKyBjICsgXCInIGluc3RlYWQgb2YgJ1wiICsgY2ggKyBcIidcIik7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIuIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgY2hhcmFjdGVycyxcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICAgIFxuICAgICAgICBjaCA9IHRleHQuY2hhckF0KGF0KTtcbiAgICAgICAgYXQgKz0gMTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG4gICAgXG4gICAgbnVtYmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBQYXJzZSBhIG51bWJlciB2YWx1ZS5cbiAgICAgICAgdmFyIG51bWJlcixcbiAgICAgICAgICAgIHN0cmluZyA9ICcnO1xuICAgICAgICBcbiAgICAgICAgaWYgKGNoID09PSAnLScpIHtcbiAgICAgICAgICAgIHN0cmluZyA9ICctJztcbiAgICAgICAgICAgIG5leHQoJy0nKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaCA9PT0gJy4nKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gJy4nO1xuICAgICAgICAgICAgd2hpbGUgKG5leHQoKSAmJiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG51bWJlciA9ICtzdHJpbmc7XG4gICAgICAgIGlmICghaXNGaW5pdGUobnVtYmVyKSkge1xuICAgICAgICAgICAgZXJyb3IoXCJCYWQgbnVtYmVyXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXG4gICAgc3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBQYXJzZSBhIHN0cmluZyB2YWx1ZS5cbiAgICAgICAgdmFyIGhleCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBzdHJpbmcgPSAnJyxcbiAgICAgICAgICAgIHVmZmZmO1xuICAgICAgICBcbiAgICAgICAgLy8gV2hlbiBwYXJzaW5nIGZvciBzdHJpbmcgdmFsdWVzLCB3ZSBtdXN0IGxvb2sgZm9yIFwiIGFuZCBcXCBjaGFyYWN0ZXJzLlxuICAgICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgICAgIHdoaWxlIChuZXh0KCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1ZmZmZiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4ID0gcGFyc2VJbnQobmV4dCgpLCAxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShoZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZmZmZiA9IHVmZmZmICogMTYgKyBoZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1ZmZmZik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVzY2FwZWVbY2hdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGVzY2FwZWVbY2hdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiQmFkIHN0cmluZ1wiKTtcbiAgICB9LFxuXG4gICAgd2hpdGUgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFNraXAgd2hpdGVzcGFjZS5cblxuICAgICAgICB3aGlsZSAoY2ggJiYgY2ggPD0gJyAnKSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgd29yZCA9IGZ1bmN0aW9uICgpIHtcblxuLy8gdHJ1ZSwgZmFsc2UsIG9yIG51bGwuXG5cbiAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICAgIG5leHQoJ3QnKTtcbiAgICAgICAgICAgIG5leHQoJ3InKTtcbiAgICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgIG5leHQoJ2YnKTtcbiAgICAgICAgICAgIG5leHQoJ2EnKTtcbiAgICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICAgIG5leHQoJ3MnKTtcbiAgICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgICBuZXh0KCduJyk7XG4gICAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIlVuZXhwZWN0ZWQgJ1wiICsgY2ggKyBcIidcIik7XG4gICAgfSxcblxuICAgIHZhbHVlLCAgLy8gUGxhY2UgaG9sZGVyIGZvciB0aGUgdmFsdWUgZnVuY3Rpb24uXG5cbiAgICBhcnJheSA9IGZ1bmN0aW9uICgpIHtcblxuLy8gUGFyc2UgYW4gYXJyYXkgdmFsdWUuXG5cbiAgICAgICAgdmFyIGFycmF5ID0gW107XG5cbiAgICAgICAgaWYgKGNoID09PSAnWycpIHtcbiAgICAgICAgICAgIG5leHQoJ1snKTtcbiAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7ICAgLy8gZW1wdHkgYXJyYXlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjaCkge1xuICAgICAgICAgICAgICAgIGFycmF5LnB1c2godmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJCYWQgYXJyYXlcIik7XG4gICAgfSxcblxuICAgIG9iamVjdCA9IGZ1bmN0aW9uICgpIHtcblxuLy8gUGFyc2UgYW4gb2JqZWN0IHZhbHVlLlxuXG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICBvYmplY3QgPSB7fTtcblxuICAgICAgICBpZiAoY2ggPT09ICd7Jykge1xuICAgICAgICAgICAgbmV4dCgneycpO1xuICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7ICAgLy8gZW1wdHkgb2JqZWN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBzdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgICAgIG5leHQoJzonKTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yKCdEdXBsaWNhdGUga2V5IFwiJyArIGtleSArICdcIicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiQmFkIG9iamVjdFwiKTtcbiAgICB9O1xuXG52YWx1ZSA9IGZ1bmN0aW9uICgpIHtcblxuLy8gUGFyc2UgYSBKU09OIHZhbHVlLiBJdCBjb3VsZCBiZSBhbiBvYmplY3QsIGFuIGFycmF5LCBhIHN0cmluZywgYSBudW1iZXIsXG4vLyBvciBhIHdvcmQuXG5cbiAgICB3aGl0ZSgpO1xuICAgIHN3aXRjaCAoY2gpIHtcbiAgICBjYXNlICd7JzpcbiAgICAgICAgcmV0dXJuIG9iamVjdCgpO1xuICAgIGNhc2UgJ1snOlxuICAgICAgICByZXR1cm4gYXJyYXkoKTtcbiAgICBjYXNlICdcIic6XG4gICAgICAgIHJldHVybiBzdHJpbmcoKTtcbiAgICBjYXNlICctJzpcbiAgICAgICAgcmV0dXJuIG51bWJlcigpO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknID8gbnVtYmVyKCkgOiB3b3JkKCk7XG4gICAgfVxufTtcblxuLy8gUmV0dXJuIHRoZSBqc29uX3BhcnNlIGZ1bmN0aW9uLiBJdCB3aWxsIGhhdmUgYWNjZXNzIHRvIGFsbCBvZiB0aGUgYWJvdmVcbi8vIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLlxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzb3VyY2UsIHJldml2ZXIpIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIFxuICAgIHRleHQgPSBzb3VyY2U7XG4gICAgYXQgPSAwO1xuICAgIGNoID0gJyAnO1xuICAgIHJlc3VsdCA9IHZhbHVlKCk7XG4gICAgd2hpdGUoKTtcbiAgICBpZiAoY2gpIHtcbiAgICAgICAgZXJyb3IoXCJTeW50YXggZXJyb3JcIik7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSByZWN1cnNpdmVseSB3YWxrIHRoZSBuZXcgc3RydWN0dXJlLFxuICAgIC8vIHBhc3NpbmcgZWFjaCBuYW1lL3ZhbHVlIHBhaXIgdG8gdGhlIHJldml2ZXIgZnVuY3Rpb24gZm9yIHBvc3NpYmxlXG4gICAgLy8gdHJhbnNmb3JtYXRpb24sIHN0YXJ0aW5nIHdpdGggYSB0ZW1wb3Jhcnkgcm9vdCBvYmplY3QgdGhhdCBob2xkcyB0aGUgcmVzdWx0XG4gICAgLy8gaW4gYW4gZW1wdHkga2V5LiBJZiB0aGVyZSBpcyBub3QgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSBzaW1wbHkgcmV0dXJuIHRoZVxuICAgIC8vIHJlc3VsdC5cblxuICAgIHJldHVybiB0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJyA/IChmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7XG4gICAgICAgIHZhciBrLCB2LCB2YWx1ZSA9IGhvbGRlcltrZXldO1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHdhbGsodmFsdWUsIGspO1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtrXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVba107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldml2ZXIuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgIH0oeycnOiByZXN1bHR9LCAnJykpIDogcmVzdWx0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9qc29uaWZ5L2xpYi9wYXJzZS5qc1xuLy8gbW9kdWxlIGlkID0gMjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGN4ID0gL1tcXHUwMDAwXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgZXNjYXBhYmxlID0gL1tcXFxcXFxcIlxceDAwLVxceDFmXFx4N2YtXFx4OWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICBnYXAsXG4gICAgaW5kZW50LFxuICAgIG1ldGEgPSB7ICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zXG4gICAgICAgICdcXGInOiAnXFxcXGInLFxuICAgICAgICAnXFx0JzogJ1xcXFx0JyxcbiAgICAgICAgJ1xcbic6ICdcXFxcbicsXG4gICAgICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICAgICAnXFxyJzogJ1xcXFxyJyxcbiAgICAgICAgJ1wiJyA6ICdcXFxcXCInLFxuICAgICAgICAnXFxcXCc6ICdcXFxcXFxcXCdcbiAgICB9LFxuICAgIHJlcDtcblxuZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7XG4gICAgLy8gSWYgdGhlIHN0cmluZyBjb250YWlucyBubyBjb250cm9sIGNoYXJhY3RlcnMsIG5vIHF1b3RlIGNoYXJhY3RlcnMsIGFuZCBub1xuICAgIC8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuXG4gICAgLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUgZXNjYXBlXG4gICAgLy8gc2VxdWVuY2VzLlxuICAgIFxuICAgIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICAgIHJldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpID8gJ1wiJyArIHN0cmluZy5yZXBsYWNlKGVzY2FwYWJsZSwgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgdmFyIGMgPSBtZXRhW2FdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnID8gYyA6XG4gICAgICAgICAgICAnXFxcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbiAgICB9KSArICdcIicgOiAnXCInICsgc3RyaW5nICsgJ1wiJztcbn1cblxuZnVuY3Rpb24gc3RyKGtleSwgaG9sZGVyKSB7XG4gICAgLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXldLlxuICAgIHZhciBpLCAgICAgICAgICAvLyBUaGUgbG9vcCBjb3VudGVyLlxuICAgICAgICBrLCAgICAgICAgICAvLyBUaGUgbWVtYmVyIGtleS5cbiAgICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1lbWJlciB2YWx1ZS5cbiAgICAgICAgbGVuZ3RoLFxuICAgICAgICBtaW5kID0gZ2FwLFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldO1xuICAgIFxuICAgIC8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRvIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtleSk7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHdlIHdlcmUgY2FsbGVkIHdpdGggYSByZXBsYWNlciBmdW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0b1xuICAgIC8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuICAgIGlmICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgXG4gICAgLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0eXBlLlxuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gcXVvdGUodmFsdWUpO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIC8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gRW5jb2RlIG5vbi1maW5pdGUgbnVtYmVycyBhcyBudWxsLlxuICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7XG4gICAgICAgIFxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuIE5vdGU6XG4gICAgICAgICAgICAvLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9kdWNlICdudWxsJy4gVGhlIGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpblxuICAgICAgICAgICAgLy8gdGhlIHJlbW90ZSBjaGFuY2UgdGhhdCB0aGlzIGdldHMgZml4ZWQgc29tZWRheS5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgXG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJ251bGwnO1xuICAgICAgICAgICAgZ2FwICs9IGluZGVudDtcbiAgICAgICAgICAgIHBhcnRpYWwgPSBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQXJyYXkuaXNBcnJheVxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsW2ldID0gc3RyKGksIHZhbHVlKSB8fCAnbnVsbCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEpvaW4gYWxsIG9mIHRoZSBlbGVtZW50cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLCBhbmRcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHRoZW0gaW4gYnJhY2tldHMuXG4gICAgICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwID8gJ1tdJyA6IGdhcCA/XG4gICAgICAgICAgICAgICAgICAgICdbXFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ10nIDpcbiAgICAgICAgICAgICAgICAgICAgJ1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7XG4gICAgICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlXG4gICAgICAgICAgICAvLyBzdHJpbmdpZmllZC5cbiAgICAgICAgICAgIGlmIChyZXAgJiYgdHlwZW9mIHJlcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBrID0gcmVwW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC5cbiAgICAgICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAvLyBKb2luIGFsbCBvZiB0aGUgbWVtYmVyIHRleHRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsXG4gICAgICAgIC8vIGFuZCB3cmFwIHRoZW0gaW4gYnJhY2VzLlxuXG4gICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICd7fScgOiBnYXAgP1xuICAgICAgICAgICAgJ3tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnfScgOlxuICAgICAgICAgICAgJ3snICsgcGFydGlhbC5qb2luKCcsJykgKyAnfSc7XG4gICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgIHZhciBpO1xuICAgIGdhcCA9ICcnO1xuICAgIGluZGVudCA9ICcnO1xuICAgIFxuICAgIC8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIG1ha2UgYW4gaW5kZW50IHN0cmluZyBjb250YWluaW5nIHRoYXRcbiAgICAvLyBtYW55IHNwYWNlcy5cbiAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3BhY2U7IGkgKz0gMSkge1xuICAgICAgICAgICAgaW5kZW50ICs9ICcgJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuXG4gICAgZWxzZSBpZiAodHlwZW9mIHNwYWNlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpbmRlbnQgPSBzcGFjZTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuXG4gICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci5cbiAgICByZXAgPSByZXBsYWNlcjtcbiAgICBpZiAocmVwbGFjZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nXG4gICAgJiYgKHR5cGVvZiByZXBsYWNlciAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTtcbiAgICB9XG4gICAgXG4gICAgLy8gTWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAnJy5cbiAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBzdHJpbmdpZnlpbmcgdGhlIHZhbHVlLlxuICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vanNvbmlmeS9saWIvc3RyaW5naWZ5LmpzXG4vLyBtb2R1bGUgaWQgPSAyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gMjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiKGZ1bmN0aW9uKG5hY2wpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gUG9ydGVkIGluIDIwMTQgYnkgRG1pdHJ5IENoZXN0bnlraCBhbmQgRGV2aSBNYW5kaXJpLlxuLy8gUHVibGljIGRvbWFpbi5cbi8vXG4vLyBJbXBsZW1lbnRhdGlvbiBkZXJpdmVkIGZyb20gVHdlZXROYUNsIHZlcnNpb24gMjAxNDA0MjcuXG4vLyBTZWUgZm9yIGRldGFpbHM6IGh0dHA6Ly90d2VldG5hY2wuY3IueXAudG8vXG5cbnZhciBnZiA9IGZ1bmN0aW9uKGluaXQpIHtcbiAgdmFyIGksIHIgPSBuZXcgRmxvYXQ2NEFycmF5KDE2KTtcbiAgaWYgKGluaXQpIGZvciAoaSA9IDA7IGkgPCBpbml0Lmxlbmd0aDsgaSsrKSByW2ldID0gaW5pdFtpXTtcbiAgcmV0dXJuIHI7XG59O1xuXG4vLyAgUGx1Z2dhYmxlLCBpbml0aWFsaXplZCBpbiBoaWdoLWxldmVsIEFQSSBiZWxvdy5cbnZhciByYW5kb21ieXRlcyA9IGZ1bmN0aW9uKC8qIHgsIG4gKi8pIHsgdGhyb3cgbmV3IEVycm9yKCdubyBQUk5HJyk7IH07XG5cbnZhciBfMCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbnZhciBfOSA9IG5ldyBVaW50OEFycmF5KDMyKTsgXzlbMF0gPSA5O1xuXG52YXIgZ2YwID0gZ2YoKSxcbiAgICBnZjEgPSBnZihbMV0pLFxuICAgIF8xMjE2NjUgPSBnZihbMHhkYjQxLCAxXSksXG4gICAgRCA9IGdmKFsweDc4YTMsIDB4MTM1OSwgMHg0ZGNhLCAweDc1ZWIsIDB4ZDhhYiwgMHg0MTQxLCAweDBhNGQsIDB4MDA3MCwgMHhlODk4LCAweDc3NzksIDB4NDA3OSwgMHg4Y2M3LCAweGZlNzMsIDB4MmI2ZiwgMHg2Y2VlLCAweDUyMDNdKSxcbiAgICBEMiA9IGdmKFsweGYxNTksIDB4MjZiMiwgMHg5Yjk0LCAweGViZDYsIDB4YjE1NiwgMHg4MjgzLCAweDE0OWEsIDB4MDBlMCwgMHhkMTMwLCAweGVlZjMsIDB4ODBmMiwgMHgxOThlLCAweGZjZTcsIDB4NTZkZiwgMHhkOWRjLCAweDI0MDZdKSxcbiAgICBYID0gZ2YoWzB4ZDUxYSwgMHg4ZjI1LCAweDJkNjAsIDB4Yzk1NiwgMHhhN2IyLCAweDk1MjUsIDB4Yzc2MCwgMHg2OTJjLCAweGRjNWMsIDB4ZmRkNiwgMHhlMjMxLCAweGMwYTQsIDB4NTNmZSwgMHhjZDZlLCAweDM2ZDMsIDB4MjE2OV0pLFxuICAgIFkgPSBnZihbMHg2NjU4LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2XSksXG4gICAgSSA9IGdmKFsweGEwYjAsIDB4NGEwZSwgMHgxYjI3LCAweGM0ZWUsIDB4ZTQ3OCwgMHhhZDJmLCAweDE4MDYsIDB4MmY0MywgMHhkN2E3LCAweDNkZmIsIDB4MDA5OSwgMHgyYjRkLCAweGRmMGIsIDB4NGZjMSwgMHgyNDgwLCAweDJiODNdKTtcblxuZnVuY3Rpb24gdHM2NCh4LCBpLCBoLCBsKSB7XG4gIHhbaV0gICA9IChoID4+IDI0KSAmIDB4ZmY7XG4gIHhbaSsxXSA9IChoID4+IDE2KSAmIDB4ZmY7XG4gIHhbaSsyXSA9IChoID4+ICA4KSAmIDB4ZmY7XG4gIHhbaSszXSA9IGggJiAweGZmO1xuICB4W2krNF0gPSAobCA+PiAyNCkgICYgMHhmZjtcbiAgeFtpKzVdID0gKGwgPj4gMTYpICAmIDB4ZmY7XG4gIHhbaSs2XSA9IChsID4+ICA4KSAgJiAweGZmO1xuICB4W2krN10gPSBsICYgMHhmZjtcbn1cblxuZnVuY3Rpb24gdm4oeCwgeGksIHksIHlpLCBuKSB7XG4gIHZhciBpLGQgPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBkIHw9IHhbeGkraV1eeVt5aStpXTtcbiAgcmV0dXJuICgxICYgKChkIC0gMSkgPj4+IDgpKSAtIDE7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b192ZXJpZnlfMTYoeCwgeGksIHksIHlpKSB7XG4gIHJldHVybiB2bih4LHhpLHkseWksMTYpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fdmVyaWZ5XzMyKHgsIHhpLCB5LCB5aSkge1xuICByZXR1cm4gdm4oeCx4aSx5LHlpLDMyKTtcbn1cblxuZnVuY3Rpb24gY29yZV9zYWxzYTIwKG8sIHAsIGssIGMpIHtcbiAgdmFyIGowICA9IGNbIDBdICYgMHhmZiB8IChjWyAxXSAmIDB4ZmYpPDw4IHwgKGNbIDJdICYgMHhmZik8PDE2IHwgKGNbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajEgID0ga1sgMF0gJiAweGZmIHwgKGtbIDFdICYgMHhmZik8PDggfCAoa1sgMl0gJiAweGZmKTw8MTYgfCAoa1sgM10gJiAweGZmKTw8MjQsXG4gICAgICBqMiAgPSBrWyA0XSAmIDB4ZmYgfCAoa1sgNV0gJiAweGZmKTw8OCB8IChrWyA2XSAmIDB4ZmYpPDwxNiB8IChrWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGozICA9IGtbIDhdICYgMHhmZiB8IChrWyA5XSAmIDB4ZmYpPDw4IHwgKGtbMTBdICYgMHhmZik8PDE2IHwgKGtbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajQgID0ga1sxMl0gJiAweGZmIHwgKGtbMTNdICYgMHhmZik8PDggfCAoa1sxNF0gJiAweGZmKTw8MTYgfCAoa1sxNV0gJiAweGZmKTw8MjQsXG4gICAgICBqNSAgPSBjWyA0XSAmIDB4ZmYgfCAoY1sgNV0gJiAweGZmKTw8OCB8IChjWyA2XSAmIDB4ZmYpPDwxNiB8IChjWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo2ICA9IHBbIDBdICYgMHhmZiB8IChwWyAxXSAmIDB4ZmYpPDw4IHwgKHBbIDJdICYgMHhmZik8PDE2IHwgKHBbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajcgID0gcFsgNF0gJiAweGZmIHwgKHBbIDVdICYgMHhmZik8PDggfCAocFsgNl0gJiAweGZmKTw8MTYgfCAocFsgN10gJiAweGZmKTw8MjQsXG4gICAgICBqOCAgPSBwWyA4XSAmIDB4ZmYgfCAocFsgOV0gJiAweGZmKTw8OCB8IChwWzEwXSAmIDB4ZmYpPDwxNiB8IChwWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo5ICA9IHBbMTJdICYgMHhmZiB8IChwWzEzXSAmIDB4ZmYpPDw4IHwgKHBbMTRdICYgMHhmZik8PDE2IHwgKHBbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajEwID0gY1sgOF0gJiAweGZmIHwgKGNbIDldICYgMHhmZik8PDggfCAoY1sxMF0gJiAweGZmKTw8MTYgfCAoY1sxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTEgPSBrWzE2XSAmIDB4ZmYgfCAoa1sxN10gJiAweGZmKTw8OCB8IChrWzE4XSAmIDB4ZmYpPDwxNiB8IChrWzE5XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMiA9IGtbMjBdICYgMHhmZiB8IChrWzIxXSAmIDB4ZmYpPDw4IHwgKGtbMjJdICYgMHhmZik8PDE2IHwgKGtbMjNdICYgMHhmZik8PDI0LFxuICAgICAgajEzID0ga1syNF0gJiAweGZmIHwgKGtbMjVdICYgMHhmZik8PDggfCAoa1syNl0gJiAweGZmKTw8MTYgfCAoa1syN10gJiAweGZmKTw8MjQsXG4gICAgICBqMTQgPSBrWzI4XSAmIDB4ZmYgfCAoa1syOV0gJiAweGZmKTw8OCB8IChrWzMwXSAmIDB4ZmYpPDwxNiB8IChrWzMxXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxNSA9IGNbMTJdICYgMHhmZiB8IChjWzEzXSAmIDB4ZmYpPDw4IHwgKGNbMTRdICYgMHhmZik8PDE2IHwgKGNbMTVdICYgMHhmZik8PDI0O1xuXG4gIHZhciB4MCA9IGowLCB4MSA9IGoxLCB4MiA9IGoyLCB4MyA9IGozLCB4NCA9IGo0LCB4NSA9IGo1LCB4NiA9IGo2LCB4NyA9IGo3LFxuICAgICAgeDggPSBqOCwgeDkgPSBqOSwgeDEwID0gajEwLCB4MTEgPSBqMTEsIHgxMiA9IGoxMiwgeDEzID0gajEzLCB4MTQgPSBqMTQsXG4gICAgICB4MTUgPSBqMTUsIHU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSArPSAyKSB7XG4gICAgdSA9IHgwICsgeDEyIHwgMDtcbiAgICB4NCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDQgKyB4MCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDQgfCAwO1xuICAgIHgxMiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTIgKyB4OCB8IDA7XG4gICAgeDAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4NSArIHgxIHwgMDtcbiAgICB4OSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDkgKyB4NSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4OSB8IDA7XG4gICAgeDEgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEgKyB4MTMgfCAwO1xuICAgIHg1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDEwICsgeDYgfCAwO1xuICAgIHgxNCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDE0ICsgeDEwIHwgMDtcbiAgICB4MiBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDIgKyB4MTQgfCAwO1xuICAgIHg2IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg2ICsgeDIgfCAwO1xuICAgIHgxMCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxNSArIHgxMSB8IDA7XG4gICAgeDMgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgzICsgeDE1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4MyB8IDA7XG4gICAgeDExIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxMSArIHg3IHwgMDtcbiAgICB4MTUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MCArIHgzIHwgMDtcbiAgICB4MSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEgKyB4MCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDEgfCAwO1xuICAgIHgzIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgzICsgeDIgfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4NCB8IDA7XG4gICAgeDYgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg2ICsgeDUgfCAwO1xuICAgIHg3IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4NyArIHg2IHwgMDtcbiAgICB4NCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NCArIHg3IHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg5IHwgMDtcbiAgICB4MTEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMSArIHgxMCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDExIHwgMDtcbiAgICB4OSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4OSArIHg4IHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTQgfCAwO1xuICAgIHgxMiBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEyICsgeDE1IHwgMDtcbiAgICB4MTMgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgxMyArIHgxMiB8IDA7XG4gICAgeDE0IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxNCArIHgxMyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG4gIH1cbiAgIHgwID0gIHgwICsgIGowIHwgMDtcbiAgIHgxID0gIHgxICsgIGoxIHwgMDtcbiAgIHgyID0gIHgyICsgIGoyIHwgMDtcbiAgIHgzID0gIHgzICsgIGozIHwgMDtcbiAgIHg0ID0gIHg0ICsgIGo0IHwgMDtcbiAgIHg1ID0gIHg1ICsgIGo1IHwgMDtcbiAgIHg2ID0gIHg2ICsgIGo2IHwgMDtcbiAgIHg3ID0gIHg3ICsgIGo3IHwgMDtcbiAgIHg4ID0gIHg4ICsgIGo4IHwgMDtcbiAgIHg5ID0gIHg5ICsgIGo5IHwgMDtcbiAgeDEwID0geDEwICsgajEwIHwgMDtcbiAgeDExID0geDExICsgajExIHwgMDtcbiAgeDEyID0geDEyICsgajEyIHwgMDtcbiAgeDEzID0geDEzICsgajEzIHwgMDtcbiAgeDE0ID0geDE0ICsgajE0IHwgMDtcbiAgeDE1ID0geDE1ICsgajE1IHwgMDtcblxuICBvWyAwXSA9IHgwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDFdID0geDAgPj4+ICA4ICYgMHhmZjtcbiAgb1sgMl0gPSB4MCA+Pj4gMTYgJiAweGZmO1xuICBvWyAzXSA9IHgwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sgNF0gPSB4MSA+Pj4gIDAgJiAweGZmO1xuICBvWyA1XSA9IHgxID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDZdID0geDEgPj4+IDE2ICYgMHhmZjtcbiAgb1sgN10gPSB4MSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDhdID0geDIgPj4+ICAwICYgMHhmZjtcbiAgb1sgOV0gPSB4MiA+Pj4gIDggJiAweGZmO1xuICBvWzEwXSA9IHgyID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTFdID0geDIgPj4+IDI0ICYgMHhmZjtcblxuICBvWzEyXSA9IHgzID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTNdID0geDMgPj4+ICA4ICYgMHhmZjtcbiAgb1sxNF0gPSB4MyA+Pj4gMTYgJiAweGZmO1xuICBvWzE1XSA9IHgzID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxNl0gPSB4NCA+Pj4gIDAgJiAweGZmO1xuICBvWzE3XSA9IHg0ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMThdID0geDQgPj4+IDE2ICYgMHhmZjtcbiAgb1sxOV0gPSB4NCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjBdID0geDUgPj4+ICAwICYgMHhmZjtcbiAgb1syMV0gPSB4NSA+Pj4gIDggJiAweGZmO1xuICBvWzIyXSA9IHg1ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjNdID0geDUgPj4+IDI0ICYgMHhmZjtcblxuICBvWzI0XSA9IHg2ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjVdID0geDYgPj4+ICA4ICYgMHhmZjtcbiAgb1syNl0gPSB4NiA+Pj4gMTYgJiAweGZmO1xuICBvWzI3XSA9IHg2ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syOF0gPSB4NyA+Pj4gIDAgJiAweGZmO1xuICBvWzI5XSA9IHg3ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzBdID0geDcgPj4+IDE2ICYgMHhmZjtcbiAgb1szMV0gPSB4NyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMzJdID0geDggPj4+ICAwICYgMHhmZjtcbiAgb1szM10gPSB4OCA+Pj4gIDggJiAweGZmO1xuICBvWzM0XSA9IHg4ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMzVdID0geDggPj4+IDI0ICYgMHhmZjtcblxuICBvWzM2XSA9IHg5ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMzddID0geDkgPj4+ICA4ICYgMHhmZjtcbiAgb1szOF0gPSB4OSA+Pj4gMTYgJiAweGZmO1xuICBvWzM5XSA9IHg5ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s0MF0gPSB4MTAgPj4+ICAwICYgMHhmZjtcbiAgb1s0MV0gPSB4MTAgPj4+ICA4ICYgMHhmZjtcbiAgb1s0Ml0gPSB4MTAgPj4+IDE2ICYgMHhmZjtcbiAgb1s0M10gPSB4MTAgPj4+IDI0ICYgMHhmZjtcblxuICBvWzQ0XSA9IHgxMSA+Pj4gIDAgJiAweGZmO1xuICBvWzQ1XSA9IHgxMSA+Pj4gIDggJiAweGZmO1xuICBvWzQ2XSA9IHgxMSA+Pj4gMTYgJiAweGZmO1xuICBvWzQ3XSA9IHgxMSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNDhdID0geDEyID4+PiAgMCAmIDB4ZmY7XG4gIG9bNDldID0geDEyID4+PiAgOCAmIDB4ZmY7XG4gIG9bNTBdID0geDEyID4+PiAxNiAmIDB4ZmY7XG4gIG9bNTFdID0geDEyID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s1Ml0gPSB4MTMgPj4+ICAwICYgMHhmZjtcbiAgb1s1M10gPSB4MTMgPj4+ICA4ICYgMHhmZjtcbiAgb1s1NF0gPSB4MTMgPj4+IDE2ICYgMHhmZjtcbiAgb1s1NV0gPSB4MTMgPj4+IDI0ICYgMHhmZjtcblxuICBvWzU2XSA9IHgxNCA+Pj4gIDAgJiAweGZmO1xuICBvWzU3XSA9IHgxNCA+Pj4gIDggJiAweGZmO1xuICBvWzU4XSA9IHgxNCA+Pj4gMTYgJiAweGZmO1xuICBvWzU5XSA9IHgxNCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNjBdID0geDE1ID4+PiAgMCAmIDB4ZmY7XG4gIG9bNjFdID0geDE1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bNjJdID0geDE1ID4+PiAxNiAmIDB4ZmY7XG4gIG9bNjNdID0geDE1ID4+PiAyNCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIGNvcmVfaHNhbHNhMjAobyxwLGssYykge1xuICB2YXIgajAgID0gY1sgMF0gJiAweGZmIHwgKGNbIDFdICYgMHhmZik8PDggfCAoY1sgMl0gJiAweGZmKTw8MTYgfCAoY1sgM10gJiAweGZmKTw8MjQsXG4gICAgICBqMSAgPSBrWyAwXSAmIDB4ZmYgfCAoa1sgMV0gJiAweGZmKTw8OCB8IChrWyAyXSAmIDB4ZmYpPDwxNiB8IChrWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoyICA9IGtbIDRdICYgMHhmZiB8IChrWyA1XSAmIDB4ZmYpPDw4IHwgKGtbIDZdICYgMHhmZik8PDE2IHwgKGtbIDddICYgMHhmZik8PDI0LFxuICAgICAgajMgID0ga1sgOF0gJiAweGZmIHwgKGtbIDldICYgMHhmZik8PDggfCAoa1sxMF0gJiAweGZmKTw8MTYgfCAoa1sxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqNCAgPSBrWzEyXSAmIDB4ZmYgfCAoa1sxM10gJiAweGZmKTw8OCB8IChrWzE0XSAmIDB4ZmYpPDwxNiB8IChrWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo1ICA9IGNbIDRdICYgMHhmZiB8IChjWyA1XSAmIDB4ZmYpPDw4IHwgKGNbIDZdICYgMHhmZik8PDE2IHwgKGNbIDddICYgMHhmZik8PDI0LFxuICAgICAgajYgID0gcFsgMF0gJiAweGZmIHwgKHBbIDFdICYgMHhmZik8PDggfCAocFsgMl0gJiAweGZmKTw8MTYgfCAocFsgM10gJiAweGZmKTw8MjQsXG4gICAgICBqNyAgPSBwWyA0XSAmIDB4ZmYgfCAocFsgNV0gJiAweGZmKTw8OCB8IChwWyA2XSAmIDB4ZmYpPDwxNiB8IChwWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo4ICA9IHBbIDhdICYgMHhmZiB8IChwWyA5XSAmIDB4ZmYpPDw4IHwgKHBbMTBdICYgMHhmZik8PDE2IHwgKHBbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajkgID0gcFsxMl0gJiAweGZmIHwgKHBbMTNdICYgMHhmZik8PDggfCAocFsxNF0gJiAweGZmKTw8MTYgfCAocFsxNV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTAgPSBjWyA4XSAmIDB4ZmYgfCAoY1sgOV0gJiAweGZmKTw8OCB8IChjWzEwXSAmIDB4ZmYpPDwxNiB8IChjWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMSA9IGtbMTZdICYgMHhmZiB8IChrWzE3XSAmIDB4ZmYpPDw4IHwgKGtbMThdICYgMHhmZik8PDE2IHwgKGtbMTldICYgMHhmZik8PDI0LFxuICAgICAgajEyID0ga1syMF0gJiAweGZmIHwgKGtbMjFdICYgMHhmZik8PDggfCAoa1syMl0gJiAweGZmKTw8MTYgfCAoa1syM10gJiAweGZmKTw8MjQsXG4gICAgICBqMTMgPSBrWzI0XSAmIDB4ZmYgfCAoa1syNV0gJiAweGZmKTw8OCB8IChrWzI2XSAmIDB4ZmYpPDwxNiB8IChrWzI3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxNCA9IGtbMjhdICYgMHhmZiB8IChrWzI5XSAmIDB4ZmYpPDw4IHwgKGtbMzBdICYgMHhmZik8PDE2IHwgKGtbMzFdICYgMHhmZik8PDI0LFxuICAgICAgajE1ID0gY1sxMl0gJiAweGZmIHwgKGNbMTNdICYgMHhmZik8PDggfCAoY1sxNF0gJiAweGZmKTw8MTYgfCAoY1sxNV0gJiAweGZmKTw8MjQ7XG5cbiAgdmFyIHgwID0gajAsIHgxID0gajEsIHgyID0gajIsIHgzID0gajMsIHg0ID0gajQsIHg1ID0gajUsIHg2ID0gajYsIHg3ID0gajcsXG4gICAgICB4OCA9IGo4LCB4OSA9IGo5LCB4MTAgPSBqMTAsIHgxMSA9IGoxMSwgeDEyID0gajEyLCB4MTMgPSBqMTMsIHgxNCA9IGoxNCxcbiAgICAgIHgxNSA9IGoxNSwgdTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpICs9IDIpIHtcbiAgICB1ID0geDAgKyB4MTIgfCAwO1xuICAgIHg0IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NCArIHgwIHwgMDtcbiAgICB4OCBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDggKyB4NCB8IDA7XG4gICAgeDEyIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxMiArIHg4IHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDEgfCAwO1xuICAgIHg5IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4OSArIHg1IHwgMDtcbiAgICB4MTMgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgxMyArIHg5IHwgMDtcbiAgICB4MSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MSArIHgxMyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4NiB8IDA7XG4gICAgeDE0IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTQgKyB4MTAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxNCB8IDA7XG4gICAgeDYgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDYgKyB4MiB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDExIHwgMDtcbiAgICB4MyBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDMgKyB4MTUgfCAwO1xuICAgIHg3IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4NyArIHgzIHwgMDtcbiAgICB4MTEgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDExICsgeDcgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgwICsgeDMgfCAwO1xuICAgIHgxIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MSArIHgwIHwgMDtcbiAgICB4MiBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDIgKyB4MSB8IDA7XG4gICAgeDMgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDMgKyB4MiB8IDA7XG4gICAgeDAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4NSArIHg0IHwgMDtcbiAgICB4NiBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDYgKyB4NSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDYgfCAwO1xuICAgIHg0IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg0ICsgeDcgfCAwO1xuICAgIHg1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDEwICsgeDkgfCAwO1xuICAgIHgxMSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDExICsgeDEwIHwgMDtcbiAgICB4OCBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDggKyB4MTEgfCAwO1xuICAgIHg5IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg5ICsgeDggfCAwO1xuICAgIHgxMCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxNSArIHgxNCB8IDA7XG4gICAgeDEyIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTIgKyB4MTUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDEyIHwgMDtcbiAgICB4MTQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDE0ICsgeDEzIHwgMDtcbiAgICB4MTUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcbiAgfVxuXG4gIG9bIDBdID0geDAgPj4+ICAwICYgMHhmZjtcbiAgb1sgMV0gPSB4MCA+Pj4gIDggJiAweGZmO1xuICBvWyAyXSA9IHgwID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDNdID0geDAgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA0XSA9IHg1ID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDVdID0geDUgPj4+ICA4ICYgMHhmZjtcbiAgb1sgNl0gPSB4NSA+Pj4gMTYgJiAweGZmO1xuICBvWyA3XSA9IHg1ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sgOF0gPSB4MTAgPj4+ICAwICYgMHhmZjtcbiAgb1sgOV0gPSB4MTAgPj4+ICA4ICYgMHhmZjtcbiAgb1sxMF0gPSB4MTAgPj4+IDE2ICYgMHhmZjtcbiAgb1sxMV0gPSB4MTAgPj4+IDI0ICYgMHhmZjtcblxuICBvWzEyXSA9IHgxNSA+Pj4gIDAgJiAweGZmO1xuICBvWzEzXSA9IHgxNSA+Pj4gIDggJiAweGZmO1xuICBvWzE0XSA9IHgxNSA+Pj4gMTYgJiAweGZmO1xuICBvWzE1XSA9IHgxNSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTZdID0geDYgPj4+ICAwICYgMHhmZjtcbiAgb1sxN10gPSB4NiA+Pj4gIDggJiAweGZmO1xuICBvWzE4XSA9IHg2ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTldID0geDYgPj4+IDI0ICYgMHhmZjtcblxuICBvWzIwXSA9IHg3ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjFdID0geDcgPj4+ICA4ICYgMHhmZjtcbiAgb1syMl0gPSB4NyA+Pj4gMTYgJiAweGZmO1xuICBvWzIzXSA9IHg3ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syNF0gPSB4OCA+Pj4gIDAgJiAweGZmO1xuICBvWzI1XSA9IHg4ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjZdID0geDggPj4+IDE2ICYgMHhmZjtcbiAgb1syN10gPSB4OCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjhdID0geDkgPj4+ICAwICYgMHhmZjtcbiAgb1syOV0gPSB4OSA+Pj4gIDggJiAweGZmO1xuICBvWzMwXSA9IHg5ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMzFdID0geDkgPj4+IDI0ICYgMHhmZjtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2NvcmVfc2Fsc2EyMChvdXQsaW5wLGssYykge1xuICBjb3JlX3NhbHNhMjAob3V0LGlucCxrLGMpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fY29yZV9oc2Fsc2EyMChvdXQsaW5wLGssYykge1xuICBjb3JlX2hzYWxzYTIwKG91dCxpbnAsayxjKTtcbn1cblxudmFyIHNpZ21hID0gbmV3IFVpbnQ4QXJyYXkoWzEwMSwgMTIwLCAxMTIsIDk3LCAxMTAsIDEwMCwgMzIsIDUxLCA1MCwgNDUsIDk4LCAxMjEsIDExNiwgMTAxLCAzMiwgMTA3XSk7XG4gICAgICAgICAgICAvLyBcImV4cGFuZCAzMi1ieXRlIGtcIlxuXG5mdW5jdGlvbiBjcnlwdG9fc3RyZWFtX3NhbHNhMjBfeG9yKGMsY3BvcyxtLG1wb3MsYixuLGspIHtcbiAgdmFyIHogPSBuZXcgVWludDhBcnJheSgxNiksIHggPSBuZXcgVWludDhBcnJheSg2NCk7XG4gIHZhciB1LCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeltpXSA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHpbaV0gPSBuW2ldO1xuICB3aGlsZSAoYiA+PSA2NCkge1xuICAgIGNyeXB0b19jb3JlX3NhbHNhMjAoeCx6LGssc2lnbWEpO1xuICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSBjW2Nwb3MraV0gPSBtW21wb3MraV0gXiB4W2ldO1xuICAgIHUgPSAxO1xuICAgIGZvciAoaSA9IDg7IGkgPCAxNjsgaSsrKSB7XG4gICAgICB1ID0gdSArICh6W2ldICYgMHhmZikgfCAwO1xuICAgICAgeltpXSA9IHUgJiAweGZmO1xuICAgICAgdSA+Pj49IDg7XG4gICAgfVxuICAgIGIgLT0gNjQ7XG4gICAgY3BvcyArPSA2NDtcbiAgICBtcG9zICs9IDY0O1xuICB9XG4gIGlmIChiID4gMCkge1xuICAgIGNyeXB0b19jb3JlX3NhbHNhMjAoeCx6LGssc2lnbWEpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBiOyBpKyspIGNbY3BvcytpXSA9IG1bbXBvcytpXSBeIHhbaV07XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW1fc2Fsc2EyMChjLGNwb3MsYixuLGspIHtcbiAgdmFyIHogPSBuZXcgVWludDhBcnJheSgxNiksIHggPSBuZXcgVWludDhBcnJheSg2NCk7XG4gIHZhciB1LCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeltpXSA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHpbaV0gPSBuW2ldO1xuICB3aGlsZSAoYiA+PSA2NCkge1xuICAgIGNyeXB0b19jb3JlX3NhbHNhMjAoeCx6LGssc2lnbWEpO1xuICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSBjW2Nwb3MraV0gPSB4W2ldO1xuICAgIHUgPSAxO1xuICAgIGZvciAoaSA9IDg7IGkgPCAxNjsgaSsrKSB7XG4gICAgICB1ID0gdSArICh6W2ldICYgMHhmZikgfCAwO1xuICAgICAgeltpXSA9IHUgJiAweGZmO1xuICAgICAgdSA+Pj49IDg7XG4gICAgfVxuICAgIGIgLT0gNjQ7XG4gICAgY3BvcyArPSA2NDtcbiAgfVxuICBpZiAoYiA+IDApIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYjsgaSsrKSBjW2Nwb3MraV0gPSB4W2ldO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc3RyZWFtKGMsY3BvcyxkLG4saykge1xuICB2YXIgcyA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgY3J5cHRvX2NvcmVfaHNhbHNhMjAocyxuLGssc2lnbWEpO1xuICB2YXIgc24gPSBuZXcgVWludDhBcnJheSg4KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHNuW2ldID0gbltpKzE2XTtcbiAgcmV0dXJuIGNyeXB0b19zdHJlYW1fc2Fsc2EyMChjLGNwb3MsZCxzbixzKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbV94b3IoYyxjcG9zLG0sbXBvcyxkLG4saykge1xuICB2YXIgcyA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgY3J5cHRvX2NvcmVfaHNhbHNhMjAocyxuLGssc2lnbWEpO1xuICB2YXIgc24gPSBuZXcgVWludDhBcnJheSg4KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHNuW2ldID0gbltpKzE2XTtcbiAgcmV0dXJuIGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3IoYyxjcG9zLG0sbXBvcyxkLHNuLHMpO1xufVxuXG4vKlxuKiBQb3J0IG9mIEFuZHJldyBNb29uJ3MgUG9seTEzMDUtZG9ubmEtMTYuIFB1YmxpYyBkb21haW4uXG4qIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9vZHliZXJyeS9wb2x5MTMwNS1kb25uYVxuKi9cblxudmFyIHBvbHkxMzA1ID0gZnVuY3Rpb24oa2V5KSB7XG4gIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICB0aGlzLnIgPSBuZXcgVWludDE2QXJyYXkoMTApO1xuICB0aGlzLmggPSBuZXcgVWludDE2QXJyYXkoMTApO1xuICB0aGlzLnBhZCA9IG5ldyBVaW50MTZBcnJheSg4KTtcbiAgdGhpcy5sZWZ0b3ZlciA9IDA7XG4gIHRoaXMuZmluID0gMDtcblxuICB2YXIgdDAsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3O1xuXG4gIHQwID0ga2V5WyAwXSAmIDB4ZmYgfCAoa2V5WyAxXSAmIDB4ZmYpIDw8IDg7IHRoaXMuclswXSA9ICggdDAgICAgICAgICAgICAgICAgICAgICApICYgMHgxZmZmO1xuICB0MSA9IGtleVsgMl0gJiAweGZmIHwgKGtleVsgM10gJiAweGZmKSA8PCA4OyB0aGlzLnJbMV0gPSAoKHQwID4+PiAxMykgfCAodDEgPDwgIDMpKSAmIDB4MWZmZjtcbiAgdDIgPSBrZXlbIDRdICYgMHhmZiB8IChrZXlbIDVdICYgMHhmZikgPDwgODsgdGhpcy5yWzJdID0gKCh0MSA+Pj4gMTApIHwgKHQyIDw8ICA2KSkgJiAweDFmMDM7XG4gIHQzID0ga2V5WyA2XSAmIDB4ZmYgfCAoa2V5WyA3XSAmIDB4ZmYpIDw8IDg7IHRoaXMuclszXSA9ICgodDIgPj4+ICA3KSB8ICh0MyA8PCAgOSkpICYgMHgxZmZmO1xuICB0NCA9IGtleVsgOF0gJiAweGZmIHwgKGtleVsgOV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbNF0gPSAoKHQzID4+PiAgNCkgfCAodDQgPDwgMTIpKSAmIDB4MDBmZjtcbiAgdGhpcy5yWzVdID0gKCh0NCA+Pj4gIDEpKSAmIDB4MWZmZTtcbiAgdDUgPSBrZXlbMTBdICYgMHhmZiB8IChrZXlbMTFdICYgMHhmZikgPDwgODsgdGhpcy5yWzZdID0gKCh0NCA+Pj4gMTQpIHwgKHQ1IDw8ICAyKSkgJiAweDFmZmY7XG4gIHQ2ID0ga2V5WzEyXSAmIDB4ZmYgfCAoa2V5WzEzXSAmIDB4ZmYpIDw8IDg7IHRoaXMucls3XSA9ICgodDUgPj4+IDExKSB8ICh0NiA8PCAgNSkpICYgMHgxZjgxO1xuICB0NyA9IGtleVsxNF0gJiAweGZmIHwgKGtleVsxNV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbOF0gPSAoKHQ2ID4+PiAgOCkgfCAodDcgPDwgIDgpKSAmIDB4MWZmZjtcbiAgdGhpcy5yWzldID0gKCh0NyA+Pj4gIDUpKSAmIDB4MDA3ZjtcblxuICB0aGlzLnBhZFswXSA9IGtleVsxNl0gJiAweGZmIHwgKGtleVsxN10gJiAweGZmKSA8PCA4O1xuICB0aGlzLnBhZFsxXSA9IGtleVsxOF0gJiAweGZmIHwgKGtleVsxOV0gJiAweGZmKSA8PCA4O1xuICB0aGlzLnBhZFsyXSA9IGtleVsyMF0gJiAweGZmIHwgKGtleVsyMV0gJiAweGZmKSA8PCA4O1xuICB0aGlzLnBhZFszXSA9IGtleVsyMl0gJiAweGZmIHwgKGtleVsyM10gJiAweGZmKSA8PCA4O1xuICB0aGlzLnBhZFs0XSA9IGtleVsyNF0gJiAweGZmIHwgKGtleVsyNV0gJiAweGZmKSA8PCA4O1xuICB0aGlzLnBhZFs1XSA9IGtleVsyNl0gJiAweGZmIHwgKGtleVsyN10gJiAweGZmKSA8PCA4O1xuICB0aGlzLnBhZFs2XSA9IGtleVsyOF0gJiAweGZmIHwgKGtleVsyOV0gJiAweGZmKSA8PCA4O1xuICB0aGlzLnBhZFs3XSA9IGtleVszMF0gJiAweGZmIHwgKGtleVszMV0gJiAweGZmKSA8PCA4O1xufTtcblxucG9seTEzMDUucHJvdG90eXBlLmJsb2NrcyA9IGZ1bmN0aW9uKG0sIG1wb3MsIGJ5dGVzKSB7XG4gIHZhciBoaWJpdCA9IHRoaXMuZmluID8gMCA6ICgxIDw8IDExKTtcbiAgdmFyIHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgYztcbiAgdmFyIGQwLCBkMSwgZDIsIGQzLCBkNCwgZDUsIGQ2LCBkNywgZDgsIGQ5O1xuXG4gIHZhciBoMCA9IHRoaXMuaFswXSxcbiAgICAgIGgxID0gdGhpcy5oWzFdLFxuICAgICAgaDIgPSB0aGlzLmhbMl0sXG4gICAgICBoMyA9IHRoaXMuaFszXSxcbiAgICAgIGg0ID0gdGhpcy5oWzRdLFxuICAgICAgaDUgPSB0aGlzLmhbNV0sXG4gICAgICBoNiA9IHRoaXMuaFs2XSxcbiAgICAgIGg3ID0gdGhpcy5oWzddLFxuICAgICAgaDggPSB0aGlzLmhbOF0sXG4gICAgICBoOSA9IHRoaXMuaFs5XTtcblxuICB2YXIgcjAgPSB0aGlzLnJbMF0sXG4gICAgICByMSA9IHRoaXMuclsxXSxcbiAgICAgIHIyID0gdGhpcy5yWzJdLFxuICAgICAgcjMgPSB0aGlzLnJbM10sXG4gICAgICByNCA9IHRoaXMucls0XSxcbiAgICAgIHI1ID0gdGhpcy5yWzVdLFxuICAgICAgcjYgPSB0aGlzLnJbNl0sXG4gICAgICByNyA9IHRoaXMucls3XSxcbiAgICAgIHI4ID0gdGhpcy5yWzhdLFxuICAgICAgcjkgPSB0aGlzLnJbOV07XG5cbiAgd2hpbGUgKGJ5dGVzID49IDE2KSB7XG4gICAgdDAgPSBtW21wb3MrIDBdICYgMHhmZiB8IChtW21wb3MrIDFdICYgMHhmZikgPDwgODsgaDAgKz0gKCB0MCAgICAgICAgICAgICAgICAgICAgICkgJiAweDFmZmY7XG4gICAgdDEgPSBtW21wb3MrIDJdICYgMHhmZiB8IChtW21wb3MrIDNdICYgMHhmZikgPDwgODsgaDEgKz0gKCh0MCA+Pj4gMTMpIHwgKHQxIDw8ICAzKSkgJiAweDFmZmY7XG4gICAgdDIgPSBtW21wb3MrIDRdICYgMHhmZiB8IChtW21wb3MrIDVdICYgMHhmZikgPDwgODsgaDIgKz0gKCh0MSA+Pj4gMTApIHwgKHQyIDw8ICA2KSkgJiAweDFmZmY7XG4gICAgdDMgPSBtW21wb3MrIDZdICYgMHhmZiB8IChtW21wb3MrIDddICYgMHhmZikgPDwgODsgaDMgKz0gKCh0MiA+Pj4gIDcpIHwgKHQzIDw8ICA5KSkgJiAweDFmZmY7XG4gICAgdDQgPSBtW21wb3MrIDhdICYgMHhmZiB8IChtW21wb3MrIDldICYgMHhmZikgPDwgODsgaDQgKz0gKCh0MyA+Pj4gIDQpIHwgKHQ0IDw8IDEyKSkgJiAweDFmZmY7XG4gICAgaDUgKz0gKCh0NCA+Pj4gIDEpKSAmIDB4MWZmZjtcbiAgICB0NSA9IG1bbXBvcysxMF0gJiAweGZmIHwgKG1bbXBvcysxMV0gJiAweGZmKSA8PCA4OyBoNiArPSAoKHQ0ID4+PiAxNCkgfCAodDUgPDwgIDIpKSAmIDB4MWZmZjtcbiAgICB0NiA9IG1bbXBvcysxMl0gJiAweGZmIHwgKG1bbXBvcysxM10gJiAweGZmKSA8PCA4OyBoNyArPSAoKHQ1ID4+PiAxMSkgfCAodDYgPDwgIDUpKSAmIDB4MWZmZjtcbiAgICB0NyA9IG1bbXBvcysxNF0gJiAweGZmIHwgKG1bbXBvcysxNV0gJiAweGZmKSA8PCA4OyBoOCArPSAoKHQ2ID4+PiAgOCkgfCAodDcgPDwgIDgpKSAmIDB4MWZmZjtcbiAgICBoOSArPSAoKHQ3ID4+PiA1KSkgfCBoaWJpdDtcblxuICAgIGMgPSAwO1xuXG4gICAgZDAgPSBjO1xuICAgIGQwICs9IGgwICogcjA7XG4gICAgZDAgKz0gaDEgKiAoNSAqIHI5KTtcbiAgICBkMCArPSBoMiAqICg1ICogcjgpO1xuICAgIGQwICs9IGgzICogKDUgKiByNyk7XG4gICAgZDAgKz0gaDQgKiAoNSAqIHI2KTtcbiAgICBjID0gKGQwID4+PiAxMyk7IGQwICY9IDB4MWZmZjtcbiAgICBkMCArPSBoNSAqICg1ICogcjUpO1xuICAgIGQwICs9IGg2ICogKDUgKiByNCk7XG4gICAgZDAgKz0gaDcgKiAoNSAqIHIzKTtcbiAgICBkMCArPSBoOCAqICg1ICogcjIpO1xuICAgIGQwICs9IGg5ICogKDUgKiByMSk7XG4gICAgYyArPSAoZDAgPj4+IDEzKTsgZDAgJj0gMHgxZmZmO1xuXG4gICAgZDEgPSBjO1xuICAgIGQxICs9IGgwICogcjE7XG4gICAgZDEgKz0gaDEgKiByMDtcbiAgICBkMSArPSBoMiAqICg1ICogcjkpO1xuICAgIGQxICs9IGgzICogKDUgKiByOCk7XG4gICAgZDEgKz0gaDQgKiAoNSAqIHI3KTtcbiAgICBjID0gKGQxID4+PiAxMyk7IGQxICY9IDB4MWZmZjtcbiAgICBkMSArPSBoNSAqICg1ICogcjYpO1xuICAgIGQxICs9IGg2ICogKDUgKiByNSk7XG4gICAgZDEgKz0gaDcgKiAoNSAqIHI0KTtcbiAgICBkMSArPSBoOCAqICg1ICogcjMpO1xuICAgIGQxICs9IGg5ICogKDUgKiByMik7XG4gICAgYyArPSAoZDEgPj4+IDEzKTsgZDEgJj0gMHgxZmZmO1xuXG4gICAgZDIgPSBjO1xuICAgIGQyICs9IGgwICogcjI7XG4gICAgZDIgKz0gaDEgKiByMTtcbiAgICBkMiArPSBoMiAqIHIwO1xuICAgIGQyICs9IGgzICogKDUgKiByOSk7XG4gICAgZDIgKz0gaDQgKiAoNSAqIHI4KTtcbiAgICBjID0gKGQyID4+PiAxMyk7IGQyICY9IDB4MWZmZjtcbiAgICBkMiArPSBoNSAqICg1ICogcjcpO1xuICAgIGQyICs9IGg2ICogKDUgKiByNik7XG4gICAgZDIgKz0gaDcgKiAoNSAqIHI1KTtcbiAgICBkMiArPSBoOCAqICg1ICogcjQpO1xuICAgIGQyICs9IGg5ICogKDUgKiByMyk7XG4gICAgYyArPSAoZDIgPj4+IDEzKTsgZDIgJj0gMHgxZmZmO1xuXG4gICAgZDMgPSBjO1xuICAgIGQzICs9IGgwICogcjM7XG4gICAgZDMgKz0gaDEgKiByMjtcbiAgICBkMyArPSBoMiAqIHIxO1xuICAgIGQzICs9IGgzICogcjA7XG4gICAgZDMgKz0gaDQgKiAoNSAqIHI5KTtcbiAgICBjID0gKGQzID4+PiAxMyk7IGQzICY9IDB4MWZmZjtcbiAgICBkMyArPSBoNSAqICg1ICogcjgpO1xuICAgIGQzICs9IGg2ICogKDUgKiByNyk7XG4gICAgZDMgKz0gaDcgKiAoNSAqIHI2KTtcbiAgICBkMyArPSBoOCAqICg1ICogcjUpO1xuICAgIGQzICs9IGg5ICogKDUgKiByNCk7XG4gICAgYyArPSAoZDMgPj4+IDEzKTsgZDMgJj0gMHgxZmZmO1xuXG4gICAgZDQgPSBjO1xuICAgIGQ0ICs9IGgwICogcjQ7XG4gICAgZDQgKz0gaDEgKiByMztcbiAgICBkNCArPSBoMiAqIHIyO1xuICAgIGQ0ICs9IGgzICogcjE7XG4gICAgZDQgKz0gaDQgKiByMDtcbiAgICBjID0gKGQ0ID4+PiAxMyk7IGQ0ICY9IDB4MWZmZjtcbiAgICBkNCArPSBoNSAqICg1ICogcjkpO1xuICAgIGQ0ICs9IGg2ICogKDUgKiByOCk7XG4gICAgZDQgKz0gaDcgKiAoNSAqIHI3KTtcbiAgICBkNCArPSBoOCAqICg1ICogcjYpO1xuICAgIGQ0ICs9IGg5ICogKDUgKiByNSk7XG4gICAgYyArPSAoZDQgPj4+IDEzKTsgZDQgJj0gMHgxZmZmO1xuXG4gICAgZDUgPSBjO1xuICAgIGQ1ICs9IGgwICogcjU7XG4gICAgZDUgKz0gaDEgKiByNDtcbiAgICBkNSArPSBoMiAqIHIzO1xuICAgIGQ1ICs9IGgzICogcjI7XG4gICAgZDUgKz0gaDQgKiByMTtcbiAgICBjID0gKGQ1ID4+PiAxMyk7IGQ1ICY9IDB4MWZmZjtcbiAgICBkNSArPSBoNSAqIHIwO1xuICAgIGQ1ICs9IGg2ICogKDUgKiByOSk7XG4gICAgZDUgKz0gaDcgKiAoNSAqIHI4KTtcbiAgICBkNSArPSBoOCAqICg1ICogcjcpO1xuICAgIGQ1ICs9IGg5ICogKDUgKiByNik7XG4gICAgYyArPSAoZDUgPj4+IDEzKTsgZDUgJj0gMHgxZmZmO1xuXG4gICAgZDYgPSBjO1xuICAgIGQ2ICs9IGgwICogcjY7XG4gICAgZDYgKz0gaDEgKiByNTtcbiAgICBkNiArPSBoMiAqIHI0O1xuICAgIGQ2ICs9IGgzICogcjM7XG4gICAgZDYgKz0gaDQgKiByMjtcbiAgICBjID0gKGQ2ID4+PiAxMyk7IGQ2ICY9IDB4MWZmZjtcbiAgICBkNiArPSBoNSAqIHIxO1xuICAgIGQ2ICs9IGg2ICogcjA7XG4gICAgZDYgKz0gaDcgKiAoNSAqIHI5KTtcbiAgICBkNiArPSBoOCAqICg1ICogcjgpO1xuICAgIGQ2ICs9IGg5ICogKDUgKiByNyk7XG4gICAgYyArPSAoZDYgPj4+IDEzKTsgZDYgJj0gMHgxZmZmO1xuXG4gICAgZDcgPSBjO1xuICAgIGQ3ICs9IGgwICogcjc7XG4gICAgZDcgKz0gaDEgKiByNjtcbiAgICBkNyArPSBoMiAqIHI1O1xuICAgIGQ3ICs9IGgzICogcjQ7XG4gICAgZDcgKz0gaDQgKiByMztcbiAgICBjID0gKGQ3ID4+PiAxMyk7IGQ3ICY9IDB4MWZmZjtcbiAgICBkNyArPSBoNSAqIHIyO1xuICAgIGQ3ICs9IGg2ICogcjE7XG4gICAgZDcgKz0gaDcgKiByMDtcbiAgICBkNyArPSBoOCAqICg1ICogcjkpO1xuICAgIGQ3ICs9IGg5ICogKDUgKiByOCk7XG4gICAgYyArPSAoZDcgPj4+IDEzKTsgZDcgJj0gMHgxZmZmO1xuXG4gICAgZDggPSBjO1xuICAgIGQ4ICs9IGgwICogcjg7XG4gICAgZDggKz0gaDEgKiByNztcbiAgICBkOCArPSBoMiAqIHI2O1xuICAgIGQ4ICs9IGgzICogcjU7XG4gICAgZDggKz0gaDQgKiByNDtcbiAgICBjID0gKGQ4ID4+PiAxMyk7IGQ4ICY9IDB4MWZmZjtcbiAgICBkOCArPSBoNSAqIHIzO1xuICAgIGQ4ICs9IGg2ICogcjI7XG4gICAgZDggKz0gaDcgKiByMTtcbiAgICBkOCArPSBoOCAqIHIwO1xuICAgIGQ4ICs9IGg5ICogKDUgKiByOSk7XG4gICAgYyArPSAoZDggPj4+IDEzKTsgZDggJj0gMHgxZmZmO1xuXG4gICAgZDkgPSBjO1xuICAgIGQ5ICs9IGgwICogcjk7XG4gICAgZDkgKz0gaDEgKiByODtcbiAgICBkOSArPSBoMiAqIHI3O1xuICAgIGQ5ICs9IGgzICogcjY7XG4gICAgZDkgKz0gaDQgKiByNTtcbiAgICBjID0gKGQ5ID4+PiAxMyk7IGQ5ICY9IDB4MWZmZjtcbiAgICBkOSArPSBoNSAqIHI0O1xuICAgIGQ5ICs9IGg2ICogcjM7XG4gICAgZDkgKz0gaDcgKiByMjtcbiAgICBkOSArPSBoOCAqIHIxO1xuICAgIGQ5ICs9IGg5ICogcjA7XG4gICAgYyArPSAoZDkgPj4+IDEzKTsgZDkgJj0gMHgxZmZmO1xuXG4gICAgYyA9ICgoKGMgPDwgMikgKyBjKSkgfCAwO1xuICAgIGMgPSAoYyArIGQwKSB8IDA7XG4gICAgZDAgPSBjICYgMHgxZmZmO1xuICAgIGMgPSAoYyA+Pj4gMTMpO1xuICAgIGQxICs9IGM7XG5cbiAgICBoMCA9IGQwO1xuICAgIGgxID0gZDE7XG4gICAgaDIgPSBkMjtcbiAgICBoMyA9IGQzO1xuICAgIGg0ID0gZDQ7XG4gICAgaDUgPSBkNTtcbiAgICBoNiA9IGQ2O1xuICAgIGg3ID0gZDc7XG4gICAgaDggPSBkODtcbiAgICBoOSA9IGQ5O1xuXG4gICAgbXBvcyArPSAxNjtcbiAgICBieXRlcyAtPSAxNjtcbiAgfVxuICB0aGlzLmhbMF0gPSBoMDtcbiAgdGhpcy5oWzFdID0gaDE7XG4gIHRoaXMuaFsyXSA9IGgyO1xuICB0aGlzLmhbM10gPSBoMztcbiAgdGhpcy5oWzRdID0gaDQ7XG4gIHRoaXMuaFs1XSA9IGg1O1xuICB0aGlzLmhbNl0gPSBoNjtcbiAgdGhpcy5oWzddID0gaDc7XG4gIHRoaXMuaFs4XSA9IGg4O1xuICB0aGlzLmhbOV0gPSBoOTtcbn07XG5cbnBvbHkxMzA1LnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbihtYWMsIG1hY3Bvcykge1xuICB2YXIgZyA9IG5ldyBVaW50MTZBcnJheSgxMCk7XG4gIHZhciBjLCBtYXNrLCBmLCBpO1xuXG4gIGlmICh0aGlzLmxlZnRvdmVyKSB7XG4gICAgaSA9IHRoaXMubGVmdG92ZXI7XG4gICAgdGhpcy5idWZmZXJbaSsrXSA9IDE7XG4gICAgZm9yICg7IGkgPCAxNjsgaSsrKSB0aGlzLmJ1ZmZlcltpXSA9IDA7XG4gICAgdGhpcy5maW4gPSAxO1xuICAgIHRoaXMuYmxvY2tzKHRoaXMuYnVmZmVyLCAwLCAxNik7XG4gIH1cblxuICBjID0gdGhpcy5oWzFdID4+PiAxMztcbiAgdGhpcy5oWzFdICY9IDB4MWZmZjtcbiAgZm9yIChpID0gMjsgaSA8IDEwOyBpKyspIHtcbiAgICB0aGlzLmhbaV0gKz0gYztcbiAgICBjID0gdGhpcy5oW2ldID4+PiAxMztcbiAgICB0aGlzLmhbaV0gJj0gMHgxZmZmO1xuICB9XG4gIHRoaXMuaFswXSArPSAoYyAqIDUpO1xuICBjID0gdGhpcy5oWzBdID4+PiAxMztcbiAgdGhpcy5oWzBdICY9IDB4MWZmZjtcbiAgdGhpcy5oWzFdICs9IGM7XG4gIGMgPSB0aGlzLmhbMV0gPj4+IDEzO1xuICB0aGlzLmhbMV0gJj0gMHgxZmZmO1xuICB0aGlzLmhbMl0gKz0gYztcblxuICBnWzBdID0gdGhpcy5oWzBdICsgNTtcbiAgYyA9IGdbMF0gPj4+IDEzO1xuICBnWzBdICY9IDB4MWZmZjtcbiAgZm9yIChpID0gMTsgaSA8IDEwOyBpKyspIHtcbiAgICBnW2ldID0gdGhpcy5oW2ldICsgYztcbiAgICBjID0gZ1tpXSA+Pj4gMTM7XG4gICAgZ1tpXSAmPSAweDFmZmY7XG4gIH1cbiAgZ1s5XSAtPSAoMSA8PCAxMyk7XG5cbiAgbWFzayA9IChjIF4gMSkgLSAxO1xuICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgZ1tpXSAmPSBtYXNrO1xuICBtYXNrID0gfm1hc2s7XG4gIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB0aGlzLmhbaV0gPSAodGhpcy5oW2ldICYgbWFzaykgfCBnW2ldO1xuXG4gIHRoaXMuaFswXSA9ICgodGhpcy5oWzBdICAgICAgICkgfCAodGhpcy5oWzFdIDw8IDEzKSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzFdID0gKCh0aGlzLmhbMV0gPj4+ICAzKSB8ICh0aGlzLmhbMl0gPDwgMTApICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbMl0gPSAoKHRoaXMuaFsyXSA+Pj4gIDYpIHwgKHRoaXMuaFszXSA8PCAgNykgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFszXSA9ICgodGhpcy5oWzNdID4+PiAgOSkgfCAodGhpcy5oWzRdIDw8ICA0KSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzRdID0gKCh0aGlzLmhbNF0gPj4+IDEyKSB8ICh0aGlzLmhbNV0gPDwgIDEpIHwgKHRoaXMuaFs2XSA8PCAxNCkpICYgMHhmZmZmO1xuICB0aGlzLmhbNV0gPSAoKHRoaXMuaFs2XSA+Pj4gIDIpIHwgKHRoaXMuaFs3XSA8PCAxMSkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs2XSA9ICgodGhpcy5oWzddID4+PiAgNSkgfCAodGhpcy5oWzhdIDw8ICA4KSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzddID0gKCh0aGlzLmhbOF0gPj4+ICA4KSB8ICh0aGlzLmhbOV0gPDwgIDUpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuXG4gIGYgPSB0aGlzLmhbMF0gKyB0aGlzLnBhZFswXTtcbiAgdGhpcy5oWzBdID0gZiAmIDB4ZmZmZjtcbiAgZm9yIChpID0gMTsgaSA8IDg7IGkrKykge1xuICAgIGYgPSAoKCh0aGlzLmhbaV0gKyB0aGlzLnBhZFtpXSkgfCAwKSArIChmID4+PiAxNikpIHwgMDtcbiAgICB0aGlzLmhbaV0gPSBmICYgMHhmZmZmO1xuICB9XG5cbiAgbWFjW21hY3BvcysgMF0gPSAodGhpcy5oWzBdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDFdID0gKHRoaXMuaFswXSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyAyXSA9ICh0aGlzLmhbMV0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgM10gPSAodGhpcy5oWzFdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDRdID0gKHRoaXMuaFsyXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA1XSA9ICh0aGlzLmhbMl0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgNl0gPSAodGhpcy5oWzNdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDddID0gKHRoaXMuaFszXSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA4XSA9ICh0aGlzLmhbNF0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgOV0gPSAodGhpcy5oWzRdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTBdID0gKHRoaXMuaFs1XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzExXSA9ICh0aGlzLmhbNV0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysxMl0gPSAodGhpcy5oWzZdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTNdID0gKHRoaXMuaFs2XSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzE0XSA9ICh0aGlzLmhbN10gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysxNV0gPSAodGhpcy5oWzddID4+PiA4KSAmIDB4ZmY7XG59O1xuXG5wb2x5MTMwNS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24obSwgbXBvcywgYnl0ZXMpIHtcbiAgdmFyIGksIHdhbnQ7XG5cbiAgaWYgKHRoaXMubGVmdG92ZXIpIHtcbiAgICB3YW50ID0gKDE2IC0gdGhpcy5sZWZ0b3Zlcik7XG4gICAgaWYgKHdhbnQgPiBieXRlcylcbiAgICAgIHdhbnQgPSBieXRlcztcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2FudDsgaSsrKVxuICAgICAgdGhpcy5idWZmZXJbdGhpcy5sZWZ0b3ZlciArIGldID0gbVttcG9zK2ldO1xuICAgIGJ5dGVzIC09IHdhbnQ7XG4gICAgbXBvcyArPSB3YW50O1xuICAgIHRoaXMubGVmdG92ZXIgKz0gd2FudDtcbiAgICBpZiAodGhpcy5sZWZ0b3ZlciA8IDE2KVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuYmxvY2tzKHRoaXMuYnVmZmVyLCAwLCAxNik7XG4gICAgdGhpcy5sZWZ0b3ZlciA9IDA7XG4gIH1cblxuICBpZiAoYnl0ZXMgPj0gMTYpIHtcbiAgICB3YW50ID0gYnl0ZXMgLSAoYnl0ZXMgJSAxNik7XG4gICAgdGhpcy5ibG9ja3MobSwgbXBvcywgd2FudCk7XG4gICAgbXBvcyArPSB3YW50O1xuICAgIGJ5dGVzIC09IHdhbnQ7XG4gIH1cblxuICBpZiAoYnl0ZXMpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYnl0ZXM7IGkrKylcbiAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVmdG92ZXIgKyBpXSA9IG1bbXBvcytpXTtcbiAgICB0aGlzLmxlZnRvdmVyICs9IGJ5dGVzO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjcnlwdG9fb25ldGltZWF1dGgob3V0LCBvdXRwb3MsIG0sIG1wb3MsIG4sIGspIHtcbiAgdmFyIHMgPSBuZXcgcG9seTEzMDUoayk7XG4gIHMudXBkYXRlKG0sIG1wb3MsIG4pO1xuICBzLmZpbmlzaChvdXQsIG91dHBvcyk7XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5KGgsIGhwb3MsIG0sIG1wb3MsIG4sIGspIHtcbiAgdmFyIHggPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGNyeXB0b19vbmV0aW1lYXV0aCh4LDAsbSxtcG9zLG4sayk7XG4gIHJldHVybiBjcnlwdG9fdmVyaWZ5XzE2KGgsaHBvcyx4LDApO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2VjcmV0Ym94KGMsbSxkLG4saykge1xuICB2YXIgaTtcbiAgaWYgKGQgPCAzMikgcmV0dXJuIC0xO1xuICBjcnlwdG9fc3RyZWFtX3hvcihjLDAsbSwwLGQsbixrKTtcbiAgY3J5cHRvX29uZXRpbWVhdXRoKGMsIDE2LCBjLCAzMiwgZCAtIDMyLCBjKTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIGNbaV0gPSAwO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NlY3JldGJveF9vcGVuKG0sYyxkLG4saykge1xuICB2YXIgaTtcbiAgdmFyIHggPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGlmIChkIDwgMzIpIHJldHVybiAtMTtcbiAgY3J5cHRvX3N0cmVhbSh4LDAsMzIsbixrKTtcbiAgaWYgKGNyeXB0b19vbmV0aW1lYXV0aF92ZXJpZnkoYywgMTYsYywgMzIsZCAtIDMyLHgpICE9PSAwKSByZXR1cm4gLTE7XG4gIGNyeXB0b19zdHJlYW1feG9yKG0sMCxjLDAsZCxuLGspO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgbVtpXSA9IDA7XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBzZXQyNTUxOShyLCBhKSB7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgcltpXSA9IGFbaV18MDtcbn1cblxuZnVuY3Rpb24gY2FyMjU1MTkobykge1xuICB2YXIgaSwgdiwgYyA9IDE7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgdiA9IG9baV0gKyBjICsgNjU1MzU7XG4gICAgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTtcbiAgICBvW2ldID0gdiAtIGMgKiA2NTUzNjtcbiAgfVxuICBvWzBdICs9IGMtMSArIDM3ICogKGMtMSk7XG59XG5cbmZ1bmN0aW9uIHNlbDI1NTE5KHAsIHEsIGIpIHtcbiAgdmFyIHQsIGMgPSB+KGItMSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIHQgPSBjICYgKHBbaV0gXiBxW2ldKTtcbiAgICBwW2ldIF49IHQ7XG4gICAgcVtpXSBePSB0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhY2syNTUxOShvLCBuKSB7XG4gIHZhciBpLCBqLCBiO1xuICB2YXIgbSA9IGdmKCksIHQgPSBnZigpO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgdFtpXSA9IG5baV07XG4gIGNhcjI1NTE5KHQpO1xuICBjYXIyNTUxOSh0KTtcbiAgY2FyMjU1MTkodCk7XG4gIGZvciAoaiA9IDA7IGogPCAyOyBqKyspIHtcbiAgICBtWzBdID0gdFswXSAtIDB4ZmZlZDtcbiAgICBmb3IgKGkgPSAxOyBpIDwgMTU7IGkrKykge1xuICAgICAgbVtpXSA9IHRbaV0gLSAweGZmZmYgLSAoKG1baS0xXT4+MTYpICYgMSk7XG4gICAgICBtW2ktMV0gJj0gMHhmZmZmO1xuICAgIH1cbiAgICBtWzE1XSA9IHRbMTVdIC0gMHg3ZmZmIC0gKChtWzE0XT4+MTYpICYgMSk7XG4gICAgYiA9IChtWzE1XT4+MTYpICYgMTtcbiAgICBtWzE0XSAmPSAweGZmZmY7XG4gICAgc2VsMjU1MTkodCwgbSwgMS1iKTtcbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIG9bMippXSA9IHRbaV0gJiAweGZmO1xuICAgIG9bMippKzFdID0gdFtpXT4+ODtcbiAgfVxufVxuXG5mdW5jdGlvbiBuZXEyNTUxOShhLCBiKSB7XG4gIHZhciBjID0gbmV3IFVpbnQ4QXJyYXkoMzIpLCBkID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBwYWNrMjU1MTkoYywgYSk7XG4gIHBhY2syNTUxOShkLCBiKTtcbiAgcmV0dXJuIGNyeXB0b192ZXJpZnlfMzIoYywgMCwgZCwgMCk7XG59XG5cbmZ1bmN0aW9uIHBhcjI1NTE5KGEpIHtcbiAgdmFyIGQgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIHBhY2syNTUxOShkLCBhKTtcbiAgcmV0dXJuIGRbMF0gJiAxO1xufVxuXG5mdW5jdGlvbiB1bnBhY2syNTUxOShvLCBuKSB7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgb1tpXSA9IG5bMippXSArIChuWzIqaSsxXSA8PCA4KTtcbiAgb1sxNV0gJj0gMHg3ZmZmO1xufVxuXG5mdW5jdGlvbiBBKG8sIGEsIGIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSBvW2ldID0gYVtpXSArIGJbaV07XG59XG5cbmZ1bmN0aW9uIFoobywgYSwgYikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIG9baV0gPSBhW2ldIC0gYltpXTtcbn1cblxuZnVuY3Rpb24gTShvLCBhLCBiKSB7XG4gIHZhciB2LCBjLFxuICAgICB0MCA9IDAsICB0MSA9IDAsICB0MiA9IDAsICB0MyA9IDAsICB0NCA9IDAsICB0NSA9IDAsICB0NiA9IDAsICB0NyA9IDAsXG4gICAgIHQ4ID0gMCwgIHQ5ID0gMCwgdDEwID0gMCwgdDExID0gMCwgdDEyID0gMCwgdDEzID0gMCwgdDE0ID0gMCwgdDE1ID0gMCxcbiAgICB0MTYgPSAwLCB0MTcgPSAwLCB0MTggPSAwLCB0MTkgPSAwLCB0MjAgPSAwLCB0MjEgPSAwLCB0MjIgPSAwLCB0MjMgPSAwLFxuICAgIHQyNCA9IDAsIHQyNSA9IDAsIHQyNiA9IDAsIHQyNyA9IDAsIHQyOCA9IDAsIHQyOSA9IDAsIHQzMCA9IDAsXG4gICAgYjAgPSBiWzBdLFxuICAgIGIxID0gYlsxXSxcbiAgICBiMiA9IGJbMl0sXG4gICAgYjMgPSBiWzNdLFxuICAgIGI0ID0gYls0XSxcbiAgICBiNSA9IGJbNV0sXG4gICAgYjYgPSBiWzZdLFxuICAgIGI3ID0gYls3XSxcbiAgICBiOCA9IGJbOF0sXG4gICAgYjkgPSBiWzldLFxuICAgIGIxMCA9IGJbMTBdLFxuICAgIGIxMSA9IGJbMTFdLFxuICAgIGIxMiA9IGJbMTJdLFxuICAgIGIxMyA9IGJbMTNdLFxuICAgIGIxNCA9IGJbMTRdLFxuICAgIGIxNSA9IGJbMTVdO1xuXG4gIHYgPSBhWzBdO1xuICB0MCArPSB2ICogYjA7XG4gIHQxICs9IHYgKiBiMTtcbiAgdDIgKz0gdiAqIGIyO1xuICB0MyArPSB2ICogYjM7XG4gIHQ0ICs9IHYgKiBiNDtcbiAgdDUgKz0gdiAqIGI1O1xuICB0NiArPSB2ICogYjY7XG4gIHQ3ICs9IHYgKiBiNztcbiAgdDggKz0gdiAqIGI4O1xuICB0OSArPSB2ICogYjk7XG4gIHQxMCArPSB2ICogYjEwO1xuICB0MTEgKz0gdiAqIGIxMTtcbiAgdDEyICs9IHYgKiBiMTI7XG4gIHQxMyArPSB2ICogYjEzO1xuICB0MTQgKz0gdiAqIGIxNDtcbiAgdDE1ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzFdO1xuICB0MSArPSB2ICogYjA7XG4gIHQyICs9IHYgKiBiMTtcbiAgdDMgKz0gdiAqIGIyO1xuICB0NCArPSB2ICogYjM7XG4gIHQ1ICs9IHYgKiBiNDtcbiAgdDYgKz0gdiAqIGI1O1xuICB0NyArPSB2ICogYjY7XG4gIHQ4ICs9IHYgKiBiNztcbiAgdDkgKz0gdiAqIGI4O1xuICB0MTAgKz0gdiAqIGI5O1xuICB0MTEgKz0gdiAqIGIxMDtcbiAgdDEyICs9IHYgKiBiMTE7XG4gIHQxMyArPSB2ICogYjEyO1xuICB0MTQgKz0gdiAqIGIxMztcbiAgdDE1ICs9IHYgKiBiMTQ7XG4gIHQxNiArPSB2ICogYjE1O1xuICB2ID0gYVsyXTtcbiAgdDIgKz0gdiAqIGIwO1xuICB0MyArPSB2ICogYjE7XG4gIHQ0ICs9IHYgKiBiMjtcbiAgdDUgKz0gdiAqIGIzO1xuICB0NiArPSB2ICogYjQ7XG4gIHQ3ICs9IHYgKiBiNTtcbiAgdDggKz0gdiAqIGI2O1xuICB0OSArPSB2ICogYjc7XG4gIHQxMCArPSB2ICogYjg7XG4gIHQxMSArPSB2ICogYjk7XG4gIHQxMiArPSB2ICogYjEwO1xuICB0MTMgKz0gdiAqIGIxMTtcbiAgdDE0ICs9IHYgKiBiMTI7XG4gIHQxNSArPSB2ICogYjEzO1xuICB0MTYgKz0gdiAqIGIxNDtcbiAgdDE3ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzNdO1xuICB0MyArPSB2ICogYjA7XG4gIHQ0ICs9IHYgKiBiMTtcbiAgdDUgKz0gdiAqIGIyO1xuICB0NiArPSB2ICogYjM7XG4gIHQ3ICs9IHYgKiBiNDtcbiAgdDggKz0gdiAqIGI1O1xuICB0OSArPSB2ICogYjY7XG4gIHQxMCArPSB2ICogYjc7XG4gIHQxMSArPSB2ICogYjg7XG4gIHQxMiArPSB2ICogYjk7XG4gIHQxMyArPSB2ICogYjEwO1xuICB0MTQgKz0gdiAqIGIxMTtcbiAgdDE1ICs9IHYgKiBiMTI7XG4gIHQxNiArPSB2ICogYjEzO1xuICB0MTcgKz0gdiAqIGIxNDtcbiAgdDE4ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzRdO1xuICB0NCArPSB2ICogYjA7XG4gIHQ1ICs9IHYgKiBiMTtcbiAgdDYgKz0gdiAqIGIyO1xuICB0NyArPSB2ICogYjM7XG4gIHQ4ICs9IHYgKiBiNDtcbiAgdDkgKz0gdiAqIGI1O1xuICB0MTAgKz0gdiAqIGI2O1xuICB0MTEgKz0gdiAqIGI3O1xuICB0MTIgKz0gdiAqIGI4O1xuICB0MTMgKz0gdiAqIGI5O1xuICB0MTQgKz0gdiAqIGIxMDtcbiAgdDE1ICs9IHYgKiBiMTE7XG4gIHQxNiArPSB2ICogYjEyO1xuICB0MTcgKz0gdiAqIGIxMztcbiAgdDE4ICs9IHYgKiBiMTQ7XG4gIHQxOSArPSB2ICogYjE1O1xuICB2ID0gYVs1XTtcbiAgdDUgKz0gdiAqIGIwO1xuICB0NiArPSB2ICogYjE7XG4gIHQ3ICs9IHYgKiBiMjtcbiAgdDggKz0gdiAqIGIzO1xuICB0OSArPSB2ICogYjQ7XG4gIHQxMCArPSB2ICogYjU7XG4gIHQxMSArPSB2ICogYjY7XG4gIHQxMiArPSB2ICogYjc7XG4gIHQxMyArPSB2ICogYjg7XG4gIHQxNCArPSB2ICogYjk7XG4gIHQxNSArPSB2ICogYjEwO1xuICB0MTYgKz0gdiAqIGIxMTtcbiAgdDE3ICs9IHYgKiBiMTI7XG4gIHQxOCArPSB2ICogYjEzO1xuICB0MTkgKz0gdiAqIGIxNDtcbiAgdDIwICs9IHYgKiBiMTU7XG4gIHYgPSBhWzZdO1xuICB0NiArPSB2ICogYjA7XG4gIHQ3ICs9IHYgKiBiMTtcbiAgdDggKz0gdiAqIGIyO1xuICB0OSArPSB2ICogYjM7XG4gIHQxMCArPSB2ICogYjQ7XG4gIHQxMSArPSB2ICogYjU7XG4gIHQxMiArPSB2ICogYjY7XG4gIHQxMyArPSB2ICogYjc7XG4gIHQxNCArPSB2ICogYjg7XG4gIHQxNSArPSB2ICogYjk7XG4gIHQxNiArPSB2ICogYjEwO1xuICB0MTcgKz0gdiAqIGIxMTtcbiAgdDE4ICs9IHYgKiBiMTI7XG4gIHQxOSArPSB2ICogYjEzO1xuICB0MjAgKz0gdiAqIGIxNDtcbiAgdDIxICs9IHYgKiBiMTU7XG4gIHYgPSBhWzddO1xuICB0NyArPSB2ICogYjA7XG4gIHQ4ICs9IHYgKiBiMTtcbiAgdDkgKz0gdiAqIGIyO1xuICB0MTAgKz0gdiAqIGIzO1xuICB0MTEgKz0gdiAqIGI0O1xuICB0MTIgKz0gdiAqIGI1O1xuICB0MTMgKz0gdiAqIGI2O1xuICB0MTQgKz0gdiAqIGI3O1xuICB0MTUgKz0gdiAqIGI4O1xuICB0MTYgKz0gdiAqIGI5O1xuICB0MTcgKz0gdiAqIGIxMDtcbiAgdDE4ICs9IHYgKiBiMTE7XG4gIHQxOSArPSB2ICogYjEyO1xuICB0MjAgKz0gdiAqIGIxMztcbiAgdDIxICs9IHYgKiBiMTQ7XG4gIHQyMiArPSB2ICogYjE1O1xuICB2ID0gYVs4XTtcbiAgdDggKz0gdiAqIGIwO1xuICB0OSArPSB2ICogYjE7XG4gIHQxMCArPSB2ICogYjI7XG4gIHQxMSArPSB2ICogYjM7XG4gIHQxMiArPSB2ICogYjQ7XG4gIHQxMyArPSB2ICogYjU7XG4gIHQxNCArPSB2ICogYjY7XG4gIHQxNSArPSB2ICogYjc7XG4gIHQxNiArPSB2ICogYjg7XG4gIHQxNyArPSB2ICogYjk7XG4gIHQxOCArPSB2ICogYjEwO1xuICB0MTkgKz0gdiAqIGIxMTtcbiAgdDIwICs9IHYgKiBiMTI7XG4gIHQyMSArPSB2ICogYjEzO1xuICB0MjIgKz0gdiAqIGIxNDtcbiAgdDIzICs9IHYgKiBiMTU7XG4gIHYgPSBhWzldO1xuICB0OSArPSB2ICogYjA7XG4gIHQxMCArPSB2ICogYjE7XG4gIHQxMSArPSB2ICogYjI7XG4gIHQxMiArPSB2ICogYjM7XG4gIHQxMyArPSB2ICogYjQ7XG4gIHQxNCArPSB2ICogYjU7XG4gIHQxNSArPSB2ICogYjY7XG4gIHQxNiArPSB2ICogYjc7XG4gIHQxNyArPSB2ICogYjg7XG4gIHQxOCArPSB2ICogYjk7XG4gIHQxOSArPSB2ICogYjEwO1xuICB0MjAgKz0gdiAqIGIxMTtcbiAgdDIxICs9IHYgKiBiMTI7XG4gIHQyMiArPSB2ICogYjEzO1xuICB0MjMgKz0gdiAqIGIxNDtcbiAgdDI0ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzEwXTtcbiAgdDEwICs9IHYgKiBiMDtcbiAgdDExICs9IHYgKiBiMTtcbiAgdDEyICs9IHYgKiBiMjtcbiAgdDEzICs9IHYgKiBiMztcbiAgdDE0ICs9IHYgKiBiNDtcbiAgdDE1ICs9IHYgKiBiNTtcbiAgdDE2ICs9IHYgKiBiNjtcbiAgdDE3ICs9IHYgKiBiNztcbiAgdDE4ICs9IHYgKiBiODtcbiAgdDE5ICs9IHYgKiBiOTtcbiAgdDIwICs9IHYgKiBiMTA7XG4gIHQyMSArPSB2ICogYjExO1xuICB0MjIgKz0gdiAqIGIxMjtcbiAgdDIzICs9IHYgKiBiMTM7XG4gIHQyNCArPSB2ICogYjE0O1xuICB0MjUgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTFdO1xuICB0MTEgKz0gdiAqIGIwO1xuICB0MTIgKz0gdiAqIGIxO1xuICB0MTMgKz0gdiAqIGIyO1xuICB0MTQgKz0gdiAqIGIzO1xuICB0MTUgKz0gdiAqIGI0O1xuICB0MTYgKz0gdiAqIGI1O1xuICB0MTcgKz0gdiAqIGI2O1xuICB0MTggKz0gdiAqIGI3O1xuICB0MTkgKz0gdiAqIGI4O1xuICB0MjAgKz0gdiAqIGI5O1xuICB0MjEgKz0gdiAqIGIxMDtcbiAgdDIyICs9IHYgKiBiMTE7XG4gIHQyMyArPSB2ICogYjEyO1xuICB0MjQgKz0gdiAqIGIxMztcbiAgdDI1ICs9IHYgKiBiMTQ7XG4gIHQyNiArPSB2ICogYjE1O1xuICB2ID0gYVsxMl07XG4gIHQxMiArPSB2ICogYjA7XG4gIHQxMyArPSB2ICogYjE7XG4gIHQxNCArPSB2ICogYjI7XG4gIHQxNSArPSB2ICogYjM7XG4gIHQxNiArPSB2ICogYjQ7XG4gIHQxNyArPSB2ICogYjU7XG4gIHQxOCArPSB2ICogYjY7XG4gIHQxOSArPSB2ICogYjc7XG4gIHQyMCArPSB2ICogYjg7XG4gIHQyMSArPSB2ICogYjk7XG4gIHQyMiArPSB2ICogYjEwO1xuICB0MjMgKz0gdiAqIGIxMTtcbiAgdDI0ICs9IHYgKiBiMTI7XG4gIHQyNSArPSB2ICogYjEzO1xuICB0MjYgKz0gdiAqIGIxNDtcbiAgdDI3ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzEzXTtcbiAgdDEzICs9IHYgKiBiMDtcbiAgdDE0ICs9IHYgKiBiMTtcbiAgdDE1ICs9IHYgKiBiMjtcbiAgdDE2ICs9IHYgKiBiMztcbiAgdDE3ICs9IHYgKiBiNDtcbiAgdDE4ICs9IHYgKiBiNTtcbiAgdDE5ICs9IHYgKiBiNjtcbiAgdDIwICs9IHYgKiBiNztcbiAgdDIxICs9IHYgKiBiODtcbiAgdDIyICs9IHYgKiBiOTtcbiAgdDIzICs9IHYgKiBiMTA7XG4gIHQyNCArPSB2ICogYjExO1xuICB0MjUgKz0gdiAqIGIxMjtcbiAgdDI2ICs9IHYgKiBiMTM7XG4gIHQyNyArPSB2ICogYjE0O1xuICB0MjggKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTRdO1xuICB0MTQgKz0gdiAqIGIwO1xuICB0MTUgKz0gdiAqIGIxO1xuICB0MTYgKz0gdiAqIGIyO1xuICB0MTcgKz0gdiAqIGIzO1xuICB0MTggKz0gdiAqIGI0O1xuICB0MTkgKz0gdiAqIGI1O1xuICB0MjAgKz0gdiAqIGI2O1xuICB0MjEgKz0gdiAqIGI3O1xuICB0MjIgKz0gdiAqIGI4O1xuICB0MjMgKz0gdiAqIGI5O1xuICB0MjQgKz0gdiAqIGIxMDtcbiAgdDI1ICs9IHYgKiBiMTE7XG4gIHQyNiArPSB2ICogYjEyO1xuICB0MjcgKz0gdiAqIGIxMztcbiAgdDI4ICs9IHYgKiBiMTQ7XG4gIHQyOSArPSB2ICogYjE1O1xuICB2ID0gYVsxNV07XG4gIHQxNSArPSB2ICogYjA7XG4gIHQxNiArPSB2ICogYjE7XG4gIHQxNyArPSB2ICogYjI7XG4gIHQxOCArPSB2ICogYjM7XG4gIHQxOSArPSB2ICogYjQ7XG4gIHQyMCArPSB2ICogYjU7XG4gIHQyMSArPSB2ICogYjY7XG4gIHQyMiArPSB2ICogYjc7XG4gIHQyMyArPSB2ICogYjg7XG4gIHQyNCArPSB2ICogYjk7XG4gIHQyNSArPSB2ICogYjEwO1xuICB0MjYgKz0gdiAqIGIxMTtcbiAgdDI3ICs9IHYgKiBiMTI7XG4gIHQyOCArPSB2ICogYjEzO1xuICB0MjkgKz0gdiAqIGIxNDtcbiAgdDMwICs9IHYgKiBiMTU7XG5cbiAgdDAgICs9IDM4ICogdDE2O1xuICB0MSAgKz0gMzggKiB0MTc7XG4gIHQyICArPSAzOCAqIHQxODtcbiAgdDMgICs9IDM4ICogdDE5O1xuICB0NCAgKz0gMzggKiB0MjA7XG4gIHQ1ICArPSAzOCAqIHQyMTtcbiAgdDYgICs9IDM4ICogdDIyO1xuICB0NyAgKz0gMzggKiB0MjM7XG4gIHQ4ICArPSAzOCAqIHQyNDtcbiAgdDkgICs9IDM4ICogdDI1O1xuICB0MTAgKz0gMzggKiB0MjY7XG4gIHQxMSArPSAzOCAqIHQyNztcbiAgdDEyICs9IDM4ICogdDI4O1xuICB0MTMgKz0gMzggKiB0Mjk7XG4gIHQxNCArPSAzOCAqIHQzMDtcbiAgLy8gdDE1IGxlZnQgYXMgaXNcblxuICAvLyBmaXJzdCBjYXJcbiAgYyA9IDE7XG4gIHYgPSAgdDAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDYgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDcgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDggKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDkgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNSA9IHYgLSBjICogNjU1MzY7XG4gIHQwICs9IGMtMSArIDM3ICogKGMtMSk7XG5cbiAgLy8gc2Vjb25kIGNhclxuICBjID0gMTtcbiAgdiA9ICB0MCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQwID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQxID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQyID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQzID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ0ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ1ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ2ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ3ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0OCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ4ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0OSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ5ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEwID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDExID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEyID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEzID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxNCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDE0ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxNSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDE1ID0gdiAtIGMgKiA2NTUzNjtcbiAgdDAgKz0gYy0xICsgMzcgKiAoYy0xKTtcblxuICBvWyAwXSA9IHQwO1xuICBvWyAxXSA9IHQxO1xuICBvWyAyXSA9IHQyO1xuICBvWyAzXSA9IHQzO1xuICBvWyA0XSA9IHQ0O1xuICBvWyA1XSA9IHQ1O1xuICBvWyA2XSA9IHQ2O1xuICBvWyA3XSA9IHQ3O1xuICBvWyA4XSA9IHQ4O1xuICBvWyA5XSA9IHQ5O1xuICBvWzEwXSA9IHQxMDtcbiAgb1sxMV0gPSB0MTE7XG4gIG9bMTJdID0gdDEyO1xuICBvWzEzXSA9IHQxMztcbiAgb1sxNF0gPSB0MTQ7XG4gIG9bMTVdID0gdDE1O1xufVxuXG5mdW5jdGlvbiBTKG8sIGEpIHtcbiAgTShvLCBhLCBhKTtcbn1cblxuZnVuY3Rpb24gaW52MjU1MTkobywgaSkge1xuICB2YXIgYyA9IGdmKCk7XG4gIHZhciBhO1xuICBmb3IgKGEgPSAwOyBhIDwgMTY7IGErKykgY1thXSA9IGlbYV07XG4gIGZvciAoYSA9IDI1MzsgYSA+PSAwOyBhLS0pIHtcbiAgICBTKGMsIGMpO1xuICAgIGlmKGEgIT09IDIgJiYgYSAhPT0gNCkgTShjLCBjLCBpKTtcbiAgfVxuICBmb3IgKGEgPSAwOyBhIDwgMTY7IGErKykgb1thXSA9IGNbYV07XG59XG5cbmZ1bmN0aW9uIHBvdzI1MjMobywgaSkge1xuICB2YXIgYyA9IGdmKCk7XG4gIHZhciBhO1xuICBmb3IgKGEgPSAwOyBhIDwgMTY7IGErKykgY1thXSA9IGlbYV07XG4gIGZvciAoYSA9IDI1MDsgYSA+PSAwOyBhLS0pIHtcbiAgICAgIFMoYywgYyk7XG4gICAgICBpZihhICE9PSAxKSBNKGMsIGMsIGkpO1xuICB9XG4gIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSBvW2FdID0gY1thXTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NjYWxhcm11bHQocSwgbiwgcCkge1xuICB2YXIgeiA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgdmFyIHggPSBuZXcgRmxvYXQ2NEFycmF5KDgwKSwgciwgaTtcbiAgdmFyIGEgPSBnZigpLCBiID0gZ2YoKSwgYyA9IGdmKCksXG4gICAgICBkID0gZ2YoKSwgZSA9IGdmKCksIGYgPSBnZigpO1xuICBmb3IgKGkgPSAwOyBpIDwgMzE7IGkrKykgeltpXSA9IG5baV07XG4gIHpbMzFdPShuWzMxXSYxMjcpfDY0O1xuICB6WzBdJj0yNDg7XG4gIHVucGFjazI1NTE5KHgscCk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgYltpXT14W2ldO1xuICAgIGRbaV09YVtpXT1jW2ldPTA7XG4gIH1cbiAgYVswXT1kWzBdPTE7XG4gIGZvciAoaT0yNTQ7IGk+PTA7IC0taSkge1xuICAgIHI9KHpbaT4+PjNdPj4+KGkmNykpJjE7XG4gICAgc2VsMjU1MTkoYSxiLHIpO1xuICAgIHNlbDI1NTE5KGMsZCxyKTtcbiAgICBBKGUsYSxjKTtcbiAgICBaKGEsYSxjKTtcbiAgICBBKGMsYixkKTtcbiAgICBaKGIsYixkKTtcbiAgICBTKGQsZSk7XG4gICAgUyhmLGEpO1xuICAgIE0oYSxjLGEpO1xuICAgIE0oYyxiLGUpO1xuICAgIEEoZSxhLGMpO1xuICAgIFooYSxhLGMpO1xuICAgIFMoYixhKTtcbiAgICBaKGMsZCxmKTtcbiAgICBNKGEsYyxfMTIxNjY1KTtcbiAgICBBKGEsYSxkKTtcbiAgICBNKGMsYyxhKTtcbiAgICBNKGEsZCxmKTtcbiAgICBNKGQsYix4KTtcbiAgICBTKGIsZSk7XG4gICAgc2VsMjU1MTkoYSxiLHIpO1xuICAgIHNlbDI1NTE5KGMsZCxyKTtcbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIHhbaSsxNl09YVtpXTtcbiAgICB4W2krMzJdPWNbaV07XG4gICAgeFtpKzQ4XT1iW2ldO1xuICAgIHhbaSs2NF09ZFtpXTtcbiAgfVxuICB2YXIgeDMyID0geC5zdWJhcnJheSgzMik7XG4gIHZhciB4MTYgPSB4LnN1YmFycmF5KDE2KTtcbiAgaW52MjU1MTkoeDMyLHgzMik7XG4gIE0oeDE2LHgxNix4MzIpO1xuICBwYWNrMjU1MTkocSx4MTYpO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NjYWxhcm11bHRfYmFzZShxLCBuKSB7XG4gIHJldHVybiBjcnlwdG9fc2NhbGFybXVsdChxLCBuLCBfOSk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19ib3hfa2V5cGFpcih5LCB4KSB7XG4gIHJhbmRvbWJ5dGVzKHgsIDMyKTtcbiAgcmV0dXJuIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UoeSwgeCk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgeSwgeCkge1xuICB2YXIgcyA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgY3J5cHRvX3NjYWxhcm11bHQocywgeCwgeSk7XG4gIHJldHVybiBjcnlwdG9fY29yZV9oc2Fsc2EyMChrLCBfMCwgcywgc2lnbWEpO1xufVxuXG52YXIgY3J5cHRvX2JveF9hZnRlcm5tID0gY3J5cHRvX3NlY3JldGJveDtcbnZhciBjcnlwdG9fYm94X29wZW5fYWZ0ZXJubSA9IGNyeXB0b19zZWNyZXRib3hfb3BlbjtcblxuZnVuY3Rpb24gY3J5cHRvX2JveChjLCBtLCBkLCBuLCB5LCB4KSB7XG4gIHZhciBrID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHksIHgpO1xuICByZXR1cm4gY3J5cHRvX2JveF9hZnRlcm5tKGMsIG0sIGQsIG4sIGspO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X29wZW4obSwgYywgZCwgbiwgeSwgeCkge1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgY3J5cHRvX2JveF9iZWZvcmVubShrLCB5LCB4KTtcbiAgcmV0dXJuIGNyeXB0b19ib3hfb3Blbl9hZnRlcm5tKG0sIGMsIGQsIG4sIGspO1xufVxuXG52YXIgSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gY3J5cHRvX2hhc2hibG9ja3NfaGwoaGgsIGhsLCBtLCBuKSB7XG4gIHZhciB3aCA9IG5ldyBJbnQzMkFycmF5KDE2KSwgd2wgPSBuZXcgSW50MzJBcnJheSgxNiksXG4gICAgICBiaDAsIGJoMSwgYmgyLCBiaDMsIGJoNCwgYmg1LCBiaDYsIGJoNyxcbiAgICAgIGJsMCwgYmwxLCBibDIsIGJsMywgYmw0LCBibDUsIGJsNiwgYmw3LFxuICAgICAgdGgsIHRsLCBpLCBqLCBoLCBsLCBhLCBiLCBjLCBkO1xuXG4gIHZhciBhaDAgPSBoaFswXSxcbiAgICAgIGFoMSA9IGhoWzFdLFxuICAgICAgYWgyID0gaGhbMl0sXG4gICAgICBhaDMgPSBoaFszXSxcbiAgICAgIGFoNCA9IGhoWzRdLFxuICAgICAgYWg1ID0gaGhbNV0sXG4gICAgICBhaDYgPSBoaFs2XSxcbiAgICAgIGFoNyA9IGhoWzddLFxuXG4gICAgICBhbDAgPSBobFswXSxcbiAgICAgIGFsMSA9IGhsWzFdLFxuICAgICAgYWwyID0gaGxbMl0sXG4gICAgICBhbDMgPSBobFszXSxcbiAgICAgIGFsNCA9IGhsWzRdLFxuICAgICAgYWw1ID0gaGxbNV0sXG4gICAgICBhbDYgPSBobFs2XSxcbiAgICAgIGFsNyA9IGhsWzddO1xuXG4gIHZhciBwb3MgPSAwO1xuICB3aGlsZSAobiA+PSAxMjgpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgICAgaiA9IDggKiBpICsgcG9zO1xuICAgICAgd2hbaV0gPSAobVtqKzBdIDw8IDI0KSB8IChtW2orMV0gPDwgMTYpIHwgKG1baisyXSA8PCA4KSB8IG1baiszXTtcbiAgICAgIHdsW2ldID0gKG1bais0XSA8PCAyNCkgfCAobVtqKzVdIDw8IDE2KSB8IChtW2orNl0gPDwgOCkgfCBtW2orN107XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG4gICAgICBiaDAgPSBhaDA7XG4gICAgICBiaDEgPSBhaDE7XG4gICAgICBiaDIgPSBhaDI7XG4gICAgICBiaDMgPSBhaDM7XG4gICAgICBiaDQgPSBhaDQ7XG4gICAgICBiaDUgPSBhaDU7XG4gICAgICBiaDYgPSBhaDY7XG4gICAgICBiaDcgPSBhaDc7XG5cbiAgICAgIGJsMCA9IGFsMDtcbiAgICAgIGJsMSA9IGFsMTtcbiAgICAgIGJsMiA9IGFsMjtcbiAgICAgIGJsMyA9IGFsMztcbiAgICAgIGJsNCA9IGFsNDtcbiAgICAgIGJsNSA9IGFsNTtcbiAgICAgIGJsNiA9IGFsNjtcbiAgICAgIGJsNyA9IGFsNztcblxuICAgICAgLy8gYWRkXG4gICAgICBoID0gYWg3O1xuICAgICAgbCA9IGFsNztcblxuICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIFNpZ21hMVxuICAgICAgaCA9ICgoYWg0ID4+PiAxNCkgfCAoYWw0IDw8ICgzMi0xNCkpKSBeICgoYWg0ID4+PiAxOCkgfCAoYWw0IDw8ICgzMi0xOCkpKSBeICgoYWw0ID4+PiAoNDEtMzIpKSB8IChhaDQgPDwgKDMyLSg0MS0zMikpKSk7XG4gICAgICBsID0gKChhbDQgPj4+IDE0KSB8IChhaDQgPDwgKDMyLTE0KSkpIF4gKChhbDQgPj4+IDE4KSB8IChhaDQgPDwgKDMyLTE4KSkpIF4gKChhaDQgPj4+ICg0MS0zMikpIHwgKGFsNCA8PCAoMzItKDQxLTMyKSkpKTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyBDaFxuICAgICAgaCA9IChhaDQgJiBhaDUpIF4gKH5haDQgJiBhaDYpO1xuICAgICAgbCA9IChhbDQgJiBhbDUpIF4gKH5hbDQgJiBhbDYpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIEtcbiAgICAgIGggPSBLW2kqMl07XG4gICAgICBsID0gS1tpKjIrMV07XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgLy8gd1xuICAgICAgaCA9IHdoW2klMTZdO1xuICAgICAgbCA9IHdsW2klMTZdO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICBjICs9IGIgPj4+IDE2O1xuICAgICAgZCArPSBjID4+PiAxNjtcblxuICAgICAgdGggPSBjICYgMHhmZmZmIHwgZCA8PCAxNjtcbiAgICAgIHRsID0gYSAmIDB4ZmZmZiB8IGIgPDwgMTY7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IHRoO1xuICAgICAgbCA9IHRsO1xuXG4gICAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgICAgLy8gU2lnbWEwXG4gICAgICBoID0gKChhaDAgPj4+IDI4KSB8IChhbDAgPDwgKDMyLTI4KSkpIF4gKChhbDAgPj4+ICgzNC0zMikpIHwgKGFoMCA8PCAoMzItKDM0LTMyKSkpKSBeICgoYWwwID4+PiAoMzktMzIpKSB8IChhaDAgPDwgKDMyLSgzOS0zMikpKSk7XG4gICAgICBsID0gKChhbDAgPj4+IDI4KSB8IChhaDAgPDwgKDMyLTI4KSkpIF4gKChhaDAgPj4+ICgzNC0zMikpIHwgKGFsMCA8PCAoMzItKDM0LTMyKSkpKSBeICgoYWgwID4+PiAoMzktMzIpKSB8IChhbDAgPDwgKDMyLSgzOS0zMikpKSk7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgLy8gTWFqXG4gICAgICBoID0gKGFoMCAmIGFoMSkgXiAoYWgwICYgYWgyKSBeIChhaDEgJiBhaDIpO1xuICAgICAgbCA9IChhbDAgJiBhbDEpIF4gKGFsMCAmIGFsMikgXiAoYWwxICYgYWwyKTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICBiICs9IGEgPj4+IDE2O1xuICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICAgIGJoNyA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICAgIGJsNyA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcblxuICAgICAgLy8gYWRkXG4gICAgICBoID0gYmgzO1xuICAgICAgbCA9IGJsMztcblxuICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICAgIGggPSB0aDtcbiAgICAgIGwgPSB0bDtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICBiICs9IGEgPj4+IDE2O1xuICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICAgIGJoMyA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICAgIGJsMyA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcblxuICAgICAgYWgxID0gYmgwO1xuICAgICAgYWgyID0gYmgxO1xuICAgICAgYWgzID0gYmgyO1xuICAgICAgYWg0ID0gYmgzO1xuICAgICAgYWg1ID0gYmg0O1xuICAgICAgYWg2ID0gYmg1O1xuICAgICAgYWg3ID0gYmg2O1xuICAgICAgYWgwID0gYmg3O1xuXG4gICAgICBhbDEgPSBibDA7XG4gICAgICBhbDIgPSBibDE7XG4gICAgICBhbDMgPSBibDI7XG4gICAgICBhbDQgPSBibDM7XG4gICAgICBhbDUgPSBibDQ7XG4gICAgICBhbDYgPSBibDU7XG4gICAgICBhbDcgPSBibDY7XG4gICAgICBhbDAgPSBibDc7XG5cbiAgICAgIGlmIChpJTE2ID09PSAxNSkge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTY7IGorKykge1xuICAgICAgICAgIC8vIGFkZFxuICAgICAgICAgIGggPSB3aFtqXTtcbiAgICAgICAgICBsID0gd2xbal07XG5cbiAgICAgICAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICAgICAgICBoID0gd2hbKGorOSklMTZdO1xuICAgICAgICAgIGwgPSB3bFsoais5KSUxNl07XG5cbiAgICAgICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAgICAgLy8gc2lnbWEwXG4gICAgICAgICAgdGggPSB3aFsoaisxKSUxNl07XG4gICAgICAgICAgdGwgPSB3bFsoaisxKSUxNl07XG4gICAgICAgICAgaCA9ICgodGggPj4+IDEpIHwgKHRsIDw8ICgzMi0xKSkpIF4gKCh0aCA+Pj4gOCkgfCAodGwgPDwgKDMyLTgpKSkgXiAodGggPj4+IDcpO1xuICAgICAgICAgIGwgPSAoKHRsID4+PiAxKSB8ICh0aCA8PCAoMzItMSkpKSBeICgodGwgPj4+IDgpIHwgKHRoIDw8ICgzMi04KSkpIF4gKCh0bCA+Pj4gNykgfCAodGggPDwgKDMyLTcpKSk7XG5cbiAgICAgICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAgICAgLy8gc2lnbWExXG4gICAgICAgICAgdGggPSB3aFsoaisxNCklMTZdO1xuICAgICAgICAgIHRsID0gd2xbKGorMTQpJTE2XTtcbiAgICAgICAgICBoID0gKCh0aCA+Pj4gMTkpIHwgKHRsIDw8ICgzMi0xOSkpKSBeICgodGwgPj4+ICg2MS0zMikpIHwgKHRoIDw8ICgzMi0oNjEtMzIpKSkpIF4gKHRoID4+PiA2KTtcbiAgICAgICAgICBsID0gKCh0bCA+Pj4gMTkpIHwgKHRoIDw8ICgzMi0xOSkpKSBeICgodGggPj4+ICg2MS0zMikpIHwgKHRsIDw8ICgzMi0oNjEtMzIpKSkpIF4gKCh0bCA+Pj4gNikgfCAodGggPDwgKDMyLTYpKSk7XG5cbiAgICAgICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgICAgICBjICs9IGIgPj4+IDE2O1xuICAgICAgICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICAgICAgICB3aFtqXSA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICAgICAgICB3bFtqXSA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZFxuICAgIGggPSBhaDA7XG4gICAgbCA9IGFsMDtcblxuICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgIGggPSBoaFswXTtcbiAgICBsID0gaGxbMF07XG5cbiAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgYiArPSBhID4+PiAxNjtcbiAgICBjICs9IGIgPj4+IDE2O1xuICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICBoaFswXSA9IGFoMCA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICBobFswXSA9IGFsMCA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcblxuICAgIGggPSBhaDE7XG4gICAgbCA9IGFsMTtcblxuICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgIGggPSBoaFsxXTtcbiAgICBsID0gaGxbMV07XG5cbiAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgYiArPSBhID4+PiAxNjtcbiAgICBjICs9IGIgPj4+IDE2O1xuICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICBoaFsxXSA9IGFoMSA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICBobFsxXSA9IGFsMSA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcblxuICAgIGggPSBhaDI7XG4gICAgbCA9IGFsMjtcblxuICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgIGggPSBoaFsyXTtcbiAgICBsID0gaGxbMl07XG5cbiAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgYiArPSBhID4+PiAxNjtcbiAgICBjICs9IGIgPj4+IDE2O1xuICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICBoaFsyXSA9IGFoMiA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICBobFsyXSA9IGFsMiA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcblxuICAgIGggPSBhaDM7XG4gICAgbCA9IGFsMztcblxuICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgIGggPSBoaFszXTtcbiAgICBsID0gaGxbM107XG5cbiAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgYiArPSBhID4+PiAxNjtcbiAgICBjICs9IGIgPj4+IDE2O1xuICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICBoaFszXSA9IGFoMyA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICBobFszXSA9IGFsMyA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcblxuICAgIGggPSBhaDQ7XG4gICAgbCA9IGFsNDtcblxuICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgIGggPSBoaFs0XTtcbiAgICBsID0gaGxbNF07XG5cbiAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgYiArPSBhID4+PiAxNjtcbiAgICBjICs9IGIgPj4+IDE2O1xuICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICBoaFs0XSA9IGFoNCA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICBobFs0XSA9IGFsNCA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcblxuICAgIGggPSBhaDU7XG4gICAgbCA9IGFsNTtcblxuICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgIGggPSBoaFs1XTtcbiAgICBsID0gaGxbNV07XG5cbiAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgYiArPSBhID4+PiAxNjtcbiAgICBjICs9IGIgPj4+IDE2O1xuICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICBoaFs1XSA9IGFoNSA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICBobFs1XSA9IGFsNSA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcblxuICAgIGggPSBhaDY7XG4gICAgbCA9IGFsNjtcblxuICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgIGggPSBoaFs2XTtcbiAgICBsID0gaGxbNl07XG5cbiAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgYiArPSBhID4+PiAxNjtcbiAgICBjICs9IGIgPj4+IDE2O1xuICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICBoaFs2XSA9IGFoNiA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICBobFs2XSA9IGFsNiA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcblxuICAgIGggPSBhaDc7XG4gICAgbCA9IGFsNztcblxuICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgIGggPSBoaFs3XTtcbiAgICBsID0gaGxbN107XG5cbiAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgYiArPSBhID4+PiAxNjtcbiAgICBjICs9IGIgPj4+IDE2O1xuICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICBoaFs3XSA9IGFoNyA9IChjICYgMHhmZmZmKSB8IChkIDw8IDE2KTtcbiAgICBobFs3XSA9IGFsNyA9IChhICYgMHhmZmZmKSB8IChiIDw8IDE2KTtcblxuICAgIHBvcyArPSAxMjg7XG4gICAgbiAtPSAxMjg7XG4gIH1cblxuICByZXR1cm4gbjtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2hhc2gob3V0LCBtLCBuKSB7XG4gIHZhciBoaCA9IG5ldyBJbnQzMkFycmF5KDgpLFxuICAgICAgaGwgPSBuZXcgSW50MzJBcnJheSg4KSxcbiAgICAgIHggPSBuZXcgVWludDhBcnJheSgyNTYpLFxuICAgICAgaSwgYiA9IG47XG5cbiAgaGhbMF0gPSAweDZhMDllNjY3O1xuICBoaFsxXSA9IDB4YmI2N2FlODU7XG4gIGhoWzJdID0gMHgzYzZlZjM3MjtcbiAgaGhbM10gPSAweGE1NGZmNTNhO1xuICBoaFs0XSA9IDB4NTEwZTUyN2Y7XG4gIGhoWzVdID0gMHg5YjA1Njg4YztcbiAgaGhbNl0gPSAweDFmODNkOWFiO1xuICBoaFs3XSA9IDB4NWJlMGNkMTk7XG5cbiAgaGxbMF0gPSAweGYzYmNjOTA4O1xuICBobFsxXSA9IDB4ODRjYWE3M2I7XG4gIGhsWzJdID0gMHhmZTk0ZjgyYjtcbiAgaGxbM10gPSAweDVmMWQzNmYxO1xuICBobFs0XSA9IDB4YWRlNjgyZDE7XG4gIGhsWzVdID0gMHgyYjNlNmMxZjtcbiAgaGxbNl0gPSAweGZiNDFiZDZiO1xuICBobFs3XSA9IDB4MTM3ZTIxNzk7XG5cbiAgY3J5cHRvX2hhc2hibG9ja3NfaGwoaGgsIGhsLCBtLCBuKTtcbiAgbiAlPSAxMjg7XG5cbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeFtpXSA9IG1bYi1uK2ldO1xuICB4W25dID0gMTI4O1xuXG4gIG4gPSAyNTYtMTI4KihuPDExMj8xOjApO1xuICB4W24tOV0gPSAwO1xuICB0czY0KHgsIG4tOCwgIChiIC8gMHgyMDAwMDAwMCkgfCAwLCBiIDw8IDMpO1xuICBjcnlwdG9faGFzaGJsb2Nrc19obChoaCwgaGwsIHgsIG4pO1xuXG4gIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHRzNjQob3V0LCA4KmksIGhoW2ldLCBobFtpXSk7XG5cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGFkZChwLCBxKSB7XG4gIHZhciBhID0gZ2YoKSwgYiA9IGdmKCksIGMgPSBnZigpLFxuICAgICAgZCA9IGdmKCksIGUgPSBnZigpLCBmID0gZ2YoKSxcbiAgICAgIGcgPSBnZigpLCBoID0gZ2YoKSwgdCA9IGdmKCk7XG5cbiAgWihhLCBwWzFdLCBwWzBdKTtcbiAgWih0LCBxWzFdLCBxWzBdKTtcbiAgTShhLCBhLCB0KTtcbiAgQShiLCBwWzBdLCBwWzFdKTtcbiAgQSh0LCBxWzBdLCBxWzFdKTtcbiAgTShiLCBiLCB0KTtcbiAgTShjLCBwWzNdLCBxWzNdKTtcbiAgTShjLCBjLCBEMik7XG4gIE0oZCwgcFsyXSwgcVsyXSk7XG4gIEEoZCwgZCwgZCk7XG4gIFooZSwgYiwgYSk7XG4gIFooZiwgZCwgYyk7XG4gIEEoZywgZCwgYyk7XG4gIEEoaCwgYiwgYSk7XG5cbiAgTShwWzBdLCBlLCBmKTtcbiAgTShwWzFdLCBoLCBnKTtcbiAgTShwWzJdLCBnLCBmKTtcbiAgTShwWzNdLCBlLCBoKTtcbn1cblxuZnVuY3Rpb24gY3N3YXAocCwgcSwgYikge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIHNlbDI1NTE5KHBbaV0sIHFbaV0sIGIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhY2sociwgcCkge1xuICB2YXIgdHggPSBnZigpLCB0eSA9IGdmKCksIHppID0gZ2YoKTtcbiAgaW52MjU1MTkoemksIHBbMl0pO1xuICBNKHR4LCBwWzBdLCB6aSk7XG4gIE0odHksIHBbMV0sIHppKTtcbiAgcGFjazI1NTE5KHIsIHR5KTtcbiAgclszMV0gXj0gcGFyMjU1MTkodHgpIDw8IDc7XG59XG5cbmZ1bmN0aW9uIHNjYWxhcm11bHQocCwgcSwgcykge1xuICB2YXIgYiwgaTtcbiAgc2V0MjU1MTkocFswXSwgZ2YwKTtcbiAgc2V0MjU1MTkocFsxXSwgZ2YxKTtcbiAgc2V0MjU1MTkocFsyXSwgZ2YxKTtcbiAgc2V0MjU1MTkocFszXSwgZ2YwKTtcbiAgZm9yIChpID0gMjU1OyBpID49IDA7IC0taSkge1xuICAgIGIgPSAoc1soaS84KXwwXSA+PiAoaSY3KSkgJiAxO1xuICAgIGNzd2FwKHAsIHEsIGIpO1xuICAgIGFkZChxLCBwKTtcbiAgICBhZGQocCwgcCk7XG4gICAgY3N3YXAocCwgcSwgYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NhbGFyYmFzZShwLCBzKSB7XG4gIHZhciBxID0gW2dmKCksIGdmKCksIGdmKCksIGdmKCldO1xuICBzZXQyNTUxOShxWzBdLCBYKTtcbiAgc2V0MjU1MTkocVsxXSwgWSk7XG4gIHNldDI1NTE5KHFbMl0sIGdmMSk7XG4gIE0ocVszXSwgWCwgWSk7XG4gIHNjYWxhcm11bHQocCwgcSwgcyk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zaWduX2tleXBhaXIocGssIHNrLCBzZWVkZWQpIHtcbiAgdmFyIGQgPSBuZXcgVWludDhBcnJheSg2NCk7XG4gIHZhciBwID0gW2dmKCksIGdmKCksIGdmKCksIGdmKCldO1xuICB2YXIgaTtcblxuICBpZiAoIXNlZWRlZCkgcmFuZG9tYnl0ZXMoc2ssIDMyKTtcbiAgY3J5cHRvX2hhc2goZCwgc2ssIDMyKTtcbiAgZFswXSAmPSAyNDg7XG4gIGRbMzFdICY9IDEyNztcbiAgZFszMV0gfD0gNjQ7XG5cbiAgc2NhbGFyYmFzZShwLCBkKTtcbiAgcGFjayhwaywgcCk7XG5cbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHNrW2krMzJdID0gcGtbaV07XG4gIHJldHVybiAwO1xufVxuXG52YXIgTCA9IG5ldyBGbG9hdDY0QXJyYXkoWzB4ZWQsIDB4ZDMsIDB4ZjUsIDB4NWMsIDB4MWEsIDB4NjMsIDB4MTIsIDB4NTgsIDB4ZDYsIDB4OWMsIDB4ZjcsIDB4YTIsIDB4ZGUsIDB4ZjksIDB4ZGUsIDB4MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MTBdKTtcblxuZnVuY3Rpb24gbW9kTChyLCB4KSB7XG4gIHZhciBjYXJyeSwgaSwgaiwgaztcbiAgZm9yIChpID0gNjM7IGkgPj0gMzI7IC0taSkge1xuICAgIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGogPSBpIC0gMzIsIGsgPSBpIC0gMTI7IGogPCBrOyArK2opIHtcbiAgICAgIHhbal0gKz0gY2FycnkgLSAxNiAqIHhbaV0gKiBMW2ogLSAoaSAtIDMyKV07XG4gICAgICBjYXJyeSA9ICh4W2pdICsgMTI4KSA+PiA4O1xuICAgICAgeFtqXSAtPSBjYXJyeSAqIDI1NjtcbiAgICB9XG4gICAgeFtqXSArPSBjYXJyeTtcbiAgICB4W2ldID0gMDtcbiAgfVxuICBjYXJyeSA9IDA7XG4gIGZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7XG4gICAgeFtqXSArPSBjYXJyeSAtICh4WzMxXSA+PiA0KSAqIExbal07XG4gICAgY2FycnkgPSB4W2pdID4+IDg7XG4gICAgeFtqXSAmPSAyNTU7XG4gIH1cbiAgZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHhbal0gLT0gY2FycnkgKiBMW2pdO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykge1xuICAgIHhbaSsxXSArPSB4W2ldID4+IDg7XG4gICAgcltpXSA9IHhbaV0gJiAyNTU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVkdWNlKHIpIHtcbiAgdmFyIHggPSBuZXcgRmxvYXQ2NEFycmF5KDY0KSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHhbaV0gPSByW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgcltpXSA9IDA7XG4gIG1vZEwociwgeCk7XG59XG5cbi8vIE5vdGU6IGRpZmZlcmVuY2UgZnJvbSBDIC0gc21sZW4gcmV0dXJuZWQsIG5vdCBwYXNzZWQgYXMgYXJndW1lbnQuXG5mdW5jdGlvbiBjcnlwdG9fc2lnbihzbSwgbSwgbiwgc2spIHtcbiAgdmFyIGQgPSBuZXcgVWludDhBcnJheSg2NCksIGggPSBuZXcgVWludDhBcnJheSg2NCksIHIgPSBuZXcgVWludDhBcnJheSg2NCk7XG4gIHZhciBpLCBqLCB4ID0gbmV3IEZsb2F0NjRBcnJheSg2NCk7XG4gIHZhciBwID0gW2dmKCksIGdmKCksIGdmKCksIGdmKCldO1xuXG4gIGNyeXB0b19oYXNoKGQsIHNrLCAzMik7XG4gIGRbMF0gJj0gMjQ4O1xuICBkWzMxXSAmPSAxMjc7XG4gIGRbMzFdIHw9IDY0O1xuXG4gIHZhciBzbWxlbiA9IG4gKyA2NDtcbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgc21bNjQgKyBpXSA9IG1baV07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBzbVszMiArIGldID0gZFszMiArIGldO1xuXG4gIGNyeXB0b19oYXNoKHIsIHNtLnN1YmFycmF5KDMyKSwgbiszMik7XG4gIHJlZHVjZShyKTtcbiAgc2NhbGFyYmFzZShwLCByKTtcbiAgcGFjayhzbSwgcCk7XG5cbiAgZm9yIChpID0gMzI7IGkgPCA2NDsgaSsrKSBzbVtpXSA9IHNrW2ldO1xuICBjcnlwdG9faGFzaChoLCBzbSwgbiArIDY0KTtcbiAgcmVkdWNlKGgpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB4W2ldID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHhbaV0gPSByW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykge1xuICAgIGZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7XG4gICAgICB4W2kral0gKz0gaFtpXSAqIGRbal07XG4gICAgfVxuICB9XG5cbiAgbW9kTChzbS5zdWJhcnJheSgzMiksIHgpO1xuICByZXR1cm4gc21sZW47XG59XG5cbmZ1bmN0aW9uIHVucGFja25lZyhyLCBwKSB7XG4gIHZhciB0ID0gZ2YoKSwgY2hrID0gZ2YoKSwgbnVtID0gZ2YoKSxcbiAgICAgIGRlbiA9IGdmKCksIGRlbjIgPSBnZigpLCBkZW40ID0gZ2YoKSxcbiAgICAgIGRlbjYgPSBnZigpO1xuXG4gIHNldDI1NTE5KHJbMl0sIGdmMSk7XG4gIHVucGFjazI1NTE5KHJbMV0sIHApO1xuICBTKG51bSwgclsxXSk7XG4gIE0oZGVuLCBudW0sIEQpO1xuICBaKG51bSwgbnVtLCByWzJdKTtcbiAgQShkZW4sIHJbMl0sIGRlbik7XG5cbiAgUyhkZW4yLCBkZW4pO1xuICBTKGRlbjQsIGRlbjIpO1xuICBNKGRlbjYsIGRlbjQsIGRlbjIpO1xuICBNKHQsIGRlbjYsIG51bSk7XG4gIE0odCwgdCwgZGVuKTtcblxuICBwb3cyNTIzKHQsIHQpO1xuICBNKHQsIHQsIG51bSk7XG4gIE0odCwgdCwgZGVuKTtcbiAgTSh0LCB0LCBkZW4pO1xuICBNKHJbMF0sIHQsIGRlbik7XG5cbiAgUyhjaGssIHJbMF0pO1xuICBNKGNoaywgY2hrLCBkZW4pO1xuICBpZiAobmVxMjU1MTkoY2hrLCBudW0pKSBNKHJbMF0sIHJbMF0sIEkpO1xuXG4gIFMoY2hrLCByWzBdKTtcbiAgTShjaGssIGNoaywgZGVuKTtcbiAgaWYgKG5lcTI1NTE5KGNoaywgbnVtKSkgcmV0dXJuIC0xO1xuXG4gIGlmIChwYXIyNTUxOShyWzBdKSA9PT0gKHBbMzFdPj43KSkgWihyWzBdLCBnZjAsIHJbMF0pO1xuXG4gIE0oclszXSwgclswXSwgclsxXSk7XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2lnbl9vcGVuKG0sIHNtLCBuLCBwaykge1xuICB2YXIgaSwgbWxlbjtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgzMiksIGggPSBuZXcgVWludDhBcnJheSg2NCk7XG4gIHZhciBwID0gW2dmKCksIGdmKCksIGdmKCksIGdmKCldLFxuICAgICAgcSA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcblxuICBtbGVuID0gLTE7XG4gIGlmIChuIDwgNjQpIHJldHVybiAtMTtcblxuICBpZiAodW5wYWNrbmVnKHEsIHBrKSkgcmV0dXJuIC0xO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIG1baV0gPSBzbVtpXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIG1baSszMl0gPSBwa1tpXTtcbiAgY3J5cHRvX2hhc2goaCwgbSwgbik7XG4gIHJlZHVjZShoKTtcbiAgc2NhbGFybXVsdChwLCBxLCBoKTtcblxuICBzY2FsYXJiYXNlKHEsIHNtLnN1YmFycmF5KDMyKSk7XG4gIGFkZChwLCBxKTtcbiAgcGFjayh0LCBwKTtcblxuICBuIC09IDY0O1xuICBpZiAoY3J5cHRvX3ZlcmlmeV8zMihzbSwgMCwgdCwgMCkpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBtW2ldID0gMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBtW2ldID0gc21baSArIDY0XTtcbiAgbWxlbiA9IG47XG4gIHJldHVybiBtbGVuO1xufVxuXG52YXIgY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyA9IDI0LFxuICAgIGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMgPSAxNixcbiAgICBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyA9IDMyLFxuICAgIGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fYm94X0JFRk9SRU5NQllURVMgPSAzMixcbiAgICBjcnlwdG9fYm94X05PTkNFQllURVMgPSBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMsXG4gICAgY3J5cHRvX2JveF9aRVJPQllURVMgPSBjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyxcbiAgICBjcnlwdG9fYm94X0JPWFpFUk9CWVRFUyA9IGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTLFxuICAgIGNyeXB0b19zaWduX0JZVEVTID0gNjQsXG4gICAgY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUyA9IDY0LFxuICAgIGNyeXB0b19zaWduX1NFRURCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19oYXNoX0JZVEVTID0gNjQ7XG5cbm5hY2wubG93bGV2ZWwgPSB7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwOiBjcnlwdG9fY29yZV9oc2Fsc2EyMCxcbiAgY3J5cHRvX3N0cmVhbV94b3I6IGNyeXB0b19zdHJlYW1feG9yLFxuICBjcnlwdG9fc3RyZWFtOiBjcnlwdG9fc3RyZWFtLFxuICBjcnlwdG9fc3RyZWFtX3NhbHNhMjBfeG9yOiBjcnlwdG9fc3RyZWFtX3NhbHNhMjBfeG9yLFxuICBjcnlwdG9fc3RyZWFtX3NhbHNhMjA6IGNyeXB0b19zdHJlYW1fc2Fsc2EyMCxcbiAgY3J5cHRvX29uZXRpbWVhdXRoOiBjcnlwdG9fb25ldGltZWF1dGgsXG4gIGNyeXB0b19vbmV0aW1lYXV0aF92ZXJpZnk6IGNyeXB0b19vbmV0aW1lYXV0aF92ZXJpZnksXG4gIGNyeXB0b192ZXJpZnlfMTY6IGNyeXB0b192ZXJpZnlfMTYsXG4gIGNyeXB0b192ZXJpZnlfMzI6IGNyeXB0b192ZXJpZnlfMzIsXG4gIGNyeXB0b19zZWNyZXRib3g6IGNyeXB0b19zZWNyZXRib3gsXG4gIGNyeXB0b19zZWNyZXRib3hfb3BlbjogY3J5cHRvX3NlY3JldGJveF9vcGVuLFxuICBjcnlwdG9fc2NhbGFybXVsdDogY3J5cHRvX3NjYWxhcm11bHQsXG4gIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2U6IGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UsXG4gIGNyeXB0b19ib3hfYmVmb3Jlbm06IGNyeXB0b19ib3hfYmVmb3Jlbm0sXG4gIGNyeXB0b19ib3hfYWZ0ZXJubTogY3J5cHRvX2JveF9hZnRlcm5tLFxuICBjcnlwdG9fYm94OiBjcnlwdG9fYm94LFxuICBjcnlwdG9fYm94X29wZW46IGNyeXB0b19ib3hfb3BlbixcbiAgY3J5cHRvX2JveF9rZXlwYWlyOiBjcnlwdG9fYm94X2tleXBhaXIsXG4gIGNyeXB0b19oYXNoOiBjcnlwdG9faGFzaCxcbiAgY3J5cHRvX3NpZ246IGNyeXB0b19zaWduLFxuICBjcnlwdG9fc2lnbl9rZXlwYWlyOiBjcnlwdG9fc2lnbl9rZXlwYWlyLFxuICBjcnlwdG9fc2lnbl9vcGVuOiBjcnlwdG9fc2lnbl9vcGVuLFxuXG4gIGNyeXB0b19zZWNyZXRib3hfS0VZQllURVM6IGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMsXG4gIGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUzogY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUzogY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMsXG4gIGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyxcbiAgY3J5cHRvX3NjYWxhcm11bHRfQllURVM6IGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTLFxuICBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUzogY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMsXG4gIGNyeXB0b19ib3hfUFVCTElDS0VZQllURVM6IGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMsXG4gIGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVM6IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMsXG4gIGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUzogY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTLFxuICBjcnlwdG9fYm94X05PTkNFQllURVM6IGNyeXB0b19ib3hfTk9OQ0VCWVRFUyxcbiAgY3J5cHRvX2JveF9aRVJPQllURVM6IGNyeXB0b19ib3hfWkVST0JZVEVTLFxuICBjcnlwdG9fYm94X0JPWFpFUk9CWVRFUzogY3J5cHRvX2JveF9CT1haRVJPQllURVMsXG4gIGNyeXB0b19zaWduX0JZVEVTOiBjcnlwdG9fc2lnbl9CWVRFUyxcbiAgY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVM6IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTLFxuICBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUzogY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMsXG4gIGNyeXB0b19zaWduX1NFRURCWVRFUzogY3J5cHRvX3NpZ25fU0VFREJZVEVTLFxuICBjcnlwdG9faGFzaF9CWVRFUzogY3J5cHRvX2hhc2hfQllURVNcbn07XG5cbi8qIEhpZ2gtbGV2ZWwgQVBJICovXG5cbmZ1bmN0aW9uIGNoZWNrTGVuZ3RocyhrLCBuKSB7XG4gIGlmIChrLmxlbmd0aCAhPT0gY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQga2V5IHNpemUnKTtcbiAgaWYgKG4ubGVuZ3RoICE9PSBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG5vbmNlIHNpemUnKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCb3hMZW5ndGhzKHBrLCBzaykge1xuICBpZiAocGsubGVuZ3RoICE9PSBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwdWJsaWMga2V5IHNpemUnKTtcbiAgaWYgKHNrLmxlbmd0aCAhPT0gY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQXJyYXlUeXBlcygpIHtcbiAgdmFyIHQsIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgaWYgKCh0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50c1tpXSkpICE9PSAnW29iamVjdCBVaW50OEFycmF5XScpXG4gICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW5leHBlY3RlZCB0eXBlICcgKyB0ICsgJywgdXNlIFVpbnQ4QXJyYXknKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhbnVwKGFycikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgYXJyW2ldID0gMDtcbn1cblxuLy8gVE9ETzogQ29tcGxldGVseSByZW1vdmUgdGhpcyBpbiB2MC4xNS5cbmlmICghbmFjbC51dGlsKSB7XG4gIG5hY2wudXRpbCA9IHt9O1xuICBuYWNsLnV0aWwuZGVjb2RlVVRGOCA9IG5hY2wudXRpbC5lbmNvZGVVVEY4ID0gbmFjbC51dGlsLmVuY29kZUJhc2U2NCA9IG5hY2wudXRpbC5kZWNvZGVCYXNlNjQgPSBmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25hY2wudXRpbCBtb3ZlZCBpbnRvIHNlcGFyYXRlIHBhY2thZ2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9kY2hlc3QvdHdlZXRuYWNsLXV0aWwtanMnKTtcbiAgfTtcbn1cblxubmFjbC5yYW5kb21CeXRlcyA9IGZ1bmN0aW9uKG4pIHtcbiAgdmFyIGIgPSBuZXcgVWludDhBcnJheShuKTtcbiAgcmFuZG9tYnl0ZXMoYiwgbik7XG4gIHJldHVybiBiO1xufTtcblxubmFjbC5zZWNyZXRib3ggPSBmdW5jdGlvbihtc2csIG5vbmNlLCBrZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgbm9uY2UsIGtleSk7XG4gIGNoZWNrTGVuZ3RocyhrZXksIG5vbmNlKTtcbiAgdmFyIG0gPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyArIG1zZy5sZW5ndGgpO1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KG0ubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIG1baStjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFU10gPSBtc2dbaV07XG4gIGNyeXB0b19zZWNyZXRib3goYywgbSwgbS5sZW5ndGgsIG5vbmNlLCBrZXkpO1xuICByZXR1cm4gYy5zdWJhcnJheShjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyk7XG59O1xuXG5uYWNsLnNlY3JldGJveC5vcGVuID0gZnVuY3Rpb24oYm94LCBub25jZSwga2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhib3gsIG5vbmNlLCBrZXkpO1xuICBjaGVja0xlbmd0aHMoa2V5LCBub25jZSk7XG4gIHZhciBjID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMgKyBib3gubGVuZ3RoKTtcbiAgdmFyIG0gPSBuZXcgVWludDhBcnJheShjLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYm94Lmxlbmd0aDsgaSsrKSBjW2krY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVNdID0gYm94W2ldO1xuICBpZiAoYy5sZW5ndGggPCAzMikgcmV0dXJuIGZhbHNlO1xuICBpZiAoY3J5cHRvX3NlY3JldGJveF9vcGVuKG0sIGMsIGMubGVuZ3RoLCBub25jZSwga2V5KSAhPT0gMCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gbS5zdWJhcnJheShjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyk7XG59O1xuXG5uYWNsLnNlY3JldGJveC5rZXlMZW5ndGggPSBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTO1xubmFjbC5zZWNyZXRib3gubm9uY2VMZW5ndGggPSBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVM7XG5uYWNsLnNlY3JldGJveC5vdmVyaGVhZExlbmd0aCA9IGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTO1xuXG5uYWNsLnNjYWxhck11bHQgPSBmdW5jdGlvbihuLCBwKSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhuLCBwKTtcbiAgaWYgKG4ubGVuZ3RoICE9PSBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgbiBzaXplJyk7XG4gIGlmIChwLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIHAgc2l6ZScpO1xuICB2YXIgcSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKTtcbiAgY3J5cHRvX3NjYWxhcm11bHQocSwgbiwgcCk7XG4gIHJldHVybiBxO1xufTtcblxubmFjbC5zY2FsYXJNdWx0LmJhc2UgPSBmdW5jdGlvbihuKSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhuKTtcbiAgaWYgKG4ubGVuZ3RoICE9PSBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgbiBzaXplJyk7XG4gIHZhciBxID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NjYWxhcm11bHRfQllURVMpO1xuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHEsIG4pO1xuICByZXR1cm4gcTtcbn07XG5cbm5hY2wuc2NhbGFyTXVsdC5zY2FsYXJMZW5ndGggPSBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUztcbm5hY2wuc2NhbGFyTXVsdC5ncm91cEVsZW1lbnRMZW5ndGggPSBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUztcblxubmFjbC5ib3ggPSBmdW5jdGlvbihtc2csIG5vbmNlLCBwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICB2YXIgayA9IG5hY2wuYm94LmJlZm9yZShwdWJsaWNLZXksIHNlY3JldEtleSk7XG4gIHJldHVybiBuYWNsLnNlY3JldGJveChtc2csIG5vbmNlLCBrKTtcbn07XG5cbm5hY2wuYm94LmJlZm9yZSA9IGZ1bmN0aW9uKHB1YmxpY0tleSwgc2VjcmV0S2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhwdWJsaWNLZXksIHNlY3JldEtleSk7XG4gIGNoZWNrQm94TGVuZ3RocyhwdWJsaWNLZXksIHNlY3JldEtleSk7XG4gIHZhciBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTKTtcbiAgY3J5cHRvX2JveF9iZWZvcmVubShrLCBwdWJsaWNLZXksIHNlY3JldEtleSk7XG4gIHJldHVybiBrO1xufTtcblxubmFjbC5ib3guYWZ0ZXIgPSBuYWNsLnNlY3JldGJveDtcblxubmFjbC5ib3gub3BlbiA9IGZ1bmN0aW9uKG1zZywgbm9uY2UsIHB1YmxpY0tleSwgc2VjcmV0S2V5KSB7XG4gIHZhciBrID0gbmFjbC5ib3guYmVmb3JlKHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIG5hY2wuc2VjcmV0Ym94Lm9wZW4obXNnLCBub25jZSwgayk7XG59O1xuXG5uYWNsLmJveC5vcGVuLmFmdGVyID0gbmFjbC5zZWNyZXRib3gub3BlbjtcblxubmFjbC5ib3gua2V5UGFpciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTKTtcbiAgdmFyIHNrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUyk7XG4gIGNyeXB0b19ib3hfa2V5cGFpcihwaywgc2spO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogc2t9O1xufTtcblxubmFjbC5ib3gua2V5UGFpci5mcm9tU2VjcmV0S2V5ID0gZnVuY3Rpb24oc2VjcmV0S2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhzZWNyZXRLZXkpO1xuICBpZiAoc2VjcmV0S2V5Lmxlbmd0aCAhPT0gY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWNyZXQga2V5IHNpemUnKTtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUyk7XG4gIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UocGssIHNlY3JldEtleSk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBuZXcgVWludDhBcnJheShzZWNyZXRLZXkpfTtcbn07XG5cbm5hY2wuYm94LnB1YmxpY0tleUxlbmd0aCA9IGNyeXB0b19ib3hfUFVCTElDS0VZQllURVM7XG5uYWNsLmJveC5zZWNyZXRLZXlMZW5ndGggPSBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTO1xubmFjbC5ib3guc2hhcmVkS2V5TGVuZ3RoID0gY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTO1xubmFjbC5ib3gubm9uY2VMZW5ndGggPSBjcnlwdG9fYm94X05PTkNFQllURVM7XG5uYWNsLmJveC5vdmVyaGVhZExlbmd0aCA9IG5hY2wuc2VjcmV0Ym94Lm92ZXJoZWFkTGVuZ3RoO1xuXG5uYWNsLnNpZ24gPSBmdW5jdGlvbihtc2csIHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMobXNnLCBzZWNyZXRLZXkpO1xuICBpZiAoc2VjcmV0S2V5Lmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBzaWduZWRNc2cgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9CWVRFUyttc2cubGVuZ3RoKTtcbiAgY3J5cHRvX3NpZ24oc2lnbmVkTXNnLCBtc2csIG1zZy5sZW5ndGgsIHNlY3JldEtleSk7XG4gIHJldHVybiBzaWduZWRNc2c7XG59O1xuXG5uYWNsLnNpZ24ub3BlbiA9IGZ1bmN0aW9uKHNpZ25lZE1zZywgcHVibGljS2V5KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAyKVxuICAgIHRocm93IG5ldyBFcnJvcignbmFjbC5zaWduLm9wZW4gYWNjZXB0cyAyIGFyZ3VtZW50czsgZGlkIHlvdSBtZWFuIHRvIHVzZSBuYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5PycpO1xuICBjaGVja0FycmF5VHlwZXMoc2lnbmVkTXNnLCBwdWJsaWNLZXkpO1xuICBpZiAocHVibGljS2V5Lmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgcHVibGljIGtleSBzaXplJyk7XG4gIHZhciB0bXAgPSBuZXcgVWludDhBcnJheShzaWduZWRNc2cubGVuZ3RoKTtcbiAgdmFyIG1sZW4gPSBjcnlwdG9fc2lnbl9vcGVuKHRtcCwgc2lnbmVkTXNnLCBzaWduZWRNc2cubGVuZ3RoLCBwdWJsaWNLZXkpO1xuICBpZiAobWxlbiA8IDApIHJldHVybiBudWxsO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KG1sZW4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIG1baV0gPSB0bXBbaV07XG4gIHJldHVybiBtO1xufTtcblxubmFjbC5zaWduLmRldGFjaGVkID0gZnVuY3Rpb24obXNnLCBzZWNyZXRLZXkpIHtcbiAgdmFyIHNpZ25lZE1zZyA9IG5hY2wuc2lnbihtc2csIHNlY3JldEtleSk7XG4gIHZhciBzaWcgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9CWVRFUyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnLmxlbmd0aDsgaSsrKSBzaWdbaV0gPSBzaWduZWRNc2dbaV07XG4gIHJldHVybiBzaWc7XG59O1xuXG5uYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5ID0gZnVuY3Rpb24obXNnLCBzaWcsIHB1YmxpY0tleSkge1xuICBjaGVja0FycmF5VHlwZXMobXNnLCBzaWcsIHB1YmxpY0tleSk7XG4gIGlmIChzaWcubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9CWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzaWduYXR1cmUgc2l6ZScpO1xuICBpZiAocHVibGljS2V5Lmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgcHVibGljIGtleSBzaXplJyk7XG4gIHZhciBzbSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTICsgbXNnLmxlbmd0aCk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMgKyBtc2cubGVuZ3RoKTtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBjcnlwdG9fc2lnbl9CWVRFUzsgaSsrKSBzbVtpXSA9IHNpZ1tpXTtcbiAgZm9yIChpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykgc21baStjcnlwdG9fc2lnbl9CWVRFU10gPSBtc2dbaV07XG4gIHJldHVybiAoY3J5cHRvX3NpZ25fb3BlbihtLCBzbSwgc20ubGVuZ3RoLCBwdWJsaWNLZXkpID49IDApO1xufTtcblxubmFjbC5zaWduLmtleVBhaXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMpO1xuICB2YXIgc2sgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUyk7XG4gIGNyeXB0b19zaWduX2tleXBhaXIocGssIHNrKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWNyZXRLZXkgPSBmdW5jdGlvbihzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHNlY3JldEtleSk7XG4gIGlmIChzZWNyZXRLZXkubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWNyZXQga2V5IHNpemUnKTtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBrLmxlbmd0aDsgaSsrKSBwa1tpXSA9IHNlY3JldEtleVszMitpXTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IG5ldyBVaW50OEFycmF5KHNlY3JldEtleSl9O1xufTtcblxubmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQgPSBmdW5jdGlvbihzZWVkKSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhzZWVkKTtcbiAgaWYgKHNlZWQubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9TRUVEQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VlZCBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgdmFyIHNrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDMyOyBpKyspIHNrW2ldID0gc2VlZFtpXTtcbiAgY3J5cHRvX3NpZ25fa2V5cGFpcihwaywgc2ssIHRydWUpO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogc2t9O1xufTtcblxubmFjbC5zaWduLnB1YmxpY0tleUxlbmd0aCA9IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTO1xubmFjbC5zaWduLnNlY3JldEtleUxlbmd0aCA9IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTO1xubmFjbC5zaWduLnNlZWRMZW5ndGggPSBjcnlwdG9fc2lnbl9TRUVEQllURVM7XG5uYWNsLnNpZ24uc2lnbmF0dXJlTGVuZ3RoID0gY3J5cHRvX3NpZ25fQllURVM7XG5cbm5hY2wuaGFzaCA9IGZ1bmN0aW9uKG1zZykge1xuICBjaGVja0FycmF5VHlwZXMobXNnKTtcbiAgdmFyIGggPSBuZXcgVWludDhBcnJheShjcnlwdG9faGFzaF9CWVRFUyk7XG4gIGNyeXB0b19oYXNoKGgsIG1zZywgbXNnLmxlbmd0aCk7XG4gIHJldHVybiBoO1xufTtcblxubmFjbC5oYXNoLmhhc2hMZW5ndGggPSBjcnlwdG9faGFzaF9CWVRFUztcblxubmFjbC52ZXJpZnkgPSBmdW5jdGlvbih4LCB5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyh4LCB5KTtcbiAgLy8gWmVybyBsZW5ndGggYXJndW1lbnRzIGFyZSBjb25zaWRlcmVkIG5vdCBlcXVhbC5cbiAgaWYgKHgubGVuZ3RoID09PSAwIHx8IHkubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIGlmICh4Lmxlbmd0aCAhPT0geS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICh2bih4LCAwLCB5LCAwLCB4Lmxlbmd0aCkgPT09IDApID8gdHJ1ZSA6IGZhbHNlO1xufTtcblxubmFjbC5zZXRQUk5HID0gZnVuY3Rpb24oZm4pIHtcbiAgcmFuZG9tYnl0ZXMgPSBmbjtcbn07XG5cbihmdW5jdGlvbigpIHtcbiAgLy8gSW5pdGlhbGl6ZSBQUk5HIGlmIGVudmlyb25tZW50IHByb3ZpZGVzIENTUFJORy5cbiAgLy8gSWYgbm90LCBtZXRob2RzIGNhbGxpbmcgcmFuZG9tYnl0ZXMgd2lsbCB0aHJvdy5cbiAgdmFyIGNyeXB0byA9IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IChzZWxmLmNyeXB0byB8fCBzZWxmLm1zQ3J5cHRvKSA6IG51bGw7XG4gIGlmIChjcnlwdG8gJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIEJyb3dzZXJzLlxuICAgIHZhciBRVU9UQSA9IDY1NTM2O1xuICAgIG5hY2wuc2V0UFJORyhmdW5jdGlvbih4LCBuKSB7XG4gICAgICB2YXIgaSwgdiA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkgKz0gUVVPVEEpIHtcbiAgICAgICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyh2LnN1YmFycmF5KGksIGkgKyBNYXRoLm1pbihuIC0gaSwgUVVPVEEpKSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB4W2ldID0gdltpXTtcbiAgICAgIGNsZWFudXAodik7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gTm9kZS5qcy5cbiAgICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21CeXRlcykge1xuICAgICAgbmFjbC5zZXRQUk5HKGZ1bmN0aW9uKHgsIG4pIHtcbiAgICAgICAgdmFyIGksIHYgPSBjcnlwdG8ucmFuZG9tQnl0ZXMobik7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHhbaV0gPSB2W2ldO1xuICAgICAgICBjbGVhbnVwKHYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59KSgpO1xuXG59KSh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cyA/IG1vZHVsZS5leHBvcnRzIDogKHNlbGYubmFjbCA9IHNlbGYubmFjbCB8fCB7fSkpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3R3ZWV0bmFjbC9uYWNsLWZhc3QuanNcbi8vIG1vZHVsZSBpZCA9IDI3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIChpZ25vcmVkKSAqL1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGNyeXB0byAoaWdub3JlZClcbi8vIG1vZHVsZSBpZCA9IDI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA0MTJjMmM1YTI3YmIwZTQ0Yzk2ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9nZXRBcGlVcmxzLmpzIiwid2VicGFjazovLy8uL3NyYy9yZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL34vbm9kZS1saWJzLWJyb3dzZXIvfi9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2JzNTgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9nZXRTdGF0dXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vZ2V0VHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VJbnB1dFRlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9zZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jbG9uZS9jbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZW50cmllcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZpdmUtYmVsbHMtY29uZGl0aW9uL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9qcy1zaGEzL3NyYy9zaGEzLmpzIiwid2VicGFjazovLy8uL34vc3ByaW50Zi1qcy9zcmMvc3ByaW50Zi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvRWQyNTUxOUtleXBhaXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Jhc2VSZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uL2dldEJsb2NrLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uL2xpc3RCbG9ja3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vbGlzdE91dHB1dHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vbGlzdFRyYW5zYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9saXN0Vm90ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vcG9sbFN0YXR1c0FuZEZldGNoVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vcG9zdFRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy9mb3JtYXRfdGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc2FuaXRpemUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3NoYTI1Nkhhc2guanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0cmluZ2lmeV9hc19xdWVyeV9wYXJhbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vaGFzaFRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlQ3JlYXRlVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VFZDI1NTE5Q29uZGl0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlT3V0cHV0LmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlVHJhbnNmZXJUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL34vYmFzZS14L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vYmFzZTY0LWpzL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2luY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9kZWNhbWVsaXplL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vZXM2LXByb21pc2UvZGlzdC9lczYtcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZldGNoLXBvbnlmaWxsL2J1aWxkL2ZldGNoLWJyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9pZWVlNzU0L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vaXNhcnJheS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzb24tc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzb25pZnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9qc29uaWZ5L2xpYi9wYXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzb25pZnkvbGliL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly8vLi9+L29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9xdWVyeS1zdHJpbmcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9zdHJpY3QtdXJpLWVuY29kZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3R3ZWV0bmFjbC9uYWNsLWZhc3QuanMiLCJ3ZWJwYWNrOi8vL3ZlcnR4IChpZ25vcmVkKSIsIndlYnBhY2s6Ly8vY3J5cHRvIChpZ25vcmVkKSJdLCJuYW1lcyI6WyJnZXRBcGlVcmxzIiwiQVBJX1BBVEgiLCJERUZBVUxUX1JFUVVFU1RfQ09ORklHIiwiY3JlZGVudGlhbHMiLCJoZWFkZXJzIiwicmVxdWVzdCIsInVybCIsImNvbmZpZyIsIm9ubHlKc29uUmVzcG9uc2UiLCJyZXF1ZXN0Q29uZmlnIiwicXVlcnkiLCJzYW5pdGl6ZSIsImFwaVVybCIsImpzb25Cb2R5IiwiUHJvbWlzZSIsInJlamVjdCIsIkVycm9yIiwiYmFzZVJlcXVlc3QiLCJ0aGVuIiwicmVzIiwianNvbiIsImNhdGNoIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwibWFrZVRyYW5zYWN0aW9uVGVtcGxhdGUiLCJtYWtlVHJhbnNhY3Rpb24iLCJvcGVyYXRpb24iLCJhc3NldCIsIm1ldGFkYXRhIiwib3V0cHV0cyIsImlucHV0cyIsInR4IiwiaWQiLCJoYXNoVHJhbnNhY3Rpb24iLCJnZXRTdGF0dXMiLCJ0eF9pZCIsImdldFRyYW5zYWN0aW9uIiwidHhJZCIsInVybFRlbXBsYXRlU3BlYyIsIm1ha2VJbnB1dFRlbXBsYXRlIiwicHVibGljS2V5cyIsImZ1bGZpbGxzIiwiZnVsZmlsbG1lbnQiLCJzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmciLCJ0cmFuc2FjdGlvbiIsImlucHV0IiwiY2xvbmUiLCJtYXRjaCIsImZvckVhY2giLCJfaW5wdXQiLCJpbmRleE9mIiwic3RhYmxlU3RyaW5naWZ5IiwiYSIsImIiLCJrZXkiLCJFZDI1NTE5S2V5cGFpciIsInNlY3JldCIsImtleVBhaXIiLCJzZWNyZXRIYXNoIiwic2hhMyIsInNoYTNfMjU2IiwiY3JlYXRlIiwidXBkYXRlIiwiYXJyYXkiLCJuYWNsIiwic2lnbiIsImZyb21TZWVkIiwiVWludDhBcnJheSIsInB1YmxpY0tleSIsImJhc2U1OCIsImVuY29kZSIsInByaXZhdGVLZXkiLCJzZWNyZXRLZXkiLCJzbGljZSIsImZldGNoIiwiZmV0Y2hQb255ZmlsbCIsImZldGNoQ29uZmlnIiwiZXhwYW5kZWRVcmwiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ2c3ByaW50ZiIsIk9iamVjdCIsImtleXMiLCJmb3JtYXRUZXh0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwid2FybiIsInN0cmluZ2lmeUFzUXVlcnlQYXJhbSIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5Iiwib2siLCJnZXRCbG9jayIsImJsb2NrSWQiLCJsaXN0QmxvY2tzIiwic3RhdHVzIiwibGlzdE91dHB1dHMiLCJwdWJsaWNfa2V5IiwidW5zcGVudCIsImxpc3RUcmFuc2FjdGlvbnMiLCJhc3NldF9pZCIsImxpc3RWb3RlcyIsImJsb2NrX2lkIiwicmVzb2x2ZSIsInRpbWVyIiwic2V0SW50ZXJ2YWwiLCJsb2ciLCJjbGVhckludGVydmFsIiwicG9zdFRyYW5zYWN0aW9uIiwibWV0aG9kIiwiUmVnZXgiLCJURU1QTEFURV9MSVRFUkFMIiwiS0VZIiwiS0VZX0FDQ0VTUyIsIklOREVYX0FDQ0VTUyIsInMiLCJleHBhbmRlZEZvcm1hdFN0ciIsImFyZ3YiLCJ0ZW1wbGF0ZVNwZWNPYmoiLCJyZXBsYWNlIiwicmVwbGFjZW1lbnQiLCJpbnRlcnBvbGF0aW9uTGVmdCIsInZhbHVlIiwiY3VyTWF0Y2giLCJleGVjIiwic3Vic3RyaW5nIiwiU3ludGF4RXJyb3IiLCJzcHJpbnRmIiwiZmlsdGVyRnJvbU9iamVjdCIsIm9iaiIsImZpbHRlciIsImlzSW5jbHVzaW9uIiwiYXBwbHlGaWx0ZXJPbk9iamVjdCIsIl8iLCJjb3JlSW5jbHVkZXMiLCJmaWx0ZXJGbiIsImZpbHRlcmVkT2JqIiwiY29yZU9iamVjdEVudHJpZXMiLCJ2YWwiLCJzZWxlY3RGcm9tT2JqZWN0Iiwic2hhMjU2SGFzaCIsImRhdGEiLCJoZXgiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1lZEtleXNPYmoiLCJyZWR1Y2UiLCJwYXJhbXNPYmoiLCJxdWVyeVN0cmluZyIsIm1ha2VDcmVhdGVUcmFuc2FjdGlvbiIsImFzc2V0RGVmaW5pdGlvbiIsImlzc3VlcnMiLCJtYXAiLCJpc3N1ZXIiLCJtYWtlRWQyNTUxOUNvbmRpdGlvbiIsInB1YmxpY0tleUJ1ZmZlciIsImRlY29kZSIsImVkMjU1MTlGdWxmaWxsbWVudCIsImNjIiwiRWQyNTUxOSIsInNldFB1YmxpY0tleSIsImNvbmRpdGlvblVyaSIsImdldENvbmRpdGlvblVyaSIsIm1ha2VPdXRwdXQiLCJjb25kaXRpb24iLCJhbW91bnQiLCJkZXRhaWxzIiwibWFrZVRyYW5zZmVyVHJhbnNhY3Rpb24iLCJ1bnNwZW50VHJhbnNhY3Rpb24iLCJmdWxmaWxsZWRPdXRwdXRzIiwib3V0cHV0SW5kZXgiLCJmdWxmaWxsZWRPdXRwdXQiLCJ0cmFuc2FjdGlvbkxpbmsiLCJwdWJsaWNfa2V5cyIsImFzc2V0TGluayIsInNpZ25UcmFuc2FjdGlvbiIsInByaXZhdGVLZXlzIiwic2lnbmVkVHgiLCJpbmRleCIsInByaXZhdGVLZXlCdWZmZXIiLCJzZXJpYWxpemVkVHJhbnNhY3Rpb24iLCJmdWxmaWxsbWVudFVyaSIsInNlcmlhbGl6ZVVyaSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7QUNoRWUsU0FBU0EsVUFBVCxDQUFvQkMsUUFBcEIsRUFBOEI7QUFDekMsV0FBTztBQUNILGtCQUFVQSxXQUFXLFFBRGxCO0FBRUgseUJBQWlCQSxXQUFXLG9CQUZ6QjtBQUdILG1CQUFXQSxXQUFXLFNBSG5CO0FBSUgsb0JBQVlBLFdBQVcsVUFKcEI7QUFLSCx3QkFBZ0JBLFdBQVcsY0FMeEI7QUFNSCwrQkFBdUJBLFdBQVcsdUJBTi9CO0FBT0gsaUJBQVNBLFdBQVc7QUFQakIsS0FBUDtBQVNILEM7Ozs7Ozs7Ozs7OztBQ1ZEO0FBQ0E7O0FBR0EsSUFBTUMseUJBQXlCO0FBQzNCQyxpQkFBYSxTQURjO0FBRTNCQyxhQUFTO0FBQ0wsa0JBQVU7QUFETDtBQUZrQixDQUEvQjs7QUFPQTs7OztBQUllLFNBQVNDLE9BQVQsQ0FBaUJDLEdBQWpCLEVBQTBEO0FBQUEsUUFBcENDLE1BQW9DLHVFQUEzQixFQUEyQjtBQUFBLFFBQXZCQyxnQkFBdUIsdUVBQU4sSUFBTTs7QUFDckU7QUFDQSxRQUFNQyxnQkFBZ0IsU0FBYyxFQUFkLEVBQWtCUCxzQkFBbEIsRUFBMENLLE1BQTFDLEVBQWtEO0FBQ3BFRyxlQUFPSCxPQUFPRyxLQUFQLElBQWdCLGlGQUFBQyxDQUFTSixPQUFPRyxLQUFoQjtBQUQ2QyxLQUFsRCxDQUF0QjtBQUdBLFFBQUlFLFNBQVNOLEdBQWI7O0FBRUEsUUFBSUcsY0FBY0ksUUFBbEIsRUFBNEI7QUFDeEJKLHNCQUFjTCxPQUFkLEdBQXdCLFNBQWMsRUFBZCxFQUFrQkssY0FBY0wsT0FBaEMsRUFBeUM7QUFDN0QsNEJBQWdCO0FBRDZDLFNBQXpDLENBQXhCO0FBR0g7QUFDRCxRQUFJLENBQUNFLEdBQUwsRUFBVTtBQUNOLGVBQU9RLFFBQVFDLE1BQVIsQ0FBZSxJQUFJQyxLQUFKLENBQVUsOEJBQVYsQ0FBZixDQUFQO0FBQ0g7O0FBRUQsV0FBTyxvRkFBQUMsQ0FBWUwsTUFBWixFQUFvQkgsYUFBcEIsRUFDRlMsSUFERSxDQUNHLFVBQUNDLEdBQUQsRUFBUztBQUNYLGVBQU9YLG1CQUFtQlcsSUFBSUMsSUFBSixFQUFuQixHQUNIO0FBQ0lBLGtCQUFNRCxJQUFJQyxJQUFKLEVBRFY7QUFFSWQsaUJBQUthLElBQUliO0FBRmIsU0FESjtBQUtILEtBUEUsRUFRRmUsS0FSRSxDQVFJLFVBQUNDLEdBQUQsRUFBUztBQUNaQyxnQkFBUUMsS0FBUixDQUFjRixHQUFkO0FBQ0EsY0FBTUEsR0FBTjtBQUNILEtBWEUsQ0FBUDtBQVlILEM7Ozs7Ozs7QUMzQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbURBQW1EO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FB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RCxFQUFFQyxHQUFWLEdBQWdCLENBQWhCLEdBQW9CLENBQUMsQ0FBaEM7QUFBQSxLQUFwQixDQUFQO0FBQ0gsQzs7Ozs7O0FDdkJEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7O0FDMWREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLEVBQUU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBLCtCQUErQixxQkFBcUI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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aUY7O0FBRWpGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHNCQUFzQjs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxVQUFVLElBQUk7QUFDZDtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsd0JBQXdCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHVDQUF1QztBQUN4RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLFVBQVUsTUFBTTtBQUNoQixVQUFVLE9BQU87QUFDakI7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EscUJBQXFCLFlBQVk7QUFDakM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxVQUFVLElBQUk7QUFDZDtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxVQUFVLFNBQVM7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCLFlBQVksU0FBUztBQUNyQjtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7QUN6RkE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLG9CQUFvQjs7QUFFMUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBLEVBQUU7QUFDRjs7Ozs7Ozs7QUMxTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7Ozs7Ozs7QUNMQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTs7QUFFQTtBQUNBLHdDQUF3Qyw0QkFBNEI7O0FBRXBFO0FBQ0EsNEJBQTRCOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsOENBQThDO0FBQzlDLDhDQUE4QztBQUM5Qyw4Q0FBOEM7QUFDOUMsOENBQThDO0FBQzlDLDhDQUE4QztBQUM5QztBQUNBLDhDQUE4QztBQUM5Qyw4Q0FBOEM7QUFDOUMsOENBQThDO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQ7QUFDQSxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFFBQVE7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBLGFBQWEsUUFBUTs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsUUFBUTtBQUN6Qjs7QUFFQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQjtBQUNyQixxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEIsc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEIsc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCO0FBQ3JCLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEIsc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCO0FBQ3JCLHFCQUFxQjs7QUFFckI7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEIsc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFD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QUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLFFBQVE7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsUUFBUTtBQUN0QjtBQUNBOztBQUVBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGFBQWEsT0FBTztBQUNwQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7O0FBRUEsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLHNCQUFzQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsY0FBYztBQUMvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHVCQUF1QjtBQUNwQyxhQUFhLGdCQUFnQjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZUFBZTtBQUNoQyxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFFBQVE7QUFDekI7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxDQUFDLGlHQUFpRzs7Ozs7OztBQ24xRWxHLGU7Ozs7OztBQ0FBLGUiLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wianMtYmlnY2hhaW5kYi1xdWlja3N0YXJ0XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImpzLWJpZ2NoYWluZGItcXVpY2tzdGFydFwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA5MSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgNDEyYzJjNWEyN2JiMGU0NGM5NmQiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBcGlVcmxzKEFQSV9QQVRIKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2Jsb2Nrcyc6IEFQSV9QQVRIICsgJ2Jsb2NrcycsXG4gICAgICAgICdibG9ja3NfZGV0YWlsJzogQVBJX1BBVEggKyAnYmxvY2tzLyUoYmxvY2tJZClzJyxcbiAgICAgICAgJ291dHB1dHMnOiBBUElfUEFUSCArICdvdXRwdXRzJyxcbiAgICAgICAgJ3N0YXR1c2VzJzogQVBJX1BBVEggKyAnc3RhdHVzZXMnLFxuICAgICAgICAndHJhbnNhY3Rpb25zJzogQVBJX1BBVEggKyAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgJ3RyYW5zYWN0aW9uc19kZXRhaWwnOiBBUElfUEFUSCArICd0cmFuc2FjdGlvbnMvJSh0eElkKXMnLFxuICAgICAgICAndm90ZXMnOiBBUElfUEFUSCArICd2b3RlcydcbiAgICB9O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL2dldEFwaVVybHMuanMiLCJpbXBvcnQgYmFzZVJlcXVlc3QgZnJvbSAnLi9iYXNlUmVxdWVzdCc7XG5pbXBvcnQgc2FuaXRpemUgZnJvbSAnLi9zYW5pdGl6ZSc7XG5cblxuY29uc3QgREVGQVVMVF9SRVFVRVNUX0NPTkZJRyA9IHtcbiAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIH1cbn07XG5cbi8qKlxuICogU21hbGwgd3JhcHBlciBhcm91bmQganMtdXRpbGl0eS1iZWx0J3MgcmVxdWVzdCB0aGF0IHByb3ZpZGVzIHVybCByZXNvbHZpbmcsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZFxuICogcmVzcG9uc2UgaGFuZGxpbmcuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVlc3QodXJsLCBjb25maWcgPSB7fSwgb25seUpzb25SZXNwb25zZT10cnVlKSB7XG4gICAgLy8gTG9hZCBkZWZhdWx0IGZldGNoIGNvbmZpZ3VyYXRpb24gYW5kIHJlbW92ZSBhbnkgZmFsc3kgcXVlcnkgcGFyYW1ldGVyc1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1JFUVVFU1RfQ09ORklHLCBjb25maWcsIHtcbiAgICAgICAgcXVlcnk6IGNvbmZpZy5xdWVyeSAmJiBzYW5pdGl6ZShjb25maWcucXVlcnkpXG4gICAgfSk7XG4gICAgbGV0IGFwaVVybCA9IHVybDtcblxuICAgIGlmIChyZXF1ZXN0Q29uZmlnLmpzb25Cb2R5KSB7XG4gICAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcXVlc3RDb25maWcuaGVhZGVycywge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignUmVxdWVzdCB3YXMgbm90IGdpdmVuIGEgdXJsLicpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVJlcXVlc3QoYXBpVXJsLCByZXF1ZXN0Q29uZmlnKVxuICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb25seUpzb25SZXNwb25zZSA/IHJlcy5qc29uKCkgOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAganNvbjogcmVzLmpzb24oKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiByZXMudXJsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG59XG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9yZXF1ZXN0LmpzIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogRHVlIHRvIHZhcmlvdXMgYnJvd3NlciBidWdzLCBzb21ldGltZXMgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgZXZlblxuICogd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0eXBlZCBhcnJheXMuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgIC0gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWAgaW5zdGFuY2VzLFxuICogICAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAgLSBDaHJvbWUgOS0xMCBpcyBtaXNzaW5nIHRoZSBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uLlxuICpcbiAqICAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG5cbiAqIFdlIGRldGVjdCB0aGVzZSBidWdneSBicm93c2VycyBhbmQgc2V0IGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5XG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCBiZWhhdmVzIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVCAhPT0gdW5kZWZpbmVkXG4gID8gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgOiB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbi8qXG4gKiBFeHBvcnQga01heExlbmd0aCBhZnRlciB0eXBlZCBhcnJheSBzdXBwb3J0IGlzIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydHMua01heExlbmd0aCA9IGtNYXhMZW5ndGgoKVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHtfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH19XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgICAgICAgYXJyLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGtNYXhMZW5ndGggKCkge1xuICByZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgICA/IDB4N2ZmZmZmZmZcbiAgICA6IDB4M2ZmZmZmZmZcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKGtNYXhMZW5ndGgoKSA8IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgaWYgKHRoYXQgPT09IG51bGwpIHtcbiAgICAgIHRoYXQgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgICB9XG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmICEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZydcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKHRoaXMsIGFyZylcbiAgfVxuICByZXR1cm4gZnJvbSh0aGlzLCBhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbi8vIFRPRE86IExlZ2FjeSwgbm90IG5lZWRlZCBhbnltb3JlLiBSZW1vdmUgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLlxuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gKGFycikge1xuICBhcnIuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIGZyb20gKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICByZXR1cm4gZnJvbU9iamVjdCh0aGF0LCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbShudWxsLCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgJiZcbiAgICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICAgIC8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHRoYXQsIHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKG51bGwsIHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAodGhhdCwgc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkge1xuICAgICAgdGhhdFtpXSA9IDBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nICh0aGF0LCBzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gdGhhdC53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgdGhhdCA9IHRoYXQuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAodGhhdCwgYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBhcnJheS5ieXRlTGVuZ3RoIC8vIHRoaXMgdGhyb3dzIGlmIGBhcnJheWAgaXMgbm90IGEgdmFsaWQgQXJyYXlCdWZmZXJcblxuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IGFycmF5XG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQgPSBmcm9tQXJyYXlMaWtlKHRoYXQsIGFycmF5KVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKHRoYXQsIG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbilcblxuICAgIGlmICh0aGF0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoYXRcbiAgICB9XG5cbiAgICBvYmouY29weSh0aGF0LCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIHRoYXRcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgb2JqLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgaXNuYW4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCAwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwga01heExlbmd0aCgpYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgoKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoKCkudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycycpXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGUgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCBhbmQgYGlzLWJ1ZmZlcmAgKGluIFNhZmFyaSA1LTcpIHRvIGRldGVjdFxuLy8gQnVmZmVyIGluc3RhbmNlcy5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKGlzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiZcbiAgICAgICAgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggfCAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgLy8gbGVnYWN5IHdyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKSAtIHJlbW92ZSBpbiB2MC4xM1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gICAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyArK2kpIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQxNiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCAyKTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSAmICgweGZmIDw8ICg4ICogKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkpKSkgPj4+XG4gICAgICAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSAqIDhcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgNCk7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgPj4+IChsaXR0bGVFbmRpYW4gPyBpIDogMyAtIGkpICogOCkgJiAweGZmXG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogdXRmOFRvQnl0ZXMobmV3IEJ1ZmZlcih2YWwsIGVuY29kaW5nKS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiBpc25hbiAodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHZhbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L25vZGUtbGlicy1icm93c2VyL34vYnVmZmVyL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBoYXNoVHJhbnNhY3Rpb24gZnJvbSAnLi9oYXNoVHJhbnNhY3Rpb24nO1xuXG5cbmZ1bmN0aW9uIG1ha2VUcmFuc2FjdGlvblRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgICdpZCc6IG51bGwsXG4gICAgICAgICdvcGVyYXRpb24nOiBudWxsLFxuICAgICAgICAnb3V0cHV0cyc6IFtdLFxuICAgICAgICAnaW5wdXRzJzogW10sXG4gICAgICAgICdtZXRhZGF0YSc6IG51bGwsXG4gICAgICAgICdhc3NldCc6IG51bGwsXG4gICAgICAgICd2ZXJzaW9uJzogJzAuOScsXG4gICAgfTtcbn1cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlVHJhbnNhY3Rpb24ob3BlcmF0aW9uLCBhc3NldCwgbWV0YWRhdGEgPSBudWxsLCBvdXRwdXRzID0gW10sIGlucHV0cyA9IFtdKSB7XG4gICAgY29uc3QgdHggPSBtYWtlVHJhbnNhY3Rpb25UZW1wbGF0ZSgpO1xuICAgIHR4Lm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgICB0eC5hc3NldCA9IGFzc2V0O1xuICAgIHR4Lm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gICAgdHguaW5wdXRzID0gaW5wdXRzO1xuICAgIHR4Lm91dHB1dHMgPSBvdXRwdXRzO1xuXG4gICAgLy8gSGFzaGluZyBtdXN0IGJlIGRvbmUgYWZ0ZXIsIGFzIHRoZSBoYXNoIGlzIG9mIHRoZSBUcmFuc2FjdGlvbiAodXAgdG8gbm93KVxuICAgIHR4LmlkID0gaGFzaFRyYW5zYWN0aW9uKHR4KTtcbiAgICByZXR1cm4gdHg7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZVRyYW5zYWN0aW9uLmpzIiwidmFyIGJhc2V4ID0gcmVxdWlyZSgnYmFzZS14JylcbnZhciBBTFBIQUJFVCA9ICcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2V4KEFMUEhBQkVUKVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JzNTgvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHt2ZXJzaW9uOiAnMi40LjAnfTtcbmlmKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywge2dldDogZnVuY3Rpb24oKXsgcmV0dXJuIDc7IH19KS5hICE9IDc7XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzXG4vLyBtb2R1bGUgaWQgPSA2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGYgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYodHlwZW9mIF9fZyA9PSAnbnVtYmVyJylfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFN0YXR1cyh0eF9pZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsnc3RhdHVzZXMnXSwge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICB0eF9pZFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9nZXRTdGF0dXMuanMiLCJpbXBvcnQgZ2V0QXBpVXJscyBmcm9tICcuL2dldEFwaVVybHMnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb24odHhJZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndHJhbnNhY3Rpb25zX2RldGFpbCddLCB7XG4gICAgICAgICAgICB1cmxUZW1wbGF0ZVNwZWM6IHtcbiAgICAgICAgICAgICAgICB0eElkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vZ2V0VHJhbnNhY3Rpb24uanMiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlSW5wdXRUZW1wbGF0ZShwdWJsaWNLZXlzID0gW10sIGZ1bGZpbGxzID0gbnVsbCwgZnVsZmlsbG1lbnQgPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnVsZmlsbG1lbnQsXG4gICAgICAgIGZ1bGZpbGxzLFxuICAgICAgICAnb3duZXJzX2JlZm9yZSc6IHB1YmxpY0tleXMsXG4gICAgfTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUlucHV0VGVtcGxhdGUuanMiLCJpbXBvcnQgc3RhYmxlU3RyaW5naWZ5IGZyb20gJ2pzb24tc3RhYmxlLXN0cmluZ2lmeSc7XG5pbXBvcnQgY2xvbmUgZnJvbSAnY2xvbmUnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyh0cmFuc2FjdGlvbiwgaW5wdXQpIHtcbiAgICAvLyBCaWdjaGFpbkRCIHNpZ25zIGZ1bGZpbGxtZW50cyBieSBzZXJpYWxpemluZyB0cmFuc2FjdGlvbnMgaW50byBhIFwiY2Fub25pY2FsXCIgZm9ybWF0IHdoZXJlXG4gICAgLy8gZWFjaCBmdWxmaWxsbWVudCBVUkkgaXMgcmVtb3ZlZCBiZWZvcmUgc29ydGluZyB0aGUgcmVtYWluaW5nIGtleXNcbiAgICBjb25zdCB0eCA9IGNsb25lKHRyYW5zYWN0aW9uKTtcbiAgICBsZXQgbWF0Y2g7XG4gICAgdHguaW5wdXRzLmZvckVhY2goKF9pbnB1dCkgPT4ge1xuXG4gICAgICAgIGlmICghKF9pbnB1dCAmJiBpbnB1dCAmJiBfaW5wdXRbJ2Z1bGZpbGxzJ10gJiYgaW5wdXRbJ2Z1bGZpbGxzJ11cbiAgICAgICAgICAgICYmICEoX2lucHV0WydmdWxmaWxscyddWyd0eGlkJ10gPT09IGlucHV0WydmdWxmaWxscyddWyd0eGlkJ11cbiAgICAgICAgICAgICYmIF9pbnB1dFsnZnVsZmlsbHMnXVsnb3V0cHV0J10gPT09IGlucHV0WydmdWxmaWxscyddWydvdXRwdXQnXSkpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IHR4LmlucHV0cy5pbmRleE9mKF9pbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgX2lucHV0LmZ1bGZpbGxtZW50ID0gbnVsbDtcbiAgICB9KTtcbiAgICBpZiAoaW5wdXQgJiYgbWF0Y2ggPj0gMCAmJiB0eC5pbnB1dHMpIHtcbiAgICAgICAgdHguaW5wdXRzID0gW3R4LmlucHV0c1ttYXRjaF1dO1xuICAgIH1cbiAgICAvLyBTb3J0IHRoZSBrZXlzXG4gICAgcmV0dXJuIHN0YWJsZVN0cmluZ2lmeSh0eCwgKGEsIGIpID0+IChhLmtleSA+IGIua2V5ID8gMSA6IC0xKSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZy5qcyIsInZhciBjbG9uZSA9IChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gX2luc3RhbmNlb2Yob2JqLCB0eXBlKSB7XG4gIHJldHVybiB0eXBlICE9IG51bGwgJiYgb2JqIGluc3RhbmNlb2YgdHlwZTtcbn1cblxudmFyIG5hdGl2ZU1hcDtcbnRyeSB7XG4gIG5hdGl2ZU1hcCA9IE1hcDtcbn0gY2F0Y2goXykge1xuICAvLyBtYXliZSBhIHJlZmVyZW5jZSBlcnJvciBiZWNhdXNlIG5vIGBNYXBgLiBHaXZlIGl0IGEgZHVtbXkgdmFsdWUgdGhhdCBub1xuICAvLyB2YWx1ZSB3aWxsIGV2ZXIgYmUgYW4gaW5zdGFuY2VvZi5cbiAgbmF0aXZlTWFwID0gZnVuY3Rpb24oKSB7fTtcbn1cblxudmFyIG5hdGl2ZVNldDtcbnRyeSB7XG4gIG5hdGl2ZVNldCA9IFNldDtcbn0gY2F0Y2goXykge1xuICBuYXRpdmVTZXQgPSBmdW5jdGlvbigpIHt9O1xufVxuXG52YXIgbmF0aXZlUHJvbWlzZTtcbnRyeSB7XG4gIG5hdGl2ZVByb21pc2UgPSBQcm9taXNlO1xufSBjYXRjaChfKSB7XG4gIG5hdGl2ZVByb21pc2UgPSBmdW5jdGlvbigpIHt9O1xufVxuXG4vKipcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXG4gKiB0aGVyZSBhcmUgbm8gY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiB5b3VyIG9iamVjdCwgeW91IGNhbiBzYXZlIHNvbWUgQ1BVIHRpbWVcbiAqIGJ5IGNhbGxpbmcgY2xvbmUob2JqLCBmYWxzZSkuXG4gKlxuICogQ2F1dGlvbjogaWYgYGNpcmN1bGFyYCBpcyBmYWxzZSBhbmQgYHBhcmVudGAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcbiAqIHlvdXIgcHJvZ3JhbSBtYXkgZW50ZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgY3Jhc2guXG4gKlxuICogQHBhcmFtIGBwYXJlbnRgIC0gdGhlIG9iamVjdCB0byBiZSBjbG9uZWRcbiAqIEBwYXJhbSBgY2lyY3VsYXJgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG9iamVjdCB0byBiZSBjbG9uZWQgbWF5IGNvbnRhaW5cbiAqICAgIGNpcmN1bGFyIHJlZmVyZW5jZXMuIChvcHRpb25hbCAtIHRydWUgYnkgZGVmYXVsdClcbiAqIEBwYXJhbSBgZGVwdGhgIC0gc2V0IHRvIGEgbnVtYmVyIGlmIHRoZSBvYmplY3QgaXMgb25seSB0byBiZSBjbG9uZWQgdG9cbiAqICAgIGEgcGFydGljdWxhciBkZXB0aC4gKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gSW5maW5pdHkpXG4gKiBAcGFyYW0gYHByb3RvdHlwZWAgLSBzZXRzIHRoZSBwcm90b3R5cGUgdG8gYmUgdXNlZCB3aGVuIGNsb25pbmcgYW4gb2JqZWN0LlxuICogICAgKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gcGFyZW50IHByb3RvdHlwZSkuXG4gKiBAcGFyYW0gYGluY2x1ZGVOb25FbnVtZXJhYmxlYCAtIHNldCB0byB0cnVlIGlmIHRoZSBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gKiAgICBzaG91bGQgYmUgY2xvbmVkIGFzIHdlbGwuIE5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgb24gdGhlIHByb3RvdHlwZVxuICogICAgY2hhaW4gd2lsbCBiZSBpZ25vcmVkLiAob3B0aW9uYWwgLSBmYWxzZSBieSBkZWZhdWx0KVxuKi9cbmZ1bmN0aW9uIGNsb25lKHBhcmVudCwgY2lyY3VsYXIsIGRlcHRoLCBwcm90b3R5cGUsIGluY2x1ZGVOb25FbnVtZXJhYmxlKSB7XG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT09ICdvYmplY3QnKSB7XG4gICAgZGVwdGggPSBjaXJjdWxhci5kZXB0aDtcbiAgICBwcm90b3R5cGUgPSBjaXJjdWxhci5wcm90b3R5cGU7XG4gICAgaW5jbHVkZU5vbkVudW1lcmFibGUgPSBjaXJjdWxhci5pbmNsdWRlTm9uRW51bWVyYWJsZTtcbiAgICBjaXJjdWxhciA9IGNpcmN1bGFyLmNpcmN1bGFyO1xuICB9XG4gIC8vIG1haW50YWluIHR3byBhcnJheXMgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMsIHdoZXJlIGNvcnJlc3BvbmRpbmcgcGFyZW50c1xuICAvLyBhbmQgY2hpbGRyZW4gaGF2ZSB0aGUgc2FtZSBpbmRleFxuICB2YXIgYWxsUGFyZW50cyA9IFtdO1xuICB2YXIgYWxsQ2hpbGRyZW4gPSBbXTtcblxuICB2YXIgdXNlQnVmZmVyID0gdHlwZW9mIEJ1ZmZlciAhPSAndW5kZWZpbmVkJztcblxuICBpZiAodHlwZW9mIGNpcmN1bGFyID09ICd1bmRlZmluZWQnKVxuICAgIGNpcmN1bGFyID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGRlcHRoID09ICd1bmRlZmluZWQnKVxuICAgIGRlcHRoID0gSW5maW5pdHk7XG5cbiAgLy8gcmVjdXJzZSB0aGlzIGZ1bmN0aW9uIHNvIHdlIGRvbid0IHJlc2V0IGFsbFBhcmVudHMgYW5kIGFsbENoaWxkcmVuXG4gIGZ1bmN0aW9uIF9jbG9uZShwYXJlbnQsIGRlcHRoKSB7XG4gICAgLy8gY2xvbmluZyBudWxsIGFsd2F5cyByZXR1cm5zIG51bGxcbiAgICBpZiAocGFyZW50ID09PSBudWxsKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoZGVwdGggPT09IDApXG4gICAgICByZXR1cm4gcGFyZW50O1xuXG4gICAgdmFyIGNoaWxkO1xuICAgIHZhciBwcm90bztcbiAgICBpZiAodHlwZW9mIHBhcmVudCAhPSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVNYXApKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVNYXAoKTtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlU2V0KCk7XG4gICAgfSBlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZVByb21pc2UpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcGFyZW50LnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXNvbHZlKF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgIHJlamVjdChfY2xvbmUoZXJyLCBkZXB0aCAtIDEpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IFtdO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc1JlZ0V4cChwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX19nZXRSZWdFeHBGbGFncyhwYXJlbnQpKTtcbiAgICAgIGlmIChwYXJlbnQubGFzdEluZGV4KSBjaGlsZC5sYXN0SW5kZXggPSBwYXJlbnQubGFzdEluZGV4O1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0RhdGUocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgQnVmZmVyKHBhcmVudC5sZW5ndGgpO1xuICAgICAgcGFyZW50LmNvcHkoY2hpbGQpO1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBFcnJvcikpIHtcbiAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJlbnQpO1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuICAgICAgICBwcm90byA9IHByb3RvdHlwZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2lyY3VsYXIpIHtcbiAgICAgIHZhciBpbmRleCA9IGFsbFBhcmVudHMuaW5kZXhPZihwYXJlbnQpO1xuXG4gICAgICBpZiAoaW5kZXggIT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGFsbENoaWxkcmVuW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIGFsbFBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgICAgYWxsQ2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfVxuXG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlTWFwKSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICB2YXIga2V5Q2hpbGQgPSBfY2xvbmUoa2V5LCBkZXB0aCAtIDEpO1xuICAgICAgICB2YXIgdmFsdWVDaGlsZCA9IF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKTtcbiAgICAgICAgY2hpbGQuc2V0KGtleUNoaWxkLCB2YWx1ZUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVTZXQpKSB7XG4gICAgICBwYXJlbnQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgZW50cnlDaGlsZCA9IF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKTtcbiAgICAgICAgY2hpbGQuYWRkKGVudHJ5Q2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSBpbiBwYXJlbnQpIHtcbiAgICAgIHZhciBhdHRycztcbiAgICAgIGlmIChwcm90bykge1xuICAgICAgICBhdHRycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXR0cnMgJiYgYXR0cnMuc2V0ID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjaGlsZFtpXSA9IF9jbG9uZShwYXJlbnRbaV0sIGRlcHRoIC0gMSk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhwYXJlbnQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIERvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgY2xvbmluZyBhIHN5bWJvbCBiZWNhdXNlIGl0IGlzIGEgcHJpbWl0aXZlLFxuICAgICAgICAvLyBsaWtlIGEgbnVtYmVyIG9yIHN0cmluZy5cbiAgICAgICAgdmFyIHN5bWJvbCA9IHN5bWJvbHNbaV07XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIHN5bWJvbCk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmVudW1lcmFibGUgJiYgIWluY2x1ZGVOb25FbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbc3ltYm9sXSA9IF9jbG9uZShwYXJlbnRbc3ltYm9sXSwgZGVwdGggLSAxKTtcbiAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hpbGQsIHN5bWJvbCwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgdmFyIGFsbFByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwYXJlbnQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0eU5hbWVzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZFtwcm9wZXJ0eU5hbWVdID0gX2Nsb25lKHBhcmVudFtwcm9wZXJ0eU5hbWVdLCBkZXB0aCAtIDEpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hpbGQsIHByb3BlcnR5TmFtZSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHJldHVybiBfY2xvbmUocGFyZW50LCBkZXB0aCk7XG59XG5cbi8qKlxuICogU2ltcGxlIGZsYXQgY2xvbmUgdXNpbmcgcHJvdG90eXBlLCBhY2NlcHRzIG9ubHkgb2JqZWN0cywgdXNlZnVsbCBmb3IgcHJvcGVydHlcbiAqIG92ZXJyaWRlIG9uIEZMQVQgY29uZmlndXJhdGlvbiBvYmplY3QgKG5vIG5lc3RlZCBwcm9wcykuXG4gKlxuICogVVNFIFdJVEggQ0FVVElPTiEgVGhpcyBtYXkgbm90IGJlaGF2ZSBhcyB5b3Ugd2lzaCBpZiB5b3UgZG8gbm90IGtub3cgaG93IHRoaXNcbiAqIHdvcmtzLlxuICovXG5jbG9uZS5jbG9uZVByb3RvdHlwZSA9IGZ1bmN0aW9uIGNsb25lUHJvdG90eXBlKHBhcmVudCkge1xuICBpZiAocGFyZW50ID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHZhciBjID0gZnVuY3Rpb24gKCkge307XG4gIGMucHJvdG90eXBlID0gcGFyZW50O1xuICByZXR1cm4gbmV3IGMoKTtcbn07XG5cbi8vIHByaXZhdGUgdXRpbGl0eSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gX19vYmpUb1N0cihvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5jbG9uZS5fX29ialRvU3RyID0gX19vYmpUb1N0cjtcblxuZnVuY3Rpb24gX19pc0RhdGUobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmNsb25lLl9faXNEYXRlID0gX19pc0RhdGU7XG5cbmZ1bmN0aW9uIF9faXNBcnJheShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cbmNsb25lLl9faXNBcnJheSA9IF9faXNBcnJheTtcblxuZnVuY3Rpb24gX19pc1JlZ0V4cChvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5jbG9uZS5fX2lzUmVnRXhwID0gX19pc1JlZ0V4cDtcblxuZnVuY3Rpb24gX19nZXRSZWdFeHBGbGFncyhyZSkge1xuICB2YXIgZmxhZ3MgPSAnJztcbiAgaWYgKHJlLmdsb2JhbCkgZmxhZ3MgKz0gJ2cnO1xuICBpZiAocmUuaWdub3JlQ2FzZSkgZmxhZ3MgKz0gJ2knO1xuICBpZiAocmUubXVsdGlsaW5lKSBmbGFncyArPSAnbSc7XG4gIHJldHVybiBmbGFncztcbn1cbmNsb25lLl9fZ2V0UmVnRXhwRmxhZ3MgPSBfX2dldFJlZ0V4cEZsYWdzO1xuXG5yZXR1cm4gY2xvbmU7XG59KSgpO1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jbG9uZS9jbG9uZS5qc1xuLy8gbW9kdWxlIGlkID0gMTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5lbnRyaWVzO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2VudHJpZXMuanNcbi8vIG1vZHVsZSBpZCA9IDE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9MZW5ndGggID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCB0b0luZGV4ICAgPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihJU19JTkNMVURFUyl7XG4gIHJldHVybiBmdW5jdGlvbigkdGhpcywgZWwsIGZyb21JbmRleCl7XG4gICAgdmFyIE8gICAgICA9IHRvSU9iamVjdCgkdGhpcylcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IHRvSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpXG4gICAgICAsIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICBpZihJU19JTkNMVURFUyAmJiBlbCAhPSBlbCl3aGlsZShsZW5ndGggPiBpbmRleCl7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICBpZih2YWx1ZSAhPSB2YWx1ZSlyZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSN0b0luZGV4IGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvcig7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspaWYoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTyl7XG4gICAgICBpZihPW2luZGV4XSA9PT0gZWwpcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzXG4vLyBtb2R1bGUgaWQgPSAxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZ2xvYmFsICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBjdHggICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIGhpZGUgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHNvdXJjZSl7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GXG4gICAgLCBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HXG4gICAgLCBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TXG4gICAgLCBJU19QUk9UTyAgPSB0eXBlICYgJGV4cG9ydC5QXG4gICAgLCBJU19CSU5EICAgPSB0eXBlICYgJGV4cG9ydC5CXG4gICAgLCBJU19XUkFQICAgPSB0eXBlICYgJGV4cG9ydC5XXG4gICAgLCBleHBvcnRzICAgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KVxuICAgICwgZXhwUHJvdG8gID0gZXhwb3J0c1tQUk9UT1RZUEVdXG4gICAgLCB0YXJnZXQgICAgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdXG4gICAgLCBrZXksIG93biwgb3V0O1xuICBpZihJU19HTE9CQUwpc291cmNlID0gbmFtZTtcbiAgZm9yKGtleSBpbiBzb3VyY2Upe1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgaWYob3duICYmIGtleSBpbiBleHBvcnRzKWNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24oQyl7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uKGEsIGIsIGMpe1xuICAgICAgICBpZih0aGlzIGluc3RhbmNlb2YgQyl7XG4gICAgICAgICAgc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEM7XG4gICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQyhhKTtcbiAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDKGEsIGIpO1xuICAgICAgICAgIH0gcmV0dXJuIG5ldyBDKGEsIGIsIGMpO1xuICAgICAgICB9IHJldHVybiBDLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgRltQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdO1xuICAgICAgcmV0dXJuIEY7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgfSkob3V0KSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5tZXRob2RzLiVOQU1FJVxuICAgIGlmKElTX1BST1RPKXtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZih0eXBlICYgJGV4cG9ydC5SICYmIGV4cFByb3RvICYmICFleHBQcm90b1trZXldKWhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgIFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzXG4vLyBtb2R1bGUgaWQgPSAyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsICA9IE1hdGguY2VpbFxuICAsIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAyMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShcIkZpdmVCZWxsc0NvbmRpdGlvblwiLFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuRml2ZUJlbGxzQ29uZGl0aW9uPWUoKTp0LkZpdmVCZWxsc0NvbmRpdGlvbj1lKCl9KHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtpZihyW25dKXJldHVybiByW25dLmV4cG9ydHM7dmFyIGk9cltuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbbl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsZSksaS5sPSEwLGkuZXhwb3J0c312YXIgcj17fTtyZXR1cm4gZS5tPXQsZS5jPXIsZS5pPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxlLmQ9ZnVuY3Rpb24odCxlLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpyfSl9LGUubj1mdW5jdGlvbih0KXt2YXIgcj10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gZS5kKHIsXCJhXCIscikscn0sZS5vPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSxlLnA9XCJcIixlKGUucz02MTMpfShbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1yKDMyKSxvPXIoMTQpLGE9cigxNSksZj1yKDMzKSxzPVwicHJvdG90eXBlXCIsdT1mdW5jdGlvbih0LGUscil7dmFyIGgsYyxkLGwscD10JnUuRixiPXQmdS5HLHY9dCZ1LlMseT10JnUuUCxtPXQmdS5CLGc9Yj9uOnY/bltlXXx8KG5bZV09e30pOihuW2VdfHx7fSlbc10sdz1iP2k6aVtlXXx8KGlbZV09e30pLF89d1tzXXx8KHdbc109e30pO2ImJihyPWUpO2ZvcihoIGluIHIpYz0hcCYmZyYmdm9pZCAwIT09Z1toXSxkPShjP2c6cilbaF0sbD1tJiZjP2YoZCxuKTp5JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBkP2YoRnVuY3Rpb24uY2FsbCxkKTpkLGcmJmEoZyxoLGQsdCZ1LlUpLHdbaF0hPWQmJm8odyxoLGwpLHkmJl9baF0hPWQmJihfW2hdPWQpfTtuLmNvcmU9aSx1LkY9MSx1Lkc9Mix1LlM9NCx1LlA9OCx1LkI9MTYsdS5XPTMyLHUuVT02NCx1LlI9MTI4LHQuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gaSgpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gdC5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PXQuZm9vKCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuc3ViYXJyYXkmJjA9PT10LnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaCh0KXtyZXR1cm4hMX19ZnVuY3Rpb24gbygpe3JldHVybiB0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIGEoZSxyKXtpZihvKCk8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoXCIpO3JldHVybiB0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkociksZS5fX3Byb3RvX189dC5wcm90b3R5cGUpOihudWxsPT09ZSYmKGU9bmV3IHQocikpLGUubGVuZ3RoPXIpLGV9ZnVuY3Rpb24gdChlLHIsbil7aWYoISh0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSxyLG4pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoXCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZ1wiKTtyZXR1cm4gaCh0aGlzLGUpfXJldHVybiBmKHRoaXMsZSxyLG4pfWZ1bmN0aW9uIGYodCxlLHIsbil7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/bCh0LGUscixuKTpcInN0cmluZ1wiPT10eXBlb2YgZT9jKHQsZSxyKTpwKHQsZSl9ZnVuY3Rpb24gcyh0KXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIHUodCxlLHIsbil7cmV0dXJuIHMoZSksZTw9MD9hKHQsZSk6dm9pZCAwIT09cj9cInN0cmluZ1wiPT10eXBlb2Ygbj9hKHQsZSkuZmlsbChyLG4pOmEodCxlKS5maWxsKHIpOmEodCxlKX1mdW5jdGlvbiBoKGUscil7aWYocyhyKSxlPWEoZSxyPDA/MDowfGIocikpLCF0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBuPTA7bjxyOysrbillW25dPTA7cmV0dXJuIGV9ZnVuY3Rpb24gYyhlLHIsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4mJlwiXCIhPT1ufHwobj1cInV0ZjhcIiksIXQuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciBpPTB8eShyLG4pO2U9YShlLGkpO3ZhciBvPWUud3JpdGUocixuKTtyZXR1cm4gbyE9PWkmJihlPWUuc2xpY2UoMCxvKSksZX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9ZS5sZW5ndGg8MD8wOjB8YihlLmxlbmd0aCk7dD1hKHQscik7Zm9yKHZhciBuPTA7bjxyO24rPTEpdFtuXT0yNTUmZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBsKGUscixuLGkpe2lmKHIuYnl0ZUxlbmd0aCxuPDB8fHIuYnl0ZUxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihyLmJ5dGVMZW5ndGg8bisoaXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzXCIpO3JldHVybiByPXZvaWQgMD09PW4mJnZvaWQgMD09PWk/bmV3IFVpbnQ4QXJyYXkocik6dm9pZCAwPT09aT9uZXcgVWludDhBcnJheShyLG4pOm5ldyBVaW50OEFycmF5KHIsbixpKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9cixlLl9fcHJvdG9fXz10LnByb3RvdHlwZSk6ZT1kKGUsciksZX1mdW5jdGlvbiBwKGUscil7aWYodC5pc0J1ZmZlcihyKSl7dmFyIG49MHxiKHIubGVuZ3RoKTtyZXR1cm4gZT1hKGUsbiksMD09PWUubGVuZ3RoP2U6KHIuY29weShlLDAsMCxuKSxlKX1pZihyKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJnIuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fFwibGVuZ3RoXCJpbiByKXJldHVyblwibnVtYmVyXCIhPXR5cGVvZiByLmxlbmd0aHx8WihyLmxlbmd0aCk/YShlLDApOmQoZSxyKTtpZihcIkJ1ZmZlclwiPT09ci50eXBlJiZRKHIuZGF0YSkpcmV0dXJuIGQoZSxyLmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuXCIpfWZ1bmN0aW9uIGIodCl7aWYodD49bygpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK28oKS50b1N0cmluZygxNikrXCIgYnl0ZXNcIik7cmV0dXJuIDB8dH1mdW5jdGlvbiB2KGUpe3JldHVybitlIT1lJiYoZT0wKSx0LmFsbG9jKCtlKX1mdW5jdGlvbiB5KGUscil7aWYodC5pc0J1ZmZlcihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDtcInN0cmluZ1wiIT10eXBlb2YgZSYmKGU9XCJcIitlKTt2YXIgbj1lLmxlbmd0aDtpZigwPT09bilyZXR1cm4gMDtmb3IodmFyIGk9ITE7Oylzd2l0Y2gocil7Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gbjtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlIHZvaWQgMDpyZXR1cm4gVihlKS5sZW5ndGg7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIDIqbjtjYXNlXCJoZXhcIjpyZXR1cm4gbj4+PjE7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIFkoZSkubGVuZ3RoO2RlZmF1bHQ6aWYoaSlyZXR1cm4gVihlKS5sZW5ndGg7cj0oXCJcIityKS50b0xvd2VyQ2FzZSgpLGk9ITB9fWZ1bmN0aW9uIG0odCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVyblwiXCI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm5cIlwiO2lmKHI+Pj49MCxlPj4+PTAscjw9ZSlyZXR1cm5cIlwiO2Zvcih0fHwodD1cInV0ZjhcIik7Oylzd2l0Y2godCl7Y2FzZVwiaGV4XCI6cmV0dXJuIFQodGhpcyxlLHIpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBCKHRoaXMsZSxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiBSKHRoaXMsZSxyKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gUCh0aGlzLGUscik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIEkodGhpcyxlLHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBqKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3QpO3Q9KHQrXCJcIikudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gdyhlLHIsbixpLG8pe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZihcInN0cmluZ1wiPT10eXBlb2Ygbj8oaT1uLG49MCk6bj4yMTQ3NDgzNjQ3P249MjE0NzQ4MzY0NzpuPC0yMTQ3NDgzNjQ4JiYobj0tMjE0NzQ4MzY0OCksbj0rbixpc05hTihuKSYmKG49bz8wOmUubGVuZ3RoLTEpLG48MCYmKG49ZS5sZW5ndGgrbiksbj49ZS5sZW5ndGgpe2lmKG8pcmV0dXJuLTE7bj1lLmxlbmd0aC0xfWVsc2UgaWYobjwwKXtpZighbylyZXR1cm4tMTtuPTB9aWYoXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPXQuZnJvbShyLGkpKSx0LmlzQnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5ndGg/LTE6XyhlLHIsbixpLG8pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiByKXJldHVybiByJj0yNTUsdC5UWVBFRF9BUlJBWV9TVVBQT1JUJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP28/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUscixuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUscixuKTpfKGUsW3JdLG4saSxvKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIF8odCxlLHIsbixpKXtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIDE9PT1hP3RbZV06dC5yZWFkVUludDE2QkUoZSphKX12YXIgYT0xLGY9dC5sZW5ndGgscz1lLmxlbmd0aDtpZih2b2lkIDAhPT1uJiYobj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSxcInVjczJcIj09PW58fFwidWNzLTJcIj09PW58fFwidXRmMTZsZVwiPT09bnx8XCJ1dGYtMTZsZVwiPT09bikpe2lmKHQubGVuZ3RoPDJ8fGUubGVuZ3RoPDIpcmV0dXJuLTE7YT0yLGYvPTIscy89MixyLz0yfXZhciB1O2lmKGkpe3ZhciBoPS0xO2Zvcih1PXI7dTxmO3UrKylpZihvKHQsdSk9PT1vKGUsaD09PS0xPzA6dS1oKSl7aWYoaD09PS0xJiYoaD11KSx1LWgrMT09PXMpcmV0dXJuIGgqYX1lbHNlIGghPT0tMSYmKHUtPXUtaCksaD0tMX1lbHNlIGZvcihyK3M+ZiYmKHI9Zi1zKSx1PXI7dT49MDt1LS0pe2Zvcih2YXIgYz0hMCxkPTA7ZDxzO2QrKylpZihvKHQsdStkKSE9PW8oZSxkKSl7Yz0hMTticmVha31pZihjKXJldHVybiB1fXJldHVybi0xfWZ1bmN0aW9uIE0odCxlLHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9dC5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSxuPmkmJihuPWkpKTpuPWk7dmFyIG89ZS5sZW5ndGg7aWYobyUyIT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nXCIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgYT0wO2E8bjsrK2Epe3ZhciBmPXBhcnNlSW50KGUuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4oZikpcmV0dXJuIGE7dFtyK2FdPWZ9cmV0dXJuIGF9ZnVuY3Rpb24gUyh0LGUscixuKXtyZXR1cm4gVyhWKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIEUodCxlLHIsbil7cmV0dXJuIFcoSChlKSx0LHIsbil9ZnVuY3Rpb24gQSh0LGUscixuKXtyZXR1cm4gRSh0LGUscixuKX1mdW5jdGlvbiBrKHQsZSxyLG4pe3JldHVybiBXKFkoZSksdCxyLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIFcoWChlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBJKHQsZSxyKXtyZXR1cm4gMD09PWUmJnI9PT10Lmxlbmd0aD9KLmZyb21CeXRlQXJyYXkodCk6Si5mcm9tQnl0ZUFycmF5KHQuc2xpY2UoZSxyKSl9ZnVuY3Rpb24gQih0LGUscil7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49W10saT1lO2k8cjspe3ZhciBvPXRbaV0sYT1udWxsLGY9bz4yMzk/NDpvPjIyMz8zOm8+MTkxPzI6MTtpZihpK2Y8PXIpe3ZhciBzLHUsaCxjO3N3aXRjaChmKXtjYXNlIDE6bzwxMjgmJihhPW8pO2JyZWFrO2Nhc2UgMjpzPXRbaSsxXSwxMjg9PT0oMTkyJnMpJiYoYz0oMzEmbyk8PDZ8NjMmcyxjPjEyNyYmKGE9YykpO2JyZWFrO2Nhc2UgMzpzPXRbaSsxXSx1PXRbaSsyXSwxMjg9PT0oMTkyJnMpJiYxMjg9PT0oMTkyJnUpJiYoYz0oMTUmbyk8PDEyfCg2MyZzKTw8Nnw2MyZ1LGM+MjA0NyYmKGM8NTUyOTZ8fGM+NTczNDMpJiYoYT1jKSk7YnJlYWs7Y2FzZSA0OnM9dFtpKzFdLHU9dFtpKzJdLGg9dFtpKzNdLDEyOD09PSgxOTImcykmJjEyOD09PSgxOTImdSkmJjEyOD09PSgxOTImaCkmJihjPSgxNSZvKTw8MTh8KDYzJnMpPDwxMnwoNjMmdSk8PDZ8NjMmaCxjPjY1NTM1JiZjPDExMTQxMTImJihhPWMpKX19bnVsbD09PWE/KGE9NjU1MzMsZj0xKTphPjY1NTM1JiYoYS09NjU1MzYsbi5wdXNoKGE+Pj4xMCYxMDIzfDU1Mjk2KSxhPTU2MzIwfDEwMjMmYSksbi5wdXNoKGEpLGkrPWZ9cmV0dXJuIE8obil9ZnVuY3Rpb24gTyh0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD10dClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7Zm9yKHZhciByPVwiXCIsbj0wO248ZTspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdC5zbGljZShuLG4rPXR0KSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUih0LGUscil7dmFyIG49XCJcIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gUCh0LGUscil7dmFyIG49XCJcIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgbj10Lmxlbmd0aDsoIWV8fGU8MCkmJihlPTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9XCJcIixvPWU7bzxyOysrbylpKz1HKHRbb10pO3JldHVybiBpfWZ1bmN0aW9uIGoodCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT1cIlwiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEModCxlLHIpe2lmKHQlMSE9PTB8fHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm9mZnNldCBpcyBub3QgdWludFwiKTtpZih0K2U+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGhcIil9ZnVuY3Rpb24gTihlLHIsbixpLG8sYSl7aWYoIXQuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYocj5vfHxyPGEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobitpPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIEwodCxlLHIsbil7ZTwwJiYoZT02NTUzNStlKzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4odC5sZW5ndGgtciwyKTtpPG87KytpKXRbcitpXT0oZSYyNTU8PDgqKG4/aToxLWkpKT4+PjgqKG4/aToxLWkpfWZ1bmN0aW9uIFUodCxlLHIsbil7ZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aC1yLDQpO2k8bzsrK2kpdFtyK2ldPWU+Pj44KihuP2k6My1pKSYyNTV9ZnVuY3Rpb24geih0LGUscixuLGksbyl7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBEKHQsZSxyLG4saSl7cmV0dXJuIGl8fHoodCxlLHIsNCwzLjQwMjgyMzQ2NjM4NTI4ODZlMzgsLTMuNDAyODIzNDY2Mzg1Mjg4NmUzOCksJC53cml0ZSh0LGUscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBxKHQsZSxyLG4saSl7cmV0dXJuIGl8fHoodCxlLHIsOCwxLjc5NzY5MzEzNDg2MjMxNTdlMzA4LC0xLjc5NzY5MzEzNDg2MjMxNTdlMzA4KSwkLndyaXRlKHQsZSxyLG4sNTIsOCkscis4fWZ1bmN0aW9uIEYodCl7aWYodD1LKHQpLnJlcGxhY2UoZXQsXCJcIiksdC5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7dC5sZW5ndGglNCE9PTA7KXQrPVwiPVwiO3JldHVybiB0fWZ1bmN0aW9uIEsodCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9ZnVuY3Rpb24gRyh0KXtyZXR1cm4gdDwxNj9cIjBcIit0LnRvU3RyaW5nKDE2KTp0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBWKHQsZSl7ZT1lfHwxLzA7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1udWxsLG89W10sYT0wO2E8bjsrK2Epe2lmKHI9dC5jaGFyQ29kZUF0KGEpLHI+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoYSsxPT09bil7KGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9KGktNTUyOTY8PDEwfHItNTYzMjApKzY1NTM2fWVsc2UgaSYmKGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKGUtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigoZS09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKGUtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb2RlIHBvaW50XCIpO2lmKChlLT00KTwwKWJyZWFrO28ucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gSCh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCgyNTUmdC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gZX1mdW5jdGlvbiBYKHQsZSl7Zm9yKHZhciByLG4saSxvPVtdLGE9MDthPHQubGVuZ3RoJiYhKChlLT0yKTwwKTsrK2Epcj10LmNoYXJDb2RlQXQoYSksbj1yPj44LGk9ciUyNTYsby5wdXNoKGkpLG8ucHVzaChuKTtyZXR1cm4gb31mdW5jdGlvbiBZKHQpe3JldHVybiBKLnRvQnl0ZUFycmF5KEYodCkpfWZ1bmN0aW9uIFcodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49ZS5sZW5ndGh8fGk+PXQubGVuZ3RoKTsrK2kpZVtpK3JdPXRbaV07cmV0dXJuIGl9ZnVuY3Rpb24gWih0KXtyZXR1cm4gdCE9PXR9dmFyIEo9cig0OTApLCQ9cig0OTEpLFE9cig0OTIpO2UuQnVmZmVyPXQsZS5TbG93QnVmZmVyPXYsZS5JTlNQRUNUX01BWF9CWVRFUz01MCx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09bi5UWVBFRF9BUlJBWV9TVVBQT1JUP24uVFlQRURfQVJSQVlfU1VQUE9SVDppKCksZS5rTWF4TGVuZ3RoPW8oKSx0LnBvb2xTaXplPTgxOTIsdC5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189dC5wcm90b3R5cGUsZX0sdC5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZihudWxsLHQsZSxyKX0sdC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYodC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLHQuX19wcm90b19fPVVpbnQ4QXJyYXksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJnRbU3ltYm9sLnNwZWNpZXNdPT09dCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfSkpLHQuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB1KG51bGwsdCxlLHIpfSx0LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiBoKG51bGwsdCl9LHQuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiBoKG51bGwsdCl9LHQuaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIShudWxsPT10fHwhdC5faXNCdWZmZXIpfSx0LmNvbXBhcmU9ZnVuY3Rpb24oZSxyKXtpZighdC5pc0J1ZmZlcihlKXx8IXQuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnNcIik7aWYoZT09PXIpcmV0dXJuIDA7Zm9yKHZhciBuPWUubGVuZ3RoLGk9ci5sZW5ndGgsbz0wLGE9TWF0aC5taW4obixpKTtvPGE7KytvKWlmKGVbb10hPT1yW29dKXtuPWVbb10saT1yW29dO2JyZWFrfXJldHVybiBuPGk/LTE6aTxuPzE6MH0sdC5pc0VuY29kaW5nPWZ1bmN0aW9uKHQpe3N3aXRjaChTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sdC5jb25jYXQ9ZnVuY3Rpb24oZSxyKXtpZighUShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQuYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09cilmb3Iocj0wLG49MDtuPGUubGVuZ3RoOysrbilyKz1lW25dLmxlbmd0aDt2YXIgaT10LmFsbG9jVW5zYWZlKHIpLG89MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXt2YXIgYT1lW25dO2lmKCF0LmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2EuY29weShpLG8pLG8rPWEubGVuZ3RofXJldHVybiBpfSx0LmJ5dGVMZW5ndGg9eSx0LnByb3RvdHlwZS5faXNCdWZmZXI9ITAsdC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCUyIT09MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzXCIpO2Zvcih2YXIgZT0wO2U8dDtlKz0yKWcodGhpcyxlLGUrMSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlNCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9NClnKHRoaXMsZSxlKzMpLGcodGhpcyxlKzEsZSsyKTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU4IT09MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO2Zvcih2YXIgZT0wO2U8dDtlKz04KWcodGhpcyxlLGUrNyksZyh0aGlzLGUrMSxlKzYpLGcodGhpcyxlKzIsZSs1KSxnKHRoaXMsZSszLGUrNCk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9CKHRoaXMsMCx0KTptLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCF0LmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09ZXx8MD09PXQuY29tcGFyZSh0aGlzLGUpfSx0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9XCJcIixyPWUuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJih0PXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLHIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oXCIgXCIpLHRoaXMubGVuZ3RoPnImJih0Kz1cIiAuLi4gXCIpKSxcIjxCdWZmZXIgXCIrdCtcIj5cIn0sdC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHIsbixpLG8pe2lmKCF0LmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO2lmKHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PW4mJihuPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09aSYmKGk9MCksdm9pZCAwPT09byYmKG89dGhpcy5sZW5ndGgpLHI8MHx8bj5lLmxlbmd0aHx8aTwwfHxvPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwib3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKGk+PW8mJnI+PW4pcmV0dXJuIDA7aWYoaT49bylyZXR1cm4tMTtpZihyPj1uKXJldHVybiAxO2lmKHI+Pj49MCxuPj4+PTAsaT4+Pj0wLG8+Pj49MCx0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIGE9by1pLGY9bi1yLHM9TWF0aC5taW4oYSxmKSx1PXRoaXMuc2xpY2UoaSxvKSxoPWUuc2xpY2UocixuKSxjPTA7YzxzOysrYylpZih1W2NdIT09aFtjXSl7YT11W2NdLGY9aFtjXTticmVha31yZXR1cm4gYTxmPy0xOmY8YT8xOjB9LHQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5pbmRleE9mKHQsZSxyKSE9PS0xfSx0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdyh0aGlzLHQsZSxyLCEwKX0sdC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB3KHRoaXMsdCxlLHIsITEpfSx0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT1lKW49XCJ1dGY4XCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiZcInN0cmluZ1wiPT10eXBlb2YgZSluPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZXtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIik7ZXw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj1cInV0ZjhcIikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLWU7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLHQubGVuZ3RoPjAmJihyPDB8fGU8MCl8fGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kc1wiKTtufHwobj1cInV0ZjhcIik7Zm9yKHZhciBvPSExOzspc3dpdGNoKG4pe2Nhc2VcImhleFwiOnJldHVybiBNKHRoaXMsdCxlLHIpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBTKHRoaXMsdCxlLHIpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIEUodGhpcyx0LGUscik7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIEEodGhpcyx0LGUscik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIGsodGhpcyx0LGUscik7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIHgodGhpcyx0LGUscik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIituKTtuPShcIlwiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiQnVmZmVyXCIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgdHQ9NDA5Njt0LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO2U9fn5lLHI9dm9pZCAwPT09cj9uOn5+cixlPDA/KGUrPW4sZTwwJiYoZT0wKSk6ZT5uJiYoZT1uKSxyPDA/KHIrPW4scjwwJiYocj0wKSk6cj5uJiYocj1uKSxyPGUmJihyPWUpO3ZhciBpO2lmKHQuVFlQRURfQVJSQVlfU1VQUE9SVClpPXRoaXMuc3ViYXJyYXkoZSxyKSxpLl9fcHJvdG9fXz10LnByb3RvdHlwZTtlbHNle3ZhciBvPXItZTtpPW5ldyB0KG8sdm9pZCAwKTtmb3IodmFyIGE9MDthPG87KythKWlbYV09dGhpc1thK2VdfXJldHVybiBpfSx0LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0fD0wLGV8PTAscnx8Qyh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxvPTA7KytvPGUmJihpKj0yNTYpOyluKz10aGlzW3Qrb10qaTtyZXR1cm4gbn0sdC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LGUscil7dHw9MCxlfD0wLHJ8fEModCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0Ky0tZV0saT0xO2U+MCYmKGkqPTI1Nik7KW4rPXRoaXNbdCstLWVdKmk7cmV0dXJuIG59LHQucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0sdC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OH0sdC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdPDw4fHRoaXNbdCsxXX0sdC5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSx0LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdF0rKHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXSl9LHQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LGUscil7dHw9MCxlfD0wLHJ8fEModCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsbz0wOysrbzxlJiYoaSo9MjU2KTspbis9dGhpc1t0K29dKmk7cmV0dXJuIGkqPTEyOCxuPj1pJiYobi09TWF0aC5wb3coMiw4KmUpKSxufSx0LnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24odCxlLHIpe3R8PTAsZXw9MCxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPWUsaT0xLG89dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gaSo9MTI4LG8+PWkmJihvLT1NYXRoLnBvdygyLDgqZSkpLG99LHQucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0XT8oMjU1LXRoaXNbdF0rMSkqLTE6dGhpc1t0XX0sdC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odCxlKXtlfHxDKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0XXx0aGlzW3QrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LHQucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7ZXx8Qyh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx0LnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNnx0aGlzW3QrM108PDI0fSx0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XTw8MjR8dGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdfSx0LnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksJC5yZWFkKHRoaXMsdCwhMCwyMyw0KX0sdC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLCQucmVhZCh0aGlzLHQsITEsMjMsNCl9LHQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsOCx0aGlzLmxlbmd0aCksJC5yZWFkKHRoaXMsdCwhMCw1Miw4KX0sdC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw4LHRoaXMubGVuZ3RoKSwkLnJlYWQodGhpcyx0LCExLDUyLDgpfSx0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGV8PTAscnw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnIpLTE7Tih0aGlzLHQsZSxyLGksMCl9dmFyIG89MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0aGlzW2UrYV09dC9vJjI1NTtyZXR1cm4gZStyfSx0LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGV8PTAscnw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnIpLTE7Tih0aGlzLHQsZSxyLGksMCl9dmFyIG89ci0xLGE9MTtmb3IodGhpc1tlK29dPTI1NSZ0Oy0tbz49MCYmKGEqPTI1Nik7KXRoaXNbZStvXT10L2EmMjU1O3JldHVybiBlK3J9LHQucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwxLDI1NSwwKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbcl09MjU1JmUscisxfSx0LnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsMiw2NTUzNSwwKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09MjU1JmUsdGhpc1tyKzFdPWU+Pj44KTpMKHRoaXMsZSxyLCEwKSxyKzJ9LHQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwyLDY1NTM1LDApLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT1lPj4+OCx0aGlzW3IrMV09MjU1JmUpOkwodGhpcyxlLHIsITEpLHIrMn0sdC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDQsNDI5NDk2NzI5NSwwKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbciszXT1lPj4+MjQsdGhpc1tyKzJdPWU+Pj4xNix0aGlzW3IrMV09ZT4+PjgsdGhpc1tyXT0yNTUmZSk6VSh0aGlzLGUsciwhMCkscis0fSx0LnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsNCw0Mjk0OTY3Mjk1LDApLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT1lPj4+MjQsdGhpc1tyKzFdPWU+Pj4xNix0aGlzW3IrMl09ZT4+PjgsdGhpc1tyKzNdPTI1NSZlKTpVKHRoaXMsZSxyLCExKSxyKzR9LHQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlfD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgbz0wLGE9MSxmPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KytvPHImJihhKj0yNTYpOyl0PDAmJjA9PT1mJiYwIT09dGhpc1tlK28tMV0mJihmPTEpLHRoaXNbZStvXT0odC9hPj4wKS1mJjI1NTtyZXR1cm4gZStyfSx0LnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZXw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIG89ci0xLGE9MSxmPTA7Zm9yKHRoaXNbZStvXT0yNTUmdDstLW8+PTAmJihhKj0yNTYpOyl0PDAmJjA9PT1mJiYwIT09dGhpc1tlK28rMV0mJihmPTEpLHRoaXNbZStvXT0odC9hPj4wKS1mJjI1NTtyZXR1cm4gZStyfSx0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwxLDEyNywtMTI4KSx0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1tyXT0yNTUmZSxyKzF9LHQucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDIsMzI3NjcsLTMyNzY4KSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09MjU1JmUsdGhpc1tyKzFdPWU+Pj44KTpMKHRoaXMsZSxyLCEwKSxyKzJ9LHQucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDIsMzI3NjcsLTMyNzY4KSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09ZT4+PjgsdGhpc1tyKzFdPTI1NSZlKTpMKHRoaXMsZSxyLCExKSxyKzJ9LHQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPTI1NSZlLHRoaXNbcisxXT1lPj4+OCx0aGlzW3IrMl09ZT4+PjE2LHRoaXNbciszXT1lPj4+MjQpOlUodGhpcyxlLHIsITApLHIrNH0sdC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09ZT4+PjI0LHRoaXNbcisxXT1lPj4+MTYsdGhpc1tyKzJdPWU+Pj44LHRoaXNbciszXT0yNTUmZSk6VSh0aGlzLGUsciwhMSkscis0fSx0LnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBEKHRoaXMsdCxlLCEwLHIpfSx0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBEKHRoaXMsdCxlLCExLHIpfSx0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcSh0aGlzLHQsZSwhMCxyKX0sdC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHEodGhpcyx0LGUsITEscil9LHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSxyLG4saSl7aWYobnx8KG49MCksaXx8MD09PWl8fChpPXRoaXMubGVuZ3RoKSxyPj1lLmxlbmd0aCYmKHI9ZS5sZW5ndGgpLHJ8fChyPTApLGk+MCYmaTxuJiYoaT1uKSxpPT09bilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKG48MHx8bj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGk8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO2k+dGhpcy5sZW5ndGgmJihpPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC1yPGktbiYmKGk9ZS5sZW5ndGgtcituKTt2YXIgbyxhPWktbjtpZih0aGlzPT09ZSYmbjxyJiZyPGkpZm9yKG89YS0xO28+PTA7LS1vKWVbbytyXT10aGlzW28rbl07ZWxzZSBpZihhPDFlM3x8IXQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3Iobz0wO288YTsrK28pZVtvK3JdPXRoaXNbbytuXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShuLG4rYSkscik7cmV0dXJuIGF9LHQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSxyLG4saSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiByPyhpPXIscj0wLG49dGhpcy5sZW5ndGgpOlwic3RyaW5nXCI9PXR5cGVvZiBuJiYoaT1uLG49dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIG89ZS5jaGFyQ29kZUF0KDApO288MjU2JiYoZT1vKX1pZih2b2lkIDAhPT1pJiZcInN0cmluZ1wiIT10eXBlb2YgaSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmIXQuaXNFbmNvZGluZyhpKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIraSl9ZWxzZVwibnVtYmVyXCI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZihyPDB8fHRoaXMubGVuZ3RoPHJ8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJPdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYobjw9cilyZXR1cm4gdGhpcztyPj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApO3ZhciBhO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKWZvcihhPXI7YTxuOysrYSl0aGlzW2FdPWU7ZWxzZXt2YXIgZj10LmlzQnVmZmVyKGUpP2U6VihuZXcgdChlLGkpLnRvU3RyaW5nKCkpLHM9Zi5sZW5ndGg7Zm9yKGE9MDthPG4tcjsrK2EpdGhpc1thK3JdPWZbYSVzXX1yZXR1cm4gdGhpc307dmFyIGV0PS9bXitcXC8wLTlBLVphLXotX10vZ30pLmNhbGwoZSxyKDEpLkJ1ZmZlcixyKDM5KSl9LGZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT90LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTp0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4NykoXCJ3a3NcIiksaT1yKDQ4KSxvPXIoNCkuU3ltYm9sLGE9XCJmdW5jdGlvblwiPT10eXBlb2YgbyxmPXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XXx8KG5bdF09YSYmb1t0XXx8KGE/bzppKShcIlN5bWJvbC5cIit0KSl9O2Yuc3RvcmU9bn0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz0hcig1KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMyksaT1yKDE3NCksbz1yKDI5KSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmY9cig4KT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLHIpe2lmKG4odCksZT1vKGUsITApLG4ociksaSl0cnl7cmV0dXJuIGEodCxlLHIpfWNhdGNoKHQpe31pZihcImdldFwiaW4gcnx8XCJzZXRcImluIHIpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIHImJih0W2VdPXIudmFsdWUpLHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzOCksaT1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9pKG4odCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChuKHQpKX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuY2FsbCh0LGUpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig5KSxpPXIoMzcpO3QuZXhwb3J0cz1yKDgpP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbi5mKHQsZSxpKDEscikpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cix0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1yKDE0KSxvPXIoMTIpLGE9cig0OCkoXCJzcmNcIiksZj1cInRvU3RyaW5nXCIscz1GdW5jdGlvbltmXSx1PShcIlwiK3MpLnNwbGl0KGYpO3IoMzIpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FsbCh0KX0sKHQuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXt2YXIgcz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByO3MmJihvKHIsXCJuYW1lXCIpfHxpKHIsXCJuYW1lXCIsZSkpLHRbZV0hPT1yJiYocyYmKG8ocixhKXx8aShyLGEsdFtlXT9cIlwiK3RbZV06dS5qb2luKFN0cmluZyhlKSkpKSx0PT09bj90W2VdPXI6Zj90W2VdP3RbZV09cjppKHQsZSxyKTooZGVsZXRlIHRbZV0saSh0LGUscikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxmLGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcyYmdGhpc1thXXx8cy5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cig1KSxvPXIoMjQpLGE9L1wiL2csZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1TdHJpbmcobyh0KSksZj1cIjxcIitlO3JldHVyblwiXCIhPT1yJiYoZis9XCIgXCIrcisnPVwiJytTdHJpbmcobikucmVwbGFjZShhLFwiJnF1b3Q7XCIpKydcIicpLGYrXCI+XCIraStcIjwvXCIrZStcIj5cIn07dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307clt0XT1lKGYpLG4obi5QK24uRippKGZ1bmN0aW9uKCl7dmFyIGU9XCJcIlt0XSgnXCInKTtyZXR1cm4gZSE9PWUudG9Mb3dlckNhc2UoKXx8ZS5zcGxpdCgnXCInKS5sZW5ndGg+M30pLFwiU3RyaW5nXCIscil9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2NSksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4oaSh0KSl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiBvLmlzQk4odCk/dDoodGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsdm9pZChudWxsIT09dCYmKFwibGVcIiE9PWUmJlwiYmVcIiE9PWV8fChyPWUsZT0xMCksdGhpcy5faW5pdCh0fHwwLGV8fDEwLHJ8fFwiYmVcIikpKSl9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxpO28rKyl7dmFyIGE9dC5jaGFyQ29kZUF0KG8pLTQ4O248PD00LG58PWE+PTQ5JiZhPD01ND9hLTQ5KzEwOmE+PTE3JiZhPD0yMj9hLTE3KzEwOjE1JmF9cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPG87YSsrKXt2YXIgZj10LmNoYXJDb2RlQXQoYSktNDg7aSo9bixpKz1mPj00OT9mLTQ5KzEwOmY+PTE3P2YtMTcrMTA6Zn1yZXR1cm4gaX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfWZ1bmN0aW9uIHUodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxvPTB8ZS53b3Jkc1swXSxhPWkqbyxmPTY3MTA4ODYzJmEscz1hLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1mO2Zvcih2YXIgdT0xO3U8bjt1Kyspe2Zvcih2YXIgaD1zPj4+MjYsYz02NzEwODg2MyZzLGQ9TWF0aC5taW4odSxlLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsdS10Lmxlbmd0aCsxKTtsPD1kO2wrKyl7dmFyIHA9dS1sfDA7aT0wfHQud29yZHNbcF0sbz0wfGUud29yZHNbbF0sYT1pKm8rYyxoKz1hLzY3MTA4ODY0fDAsYz02NzEwODg2MyZhfXIud29yZHNbdV09MHxjLHM9MHxofXJldHVybiAwIT09cz9yLndvcmRzW3VdPTB8czpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBoKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsbz0wO288ci5sZW5ndGgtMTtvKyspe3ZhciBhPWk7aT0wO2Zvcih2YXIgZj02NzEwODg2MyZuLHM9TWF0aC5taW4obyxlLmxlbmd0aC0xKSx1PU1hdGgubWF4KDAsby10Lmxlbmd0aCsxKTt1PD1zO3UrKyl7dmFyIGg9by11LGM9MHx0LndvcmRzW2hdLGQ9MHxlLndvcmRzW3VdLGw9YypkLHA9NjcxMDg4NjMmbDthPWErKGwvNjcxMDg4NjR8MCl8MCxwPXArZnwwLGY9NjcxMDg4NjMmcCxhPWErKHA+Pj4yNil8MCxpKz1hPj4+MjYsYSY9NjcxMDg4NjN9ci53b3Jkc1tvXT1mLG49YSxhPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbb109bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1uZXcgZDtyZXR1cm4gbi5tdWxwKHQsZSxyKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZnVuY3Rpb24gbCh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgbyhlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgbygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gcCgpe2wuY2FsbCh0aGlzLFwiazI1NlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIil9ZnVuY3Rpb24gYigpe2wuY2FsbCh0aGlzLFwicDIyNFwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIil9ZnVuY3Rpb24gdigpe2wuY2FsbCh0aGlzLFwicDE5MlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIil9ZnVuY3Rpb24geSgpe2wuY2FsbCh0aGlzLFwiMjU1MTlcIixcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIil9ZnVuY3Rpb24gbSh0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9by5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLFwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxXCIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBnKHQpe20uY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBvKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVwib2JqZWN0XCI9PXR5cGVvZiB0P3QuZXhwb3J0cz1vOmUuQk49byxvLkJOPW8sby53b3JkU2l6ZT0yNjt2YXIgdzt0cnl7dz1yKDEpLkJ1ZmZlcn1jYXRjaCh0KXt9by5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygb3x8bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09by53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sby5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LG8ubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpO1wiaGV4XCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KSx0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIik7dmFyIGk9MDtcIi1cIj09PXRbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLFwiLVwiPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIG8sYSxmPTA7aWYoXCJiZVwiPT09cilmb3IoaT10Lmxlbmd0aC0xLG89MDtpPj0wO2ktPTMpYT10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtlbHNlIGlmKFwibGVcIj09PXIpZm9yKGk9MCxvPTA7aTx0Lmxlbmd0aDtpKz0zKWE9dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksbz0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPWEodCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMsbys9MjQsbz49MjYmJihvLT0yNixuKyspO3IrNiE9PWUmJihpPWEodCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBvPXQubGVuZ3RoLXIsYT1vJW4scz1NYXRoLm1pbihvLG8tYSkrcix1PTAsaD1yO2g8cztoKz1uKXU9Zih0LGgsaCtuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PWEpe3ZhciBjPTE7Zm9yKHU9Zih0LGgsdC5sZW5ndGgsZSksaD0wO2g8YTtoKyspYyo9ZTt0aGlzLmltdWxuKGMpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0sby5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LG8ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sby5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIF89W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLE09WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sUz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe3Q9dHx8MTAsZT0wfGV8fDE7dmFyIHI7aWYoMTY9PT10fHxcImhleFwiPT09dCl7cj1cIlwiO2Zvcih2YXIgaT0wLG89MCxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPXRoaXMud29yZHNbYV0scz0oMTY3NzcyMTUmKGY8PGl8bykpLnRvU3RyaW5nKDE2KTtvPWY+Pj4yNC1pJjE2Nzc3MjE1LHI9MCE9PW98fGEhPT10aGlzLmxlbmd0aC0xP19bNi1zLmxlbmd0aF0rcytyOnMrcixpKz0yLGk+PTI2JiYoaS09MjYsYS0tKX1mb3IoMCE9PW8mJihyPW8udG9TdHJpbmcoMTYpK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciB1PU1bdF0saD1TW3RdO3I9XCJcIjt2YXIgYz10aGlzLmNsb25lKCk7Zm9yKGMubmVnYXRpdmU9MDshYy5pc1plcm8oKTspe3ZhciBkPWMubW9kbihoKS50b1N0cmluZyh0KTtjPWMuaWRpdm4oaCkscj1jLmlzWmVybygpP2QrcjpfW3UtZC5sZW5ndGhdK2Qrcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9bighMSxcIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzZcIil9LG8ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSxcIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0c1wiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LG8ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHcpLHRoaXMudG9BcnJheUxpa2Uodyx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sby5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLG89cnx8TWF0aC5tYXgoMSxpKTtuKGk8PW8sXCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoXCIpLG4obz4wLFwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwXCIpLHRoaXMuc3RyaXAoKTt2YXIgYSxmLHM9XCJsZVwiPT09ZSx1PW5ldyB0KG8pLGg9dGhpcy5jbG9uZSgpO2lmKHMpe2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbZl09YTtmb3IoO2Y8bztmKyspdVtmXT0wfWVsc2V7Zm9yKGY9MDtmPG8taTtmKyspdVtmXT0wO2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLFxuaC5pdXNocm4oOCksdVtvLWYtMV09YX1yZXR1cm4gdX0sTWF0aC5jbHozMj9vLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTpvLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0sby5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09PSgxJmUpJiZyKysscn0sby5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxlPXRoaXMuX2NvdW50Qml0cyh0KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2V9LG8ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbZV0pO2lmKHQrPXIsMjYhPT1yKWJyZWFrfXJldHVybiB0fSxvLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxvLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXN0bih0LTEpP3RoaXMubm90bih0KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LG8ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LG8ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMud29yZHNbZV09dGhpcy53b3Jkc1tlXXx0LndvcmRzW2VdO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0sby5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0sby5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0sby5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LG8ucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LG8ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LG8ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih0KX0sby5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0sby5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHQpOnQuY2xvbmUoKS5pdXhvcih0aGlzKX0sby5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxvLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIHI9dC8yNnwwLGk9dCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksZT90aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3ZhciByLG47dGhpcy5sZW5ndGg+dC5sZW5ndGg/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGk9MCxvPTA7bzxuLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKSsoMHxuLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtmb3IoOzAhPT1pJiZvPHIubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odC5uZWdhdGl2ZT0wLGU9dGhpcy5zdWIodCksdC5uZWdhdGl2ZV49MSxlKTowPT09dC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxlPXQuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxlKTp0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh0KTp0LmNsb25lKCkuaWFkZCh0aGlzKX0sby5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0KXtpZigwIT09dC5uZWdhdGl2ZSl7dC5uZWdhdGl2ZT0wO3ZhciBlPXRoaXMuaWFkZCh0KTtyZXR1cm4gdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHI9dGhpcy5jbXAodCk7aWYoMD09PXIpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3ZhciBuLGk7cj4wPyhuPXRoaXMsaT10KToobj10LGk9dGhpcyk7Zm9yKHZhciBvPTAsYT0wO2E8aS5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSktKDB8aS53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtmb3IoOzAhPT1vJiZhPG4ubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7aWYoMD09PW8mJmE8bi5sZW5ndGgmJm4hPT10aGlzKWZvcig7YTxuLmxlbmd0aDthKyspdGhpcy53b3Jkc1thXT1uLndvcmRzW2FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxhKSxuIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgRT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGE9dC53b3JkcyxmPWUud29yZHMscz1yLndvcmRzLHU9MCxoPTB8YVswXSxjPTgxOTEmaCxkPWg+Pj4xMyxsPTB8YVsxXSxwPTgxOTEmbCxiPWw+Pj4xMyx2PTB8YVsyXSx5PTgxOTEmdixtPXY+Pj4xMyxnPTB8YVszXSx3PTgxOTEmZyxfPWc+Pj4xMyxNPTB8YVs0XSxTPTgxOTEmTSxFPU0+Pj4xMyxBPTB8YVs1XSxrPTgxOTEmQSx4PUE+Pj4xMyxJPTB8YVs2XSxCPTgxOTEmSSxPPUk+Pj4xMyxSPTB8YVs3XSxQPTgxOTEmUixUPVI+Pj4xMyxqPTB8YVs4XSxDPTgxOTEmaixOPWo+Pj4xMyxMPTB8YVs5XSxVPTgxOTEmTCx6PUw+Pj4xMyxEPTB8ZlswXSxxPTgxOTEmRCxGPUQ+Pj4xMyxLPTB8ZlsxXSxHPTgxOTEmSyxWPUs+Pj4xMyxIPTB8ZlsyXSxYPTgxOTEmSCxZPUg+Pj4xMyxXPTB8ZlszXSxaPTgxOTEmVyxKPVc+Pj4xMywkPTB8Zls0XSxRPTgxOTEmJCx0dD0kPj4+MTMsZXQ9MHxmWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfGZbNl0sb3Q9ODE5MSZpdCxhdD1pdD4+PjEzLGZ0PTB8Zls3XSxzdD04MTkxJmZ0LHV0PWZ0Pj4+MTMsaHQ9MHxmWzhdLGN0PTgxOTEmaHQsZHQ9aHQ+Pj4xMyxsdD0wfGZbOV0scHQ9ODE5MSZsdCxidD1sdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5LG49TWF0aC5pbXVsKGMscSksaT1NYXRoLmltdWwoYyxGKSxpPWkrTWF0aC5pbXVsKGQscSl8MCxvPU1hdGguaW11bChkLEYpO3ZhciB2dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwocCxxKSxpPU1hdGguaW11bChwLEYpLGk9aStNYXRoLmltdWwoYixxKXwwLG89TWF0aC5pbXVsKGIsRiksbj1uK01hdGguaW11bChjLEcpfDAsaT1pK01hdGguaW11bChjLFYpfDAsaT1pK01hdGguaW11bChkLEcpfDAsbz1vK01hdGguaW11bChkLFYpfDA7dmFyIHl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bCh5LHEpLGk9TWF0aC5pbXVsKHksRiksaT1pK01hdGguaW11bChtLHEpfDAsbz1NYXRoLmltdWwobSxGKSxuPW4rTWF0aC5pbXVsKHAsRyl8MCxpPWkrTWF0aC5pbXVsKHAsVil8MCxpPWkrTWF0aC5pbXVsKGIsRyl8MCxvPW8rTWF0aC5pbXVsKGIsVil8MCxuPW4rTWF0aC5pbXVsKGMsWCl8MCxpPWkrTWF0aC5pbXVsKGMsWSl8MCxpPWkrTWF0aC5pbXVsKGQsWCl8MCxvPW8rTWF0aC5pbXVsKGQsWSl8MDt2YXIgbXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHcscSksaT1NYXRoLmltdWwodyxGKSxpPWkrTWF0aC5pbXVsKF8scSl8MCxvPU1hdGguaW11bChfLEYpLG49bitNYXRoLmltdWwoeSxHKXwwLGk9aStNYXRoLmltdWwoeSxWKXwwLGk9aStNYXRoLmltdWwobSxHKXwwLG89bytNYXRoLmltdWwobSxWKXwwLG49bitNYXRoLmltdWwocCxYKXwwLGk9aStNYXRoLmltdWwocCxZKXwwLGk9aStNYXRoLmltdWwoYixYKXwwLG89bytNYXRoLmltdWwoYixZKXwwLG49bitNYXRoLmltdWwoYyxaKXwwLGk9aStNYXRoLmltdWwoYyxKKXwwLGk9aStNYXRoLmltdWwoZCxaKXwwLG89bytNYXRoLmltdWwoZCxKKXwwO3ZhciBndD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoZ3Q+Pj4yNil8MCxndCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUyxxKSxpPU1hdGguaW11bChTLEYpLGk9aStNYXRoLmltdWwoRSxxKXwwLG89TWF0aC5pbXVsKEUsRiksbj1uK01hdGguaW11bCh3LEcpfDAsaT1pK01hdGguaW11bCh3LFYpfDAsaT1pK01hdGguaW11bChfLEcpfDAsbz1vK01hdGguaW11bChfLFYpfDAsbj1uK01hdGguaW11bCh5LFgpfDAsaT1pK01hdGguaW11bCh5LFkpfDAsaT1pK01hdGguaW11bChtLFgpfDAsbz1vK01hdGguaW11bChtLFkpfDAsbj1uK01hdGguaW11bChwLFopfDAsaT1pK01hdGguaW11bChwLEopfDAsaT1pK01hdGguaW11bChiLFopfDAsbz1vK01hdGguaW11bChiLEopfDAsbj1uK01hdGguaW11bChjLFEpfDAsaT1pK01hdGguaW11bChjLHR0KXwwLGk9aStNYXRoLmltdWwoZCxRKXwwLG89bytNYXRoLmltdWwoZCx0dCl8MDt2YXIgd3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGsscSksaT1NYXRoLmltdWwoayxGKSxpPWkrTWF0aC5pbXVsKHgscSl8MCxvPU1hdGguaW11bCh4LEYpLG49bitNYXRoLmltdWwoUyxHKXwwLGk9aStNYXRoLmltdWwoUyxWKXwwLGk9aStNYXRoLmltdWwoRSxHKXwwLG89bytNYXRoLmltdWwoRSxWKXwwLG49bitNYXRoLmltdWwodyxYKXwwLGk9aStNYXRoLmltdWwodyxZKXwwLGk9aStNYXRoLmltdWwoXyxYKXwwLG89bytNYXRoLmltdWwoXyxZKXwwLG49bitNYXRoLmltdWwoeSxaKXwwLGk9aStNYXRoLmltdWwoeSxKKXwwLGk9aStNYXRoLmltdWwobSxaKXwwLG89bytNYXRoLmltdWwobSxKKXwwLG49bitNYXRoLmltdWwocCxRKXwwLGk9aStNYXRoLmltdWwocCx0dCl8MCxpPWkrTWF0aC5pbXVsKGIsUSl8MCxvPW8rTWF0aC5pbXVsKGIsdHQpfDAsbj1uK01hdGguaW11bChjLHJ0KXwwLGk9aStNYXRoLmltdWwoYyxudCl8MCxpPWkrTWF0aC5pbXVsKGQscnQpfDAsbz1vK01hdGguaW11bChkLG50KXwwO3ZhciBfdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixxKSxpPU1hdGguaW11bChCLEYpLGk9aStNYXRoLmltdWwoTyxxKXwwLG89TWF0aC5pbXVsKE8sRiksbj1uK01hdGguaW11bChrLEcpfDAsaT1pK01hdGguaW11bChrLFYpfDAsaT1pK01hdGguaW11bCh4LEcpfDAsbz1vK01hdGguaW11bCh4LFYpfDAsbj1uK01hdGguaW11bChTLFgpfDAsaT1pK01hdGguaW11bChTLFkpfDAsaT1pK01hdGguaW11bChFLFgpfDAsbz1vK01hdGguaW11bChFLFkpfDAsbj1uK01hdGguaW11bCh3LFopfDAsaT1pK01hdGguaW11bCh3LEopfDAsaT1pK01hdGguaW11bChfLFopfDAsbz1vK01hdGguaW11bChfLEopfDAsbj1uK01hdGguaW11bCh5LFEpfDAsaT1pK01hdGguaW11bCh5LHR0KXwwLGk9aStNYXRoLmltdWwobSxRKXwwLG89bytNYXRoLmltdWwobSx0dCl8MCxuPW4rTWF0aC5pbXVsKHAscnQpfDAsaT1pK01hdGguaW11bChwLG50KXwwLGk9aStNYXRoLmltdWwoYixydCl8MCxvPW8rTWF0aC5pbXVsKGIsbnQpfDAsbj1uK01hdGguaW11bChjLG90KXwwLGk9aStNYXRoLmltdWwoYyxhdCl8MCxpPWkrTWF0aC5pbXVsKGQsb3QpfDAsbz1vK01hdGguaW11bChkLGF0KXwwO3ZhciBNdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUCxxKSxpPU1hdGguaW11bChQLEYpLGk9aStNYXRoLmltdWwoVCxxKXwwLG89TWF0aC5pbXVsKFQsRiksbj1uK01hdGguaW11bChCLEcpfDAsaT1pK01hdGguaW11bChCLFYpfDAsaT1pK01hdGguaW11bChPLEcpfDAsbz1vK01hdGguaW11bChPLFYpfDAsbj1uK01hdGguaW11bChrLFgpfDAsaT1pK01hdGguaW11bChrLFkpfDAsaT1pK01hdGguaW11bCh4LFgpfDAsbz1vK01hdGguaW11bCh4LFkpfDAsbj1uK01hdGguaW11bChTLFopfDAsaT1pK01hdGguaW11bChTLEopfDAsaT1pK01hdGguaW11bChFLFopfDAsbz1vK01hdGguaW11bChFLEopfDAsbj1uK01hdGguaW11bCh3LFEpfDAsaT1pK01hdGguaW11bCh3LHR0KXwwLGk9aStNYXRoLmltdWwoXyxRKXwwLG89bytNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKHkscnQpfDAsaT1pK01hdGguaW11bCh5LG50KXwwLGk9aStNYXRoLmltdWwobSxydCl8MCxvPW8rTWF0aC5pbXVsKG0sbnQpfDAsbj1uK01hdGguaW11bChwLG90KXwwLGk9aStNYXRoLmltdWwocCxhdCl8MCxpPWkrTWF0aC5pbXVsKGIsb3QpfDAsbz1vK01hdGguaW11bChiLGF0KXwwLG49bitNYXRoLmltdWwoYyxzdCl8MCxpPWkrTWF0aC5pbXVsKGMsdXQpfDAsaT1pK01hdGguaW11bChkLHN0KXwwLG89bytNYXRoLmltdWwoZCx1dCl8MDt2YXIgU3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMscSksaT1NYXRoLmltdWwoQyxGKSxpPWkrTWF0aC5pbXVsKE4scSl8MCxvPU1hdGguaW11bChOLEYpLG49bitNYXRoLmltdWwoUCxHKXwwLGk9aStNYXRoLmltdWwoUCxWKXwwLGk9aStNYXRoLmltdWwoVCxHKXwwLG89bytNYXRoLmltdWwoVCxWKXwwLG49bitNYXRoLmltdWwoQixYKXwwLGk9aStNYXRoLmltdWwoQixZKXwwLGk9aStNYXRoLmltdWwoTyxYKXwwLG89bytNYXRoLmltdWwoTyxZKXwwLG49bitNYXRoLmltdWwoayxaKXwwLGk9aStNYXRoLmltdWwoayxKKXwwLGk9aStNYXRoLmltdWwoeCxaKXwwLG89bytNYXRoLmltdWwoeCxKKXwwLG49bitNYXRoLmltdWwoUyxRKXwwLGk9aStNYXRoLmltdWwoUyx0dCl8MCxpPWkrTWF0aC5pbXVsKEUsUSl8MCxvPW8rTWF0aC5pbXVsKEUsdHQpfDAsbj1uK01hdGguaW11bCh3LHJ0KXwwLGk9aStNYXRoLmltdWwodyxudCl8MCxpPWkrTWF0aC5pbXVsKF8scnQpfDAsbz1vK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwoeSxvdCl8MCxpPWkrTWF0aC5pbXVsKHksYXQpfDAsaT1pK01hdGguaW11bChtLG90KXwwLG89bytNYXRoLmltdWwobSxhdCl8MCxuPW4rTWF0aC5pbXVsKHAsc3QpfDAsaT1pK01hdGguaW11bChwLHV0KXwwLGk9aStNYXRoLmltdWwoYixzdCl8MCxvPW8rTWF0aC5pbXVsKGIsdXQpfDAsbj1uK01hdGguaW11bChjLGN0KXwwLGk9aStNYXRoLmltdWwoYyxkdCl8MCxpPWkrTWF0aC5pbXVsKGQsY3QpfDAsbz1vK01hdGguaW11bChkLGR0KXwwO3ZhciBFdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxxKSxpPU1hdGguaW11bChVLEYpLGk9aStNYXRoLmltdWwoeixxKXwwLG89TWF0aC5pbXVsKHosRiksbj1uK01hdGguaW11bChDLEcpfDAsaT1pK01hdGguaW11bChDLFYpfDAsaT1pK01hdGguaW11bChOLEcpfDAsbz1vK01hdGguaW11bChOLFYpfDAsbj1uK01hdGguaW11bChQLFgpfDAsaT1pK01hdGguaW11bChQLFkpfDAsaT1pK01hdGguaW11bChULFgpfDAsbz1vK01hdGguaW11bChULFkpfDAsbj1uK01hdGguaW11bChCLFopfDAsaT1pK01hdGguaW11bChCLEopfDAsaT1pK01hdGguaW11bChPLFopfDAsbz1vK01hdGguaW11bChPLEopfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT1pK01hdGguaW11bChrLHR0KXwwLGk9aStNYXRoLmltdWwoeCxRKXwwLG89bytNYXRoLmltdWwoeCx0dCl8MCxuPW4rTWF0aC5pbXVsKFMscnQpfDAsaT1pK01hdGguaW11bChTLG50KXwwLGk9aStNYXRoLmltdWwoRSxydCl8MCxvPW8rTWF0aC5pbXVsKEUsbnQpfDAsbj1uK01hdGguaW11bCh3LG90KXwwLGk9aStNYXRoLmltdWwodyxhdCl8MCxpPWkrTWF0aC5pbXVsKF8sb3QpfDAsbz1vK01hdGguaW11bChfLGF0KXwwLG49bitNYXRoLmltdWwoeSxzdCl8MCxpPWkrTWF0aC5pbXVsKHksdXQpfDAsaT1pK01hdGguaW11bChtLHN0KXwwLG89bytNYXRoLmltdWwobSx1dCl8MCxuPW4rTWF0aC5pbXVsKHAsY3QpfDAsaT1pK01hdGguaW11bChwLGR0KXwwLGk9aStNYXRoLmltdWwoYixjdCl8MCxvPW8rTWF0aC5pbXVsKGIsZHQpfDAsbj1uK01hdGguaW11bChjLHB0KXwwLGk9aStNYXRoLmltdWwoYyxidCl8MCxpPWkrTWF0aC5pbXVsKGQscHQpfDAsbz1vK01hdGguaW11bChkLGJ0KXwwO3ZhciBBdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxHKSxpPU1hdGguaW11bChVLFYpLGk9aStNYXRoLmltdWwoeixHKXwwLG89TWF0aC5pbXVsKHosViksbj1uK01hdGguaW11bChDLFgpfDAsaT1pK01hdGguaW11bChDLFkpfDAsaT1pK01hdGguaW11bChOLFgpfDAsbz1vK01hdGguaW11bChOLFkpfDAsbj1uK01hdGguaW11bChQLFopfDAsaT1pK01hdGguaW11bChQLEopfDAsaT1pK01hdGguaW11bChULFopfDAsbz1vK01hdGguaW11bChULEopfDAsbj1uK01hdGguaW11bChCLFEpfDAsaT1pK01hdGguaW11bChCLHR0KXwwLGk9aStNYXRoLmltdWwoTyxRKXwwLG89bytNYXRoLmltdWwoTyx0dCl8MCxuPW4rTWF0aC5pbXVsKGsscnQpfDAsaT1pK01hdGguaW11bChrLG50KXwwLGk9aStNYXRoLmltdWwoeCxydCl8MCxvPW8rTWF0aC5pbXVsKHgsbnQpfDAsbj1uK01hdGguaW11bChTLG90KXwwLGk9aStNYXRoLmltdWwoUyxhdCl8MCxpPWkrTWF0aC5pbXVsKEUsb3QpfDAsbz1vK01hdGguaW11bChFLGF0KXwwLG49bitNYXRoLmltdWwodyxzdCl8MCxpPWkrTWF0aC5pbXVsKHcsdXQpfDAsaT1pK01hdGguaW11bChfLHN0KXwwLG89bytNYXRoLmltdWwoXyx1dCl8MCxuPW4rTWF0aC5pbXVsKHksY3QpfDAsaT1pK01hdGguaW11bCh5LGR0KXwwLGk9aStNYXRoLmltdWwobSxjdCl8MCxvPW8rTWF0aC5pbXVsKG0sZHQpfDAsbj1uK01hdGguaW11bChwLHB0KXwwLGk9aStNYXRoLmltdWwocCxidCl8MCxpPWkrTWF0aC5pbXVsKGIscHQpfDAsbz1vK01hdGguaW11bChiLGJ0KXwwO3ZhciBrdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxYKSxpPU1hdGguaW11bChVLFkpLGk9aStNYXRoLmltdWwoeixYKXwwLG89TWF0aC5pbXVsKHosWSksbj1uK01hdGguaW11bChDLFopfDAsaT1pK01hdGguaW11bChDLEopfDAsaT1pK01hdGguaW11bChOLFopfDAsbz1vK01hdGguaW11bChOLEopfDAsbj1uK01hdGguaW11bChQLFEpfDAsaT1pK01hdGguaW11bChQLHR0KXwwLGk9aStNYXRoLmltdWwoVCxRKXwwLG89bytNYXRoLmltdWwoVCx0dCl8MCxuPW4rTWF0aC5pbXVsKEIscnQpfDAsaT1pK01hdGguaW11bChCLG50KXwwLGk9aStNYXRoLmltdWwoTyxydCl8MCxvPW8rTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChrLG90KXwwLGk9aStNYXRoLmltdWwoayxhdCl8MCxpPWkrTWF0aC5pbXVsKHgsb3QpfDAsbz1vK01hdGguaW11bCh4LGF0KXwwLG49bitNYXRoLmltdWwoUyxzdCl8MCxpPWkrTWF0aC5pbXVsKFMsdXQpfDAsaT1pK01hdGguaW11bChFLHN0KXwwLG89bytNYXRoLmltdWwoRSx1dCl8MCxuPW4rTWF0aC5pbXVsKHcsY3QpfDAsaT1pK01hdGguaW11bCh3LGR0KXwwLGk9aStNYXRoLmltdWwoXyxjdCl8MCxvPW8rTWF0aC5pbXVsKF8sZHQpfDAsbj1uK01hdGguaW11bCh5LHB0KXwwLGk9aStNYXRoLmltdWwoeSxidCl8MCxpPWkrTWF0aC5pbXVsKG0scHQpfDAsbz1vK01hdGguaW11bChtLGJ0KXwwO3ZhciB4dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxaKSxpPU1hdGguaW11bChVLEopLGk9aStNYXRoLmltdWwoeixaKXwwLG89TWF0aC5pbXVsKHosSiksbj1uK01hdGguaW11bChDLFEpfDAsaT1pK01hdGguaW11bChDLHR0KXwwLGk9aStNYXRoLmltdWwoTixRKXwwLG89bytNYXRoLmltdWwoTix0dCl8MCxuPW4rTWF0aC5pbXVsKFAscnQpfDAsaT1pK01hdGguaW11bChQLG50KXwwLGk9aStNYXRoLmltdWwoVCxydCl8MCxvPW8rTWF0aC5pbXVsKFQsbnQpfDAsbj1uK01hdGguaW11bChCLG90KXwwLGk9aStNYXRoLmltdWwoQixhdCl8MCxpPWkrTWF0aC5pbXVsKE8sb3QpfDAsbz1vK01hdGguaW11bChPLGF0KXwwLG49bitNYXRoLmltdWwoayxzdCl8MCxpPWkrTWF0aC5pbXVsKGssdXQpfDAsaT1pK01hdGguaW11bCh4LHN0KXwwLG89bytNYXRoLmltdWwoeCx1dCl8MCxuPW4rTWF0aC5pbXVsKFMsY3QpfDAsaT1pK01hdGguaW11bChTLGR0KXwwLGk9aStNYXRoLmltdWwoRSxjdCl8MCxvPW8rTWF0aC5pbXVsKEUsZHQpfDAsbj1uK01hdGguaW11bCh3LHB0KXwwLGk9aStNYXRoLmltdWwodyxidCl8MCxpPWkrTWF0aC5pbXVsKF8scHQpfDAsbz1vK01hdGguaW11bChfLGJ0KXwwO3ZhciBJdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxRKSxpPU1hdGguaW11bChVLHR0KSxpPWkrTWF0aC5pbXVsKHosUSl8MCxvPU1hdGguaW11bCh6LHR0KSxuPW4rTWF0aC5pbXVsKEMscnQpfDAsaT1pK01hdGguaW11bChDLG50KXwwLGk9aStNYXRoLmltdWwoTixydCl8MCxvPW8rTWF0aC5pbXVsKE4sbnQpfDAsbj1uK01hdGguaW11bChQLG90KXwwLGk9aStNYXRoLmltdWwoUCxhdCl8MCxpPWkrTWF0aC5pbXVsKFQsb3QpfDAsbz1vK01hdGguaW11bChULGF0KXwwLG49bitNYXRoLmltdWwoQixzdCl8MCxpPWkrTWF0aC5pbXVsKEIsdXQpfDAsaT1pK01hdGguaW11bChPLHN0KXwwLG89bytNYXRoLmltdWwoTyx1dCl8MCxuPW4rTWF0aC5pbXVsKGssY3QpfDAsaT1pK01hdGguaW11bChrLGR0KXwwLGk9aStNYXRoLmltdWwoeCxjdCl8MCxvPW8rTWF0aC5pbXVsKHgsZHQpfDAsbj1uK01hdGguaW11bChTLHB0KXwwLGk9aStNYXRoLmltdWwoUyxidCl8MCxpPWkrTWF0aC5pbXVsKEUscHQpfDAsbz1vK01hdGguaW11bChFLGJ0KXwwO3ZhciBCdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQnQ+Pj4yNil8MCxCdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxydCksaT1NYXRoLmltdWwoVSxudCksaT1pK01hdGguaW11bCh6LHJ0KXwwLG89TWF0aC5pbXVsKHosbnQpLG49bitNYXRoLmltdWwoQyxvdCl8MCxpPWkrTWF0aC5pbXVsKEMsYXQpfDAsaT1pK01hdGguaW11bChOLG90KXwwLG89bytNYXRoLmltdWwoTixhdCl8MCxuPW4rTWF0aC5pbXVsKFAsc3QpfDAsaT1pK01hdGguaW11bChQLHV0KXwwLGk9aStNYXRoLmltdWwoVCxzdCl8MCxvPW8rTWF0aC5pbXVsKFQsdXQpfDAsbj1uK01hdGguaW11bChCLGN0KXwwLGk9aStNYXRoLmltdWwoQixkdCl8MCxpPWkrTWF0aC5pbXVsKE8sY3QpfDAsbz1vK01hdGguaW11bChPLGR0KXwwLG49bitNYXRoLmltdWwoayxwdCl8MCxpPWkrTWF0aC5pbXVsKGssYnQpfDAsaT1pK01hdGguaW11bCh4LHB0KXwwLG89bytNYXRoLmltdWwoeCxidCl8MDt2YXIgT3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsb3QpLGk9TWF0aC5pbXVsKFUsYXQpLGk9aStNYXRoLmltdWwoeixvdCl8MCxvPU1hdGguaW11bCh6LGF0KSxuPW4rTWF0aC5pbXVsKEMsc3QpfDAsaT1pK01hdGguaW11bChDLHV0KXwwLGk9aStNYXRoLmltdWwoTixzdCl8MCxvPW8rTWF0aC5pbXVsKE4sdXQpfDAsbj1uK01hdGguaW11bChQLGN0KXwwLGk9aStNYXRoLmltdWwoUCxkdCl8MCxpPWkrTWF0aC5pbXVsKFQsY3QpfDAsbz1vK01hdGguaW11bChULGR0KXwwLG49bitNYXRoLmltdWwoQixwdCl8MCxpPWkrTWF0aC5pbXVsKEIsYnQpfDAsaT1pK01hdGguaW11bChPLHB0KXwwLG89bytNYXRoLmltdWwoTyxidCl8MDt2YXIgUnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFJ0Pj4+MjYpfDAsUnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsc3QpLGk9TWF0aC5pbXVsKFUsdXQpLGk9aStNYXRoLmltdWwoeixzdCl8MCxvPU1hdGguaW11bCh6LHV0KSxuPW4rTWF0aC5pbXVsKEMsY3QpfDAsaT1pK01hdGguaW11bChDLGR0KXwwLGk9aStNYXRoLmltdWwoTixjdCl8MCxvPW8rTWF0aC5pbXVsKE4sZHQpfDAsbj1uK01hdGguaW11bChQLHB0KXwwLGk9aStNYXRoLmltdWwoUCxidCl8MCxpPWkrTWF0aC5pbXVsKFQscHQpfDAsbz1vK01hdGguaW11bChULGJ0KXwwO3ZhciBQdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUHQ+Pj4yNil8MCxQdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxjdCksaT1NYXRoLmltdWwoVSxkdCksaT1pK01hdGguaW11bCh6LGN0KXwwLG89TWF0aC5pbXVsKHosZHQpLG49bitNYXRoLmltdWwoQyxwdCl8MCxpPWkrTWF0aC5pbXVsKEMsYnQpfDAsaT1pK01hdGguaW11bChOLHB0KXwwLG89bytNYXRoLmltdWwoTixidCl8MDt2YXIgVHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscHQpLGk9TWF0aC5pbXVsKFUsYnQpLGk9aStNYXRoLmltdWwoeixwdCl8MCxvPU1hdGguaW11bCh6LGJ0KTt2YXIganQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3JldHVybiB1PShvKyhpPj4+MTMpfDApKyhqdD4+PjI2KXwwLGp0Jj02NzEwODg2MyxzWzBdPXZ0LHNbMV09eXQsc1syXT1tdCxzWzNdPWd0LHNbNF09d3Qsc1s1XT1fdCxzWzZdPU10LHNbN109U3Qsc1s4XT1FdCxzWzldPUF0LHNbMTBdPWt0LHNbMTFdPXh0LHNbMTJdPUl0LHNbMTNdPUJ0LHNbMTRdPU90LHNbMTVdPVJ0LHNbMTZdPVB0LHNbMTddPVR0LHNbMThdPWp0LDAhPT11JiYoc1sxOV09dSxyLmxlbmd0aCsrKSxyfTtNYXRoLmltdWx8fChFPXUpLG8ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmxlbmd0aCt0Lmxlbmd0aDtyZXR1cm4gcj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP0UodGhpcyx0LGUpOm48NjM/dSh0aGlzLHQsZSk6bjwxMDI0P2godGhpcyx0LGUpOmModGhpcyx0LGUpfSxkLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj1vLnByb3RvdHlwZS5fY291bnRCaXRzKHQpLTEsbj0wO248dDtuKyspZVtuXT10aGlzLnJldkJpbihuLHIsdCk7cmV0dXJuIGV9LGQucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbih0LGUscil7aWYoMD09PXR8fHQ9PT1yLTEpcmV0dXJuIHQ7Zm9yKHZhciBuPTAsaT0wO2k8ZTtpKyspbnw9KDEmdCk8PGUtaS0xLHQ+Pj0xO3JldHVybiBufSxkLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXtmb3IodmFyIGE9MDthPG87YSsrKW5bYV09ZVt0W2FdXSxpW2FdPXJbdFthXV19LGQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUscixuLGksbyl7dGhpcy5wZXJtdXRlKG8sdCxlLHIsbixpKTtmb3IodmFyIGE9MTthPGk7YTw8PTEpZm9yKHZhciBmPWE8PDEscz1NYXRoLmNvcygyKk1hdGguUEkvZiksdT1NYXRoLnNpbigyKk1hdGguUEkvZiksaD0wO2g8aTtoKz1mKWZvcih2YXIgYz1zLGQ9dSxsPTA7bDxhO2wrKyl7dmFyIHA9cltoK2xdLGI9bltoK2xdLHY9cltoK2wrYV0seT1uW2grbCthXSxtPWMqdi1kKnk7eT1jKnkrZCp2LHY9bSxyW2grbF09cCt2LG5baCtsXT1iK3kscltoK2wrYV09cC12LG5baCtsK2FdPWIteSxsIT09ZiYmKG09cypjLXUqZCxkPXMqZCt1KmMsYz1tKX19LGQucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MXxNYXRoLm1heChlLHQpLG49MSZyLGk9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStufSxkLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgaT10W25dO3Rbbl09dFtyLW4tMV0sdFtyLW4tMV09aSxpPWVbbl0sZVtuXT0tZVtyLW4tMV0sZVtyLW4tMV09LWl9fSxkLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTA7bjxlLzI7bisrKXt2YXIgaT04MTkyKk1hdGgucm91bmQodFsyKm4rMV0vZSkrTWF0aC5yb3VuZCh0WzIqbl0vZSkrcjt0W25dPTY3MTA4ODYzJmkscj1pPDY3MTA4ODY0PzA6aS82NzEwODg2NHwwfXJldHVybiB0fSxkLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgbz0wLGE9MDthPGU7YSsrKW8rPTB8dFthXSxyWzIqYV09ODE5MSZvLG8+Pj49MTMsclsyKmErMV09ODE5MSZvLG8+Pj49MTM7Zm9yKGE9MiplO2E8aTsrK2EpclthXT0wO24oMD09PW8pLG4oMD09PShvJi04MTkyKSl9LGQucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGQucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksbz10aGlzLnN0dWIobiksYT1uZXcgQXJyYXkobiksZj1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksaD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksZD1yLndvcmRzO2QubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsYSxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCx1LG4pLHRoaXMudHJhbnNmb3JtKGEsbyxmLHMsbixpKSx0aGlzLnRyYW5zZm9ybSh1LG8saCxjLG4saSk7Zm9yKHZhciBsPTA7bDxuO2wrKyl7dmFyIHA9ZltsXSpoW2xdLXNbbF0qY1tsXTtzW2xdPWZbbF0qY1tsXStzW2xdKmhbbF0sZltsXT1wfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShmLHMsbiksdGhpcy50cmFuc2Zvcm0oZixzLGQsbyxuLGkpLHRoaXMuY29uanVnYXRlKGQsbyxuKSx0aGlzLm5vcm1hbGl6ZTEzYihkLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sby5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxvLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksYyh0aGlzLHQsZSl9LG8ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxvLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxvPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1vPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZvfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LG8ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sby5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sby5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPXModCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgbygxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxvLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsbz02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBhPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy53b3Jkc1tlXSZvLHM9KDB8dGhpcy53b3Jkc1tlXSktZjw8cjt0aGlzLndvcmRzW2VdPXN8YSxhPWY+Pj4yNi1yfWEmJih0aGlzLndvcmRzW2VdPWEsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LG8ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGk7aT1lPyhlLWUlMjYpLzI2OjA7dmFyIG89dCUyNixhPU1hdGgubWluKCh0LW8pLzI2LHRoaXMubGVuZ3RoKSxmPTY3MTA4ODYzXjY3MTA4ODYzPj4+bzw8byxzPXI7aWYoaS09YSxpPU1hdGgubWF4KDAsaSkscyl7Zm9yKHZhciB1PTA7dTxhO3UrKylzLndvcmRzW3VdPXRoaXMud29yZHNbdV07cy5sZW5ndGg9YX1pZigwPT09YSk7ZWxzZSBpZih0aGlzLmxlbmd0aD5hKWZvcih0aGlzLmxlbmd0aC09YSx1PTA7dTx0aGlzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3UrYV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgaD0wO2Zvcih1PXRoaXMubGVuZ3RoLTE7dT49MCYmKDAhPT1ofHx1Pj1pKTt1LS0pe3ZhciBjPTB8dGhpcy53b3Jkc1t1XTt0aGlzLndvcmRzW3VdPWg8PDI2LW98Yz4+Pm8saD1jJmZ9cmV0dXJuIHMmJjAhPT1oJiYocy53b3Jkc1tzLmxlbmd0aCsrXT1oKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sby5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxvLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sby5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxvLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sby5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4hMTt2YXIgbz10aGlzLndvcmRzW3JdO3JldHVybiEhKG8maSl9LG8ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSxcImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVyc1wiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sby5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwP3RoaXMuaXN1Ym4oLXQpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8dD8odGhpcy53b3Jkc1swXT10LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxvLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30sby5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYobihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxvLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LG8ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LG8ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxvLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIGEsZj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStmO3ZhciBzPSgwfHQud29yZHNbaV0pKmU7YS09NjcxMDg4NjMmcyxmPShhPj4yNiktKHMvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKWE9KDB8dGhpcy53b3Jkc1tpK3JdKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PWYpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobihmPT09LTEpLGY9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspYT0tKDB8dGhpcy53b3Jkc1tpXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aC10Lmxlbmd0aCxuPXRoaXMuY2xvbmUoKSxpPXQsYT0wfGkud29yZHNbaS5sZW5ndGgtMV0sZj10aGlzLl9jb3VudEJpdHMoYSk7cj0yNi1mLDAhPT1yJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyx1PW4ubGVuZ3RoLWkubGVuZ3RoO2lmKFwibW9kXCIhPT1lKXtzPW5ldyBvKG51bGwpLHMubGVuZ3RoPXUrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspcy53b3Jkc1toXT0wfXZhciBjPW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLHUpOzA9PT1jLm5lZ2F0aXZlJiYobj1jLHMmJihzLndvcmRzW3VdPTEpKTtmb3IodmFyIGQ9dS0xO2Q+PTA7ZC0tKXt2YXIgbD02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2RdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2QtMV0pO2ZvcihsPU1hdGgubWluKGwvYXwwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGwsZCk7MCE9PW4ubmVnYXRpdmU7KWwtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGQpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1tkXT1sKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSxcImRpdlwiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LG8ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7aWYobighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKSlyZXR1cm57ZGl2Om5ldyBvKDApLG1vZDpuZXcgbygwKX07dmFyIGksYSxmO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KGY9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pYWRkKHQpKSx7ZGl2OmksbW9kOmF9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmU/KGY9dGhpcy5kaXZtb2QodC5uZWcoKSxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6Zi5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KGY9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaXN1Yih0KSkse2RpdjpmLmRpdixtb2Q6YX0pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IG8oMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD9cImRpdlwiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06XCJtb2RcIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpfSxvLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJkaXZcIiwhMSkuZGl2fSxvLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMSkubW9kfSxvLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITApLm1vZH0sby5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaXZtb2QodCk7aWYoZS5tb2QuaXNaZXJvKCkpcmV0dXJuIGUuZGl2O3ZhciByPTAhPT1lLmRpdi5uZWdhdGl2ZT9lLm1vZC5pc3ViKHQpOmUubW9kLG49dC51c2hybigxKSxpPXQuYW5kbG4oMSksbz1yLmNtcChuKTtyZXR1cm4gbzwwfHwxPT09aSYmMD09PW8/ZS5kaXY6MCE9PWUuZGl2Lm5lZ2F0aXZlP2UuZGl2LmlzdWJuKDEpOmUuZGl2LmlhZGRuKDEpfSxvLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0oMTw8MjYpJXQscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPShlKnIrKDB8dGhpcy53b3Jkc1tpXSkpJXQ7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqZTt0aGlzLndvcmRzW3JdPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0sby5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPW5ldyBvKDApLHM9bmV3IG8oMSksdT0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrdTtmb3IodmFyIGg9ci5jbG9uZSgpLGM9ZS5jbG9uZSgpOyFlLmlzWmVybygpOyl7Zm9yKHZhciBkPTAsbD0xOzA9PT0oZS53b3Jkc1swXSZsKSYmZDwyNjsrK2QsbDw8PTEpO2lmKGQ+MClmb3IoZS5pdXNocm4oZCk7ZC0tID4wOykoaS5pc09kZCgpfHxhLmlzT2RkKCkpJiYoaS5pYWRkKGgpLGEuaXN1YihjKSksaS5pdXNocm4oMSksYS5pdXNocm4oMSk7Zm9yKHZhciBwPTAsYj0xOzA9PT0oci53b3Jkc1swXSZiKSYmcDwyNjsrK3AsYjw8PTEpO2lmKHA+MClmb3Ioci5pdXNocm4ocCk7cC0tID4wOykoZi5pc09kZCgpfHxzLmlzT2RkKCkpJiYoZi5pYWRkKGgpLHMuaXN1YihjKSksZi5pdXNocm4oMSkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoZiksYS5pc3ViKHMpKTooci5pc3ViKGUpLGYuaXN1YihpKSxzLmlzdWIoYSkpfXJldHVybnthOmYsYjpzLGdjZDpyLml1c2hsbih1KX19LG8ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIHM9MCx1PTE7MD09PShlLndvcmRzWzBdJnUpJiZzPDI2Oysrcyx1PDw9MSk7aWYocz4wKWZvcihlLml1c2hybihzKTtzLS0gPjA7KWkuaXNPZGQoKSYmaS5pYWRkKGYpLGkuaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGM9MTswPT09KHIud29yZHNbMF0mYykmJmg8MjY7KytoLGM8PD0xKTtpZihoPjApZm9yKHIuaXVzaHJuKGgpO2gtLSA+MDspYS5pc09kZCgpJiZhLmlhZGQoZiksYS5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoYSkpOihyLmlzdWIoZSksYS5pc3ViKGkpKX12YXIgZDtyZXR1cm4gZD0wPT09ZS5jbXBuKDEpP2k6YSxkLmNtcG4oMCk8MCYmZC5pYWRkKHQpLGR9LG8ucHJvdG90eXBlLmdjZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB0LmFicygpO2lmKHQuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2UubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9ZS5jbXAocik7aWYoaTwwKXt2YXIgbz1lO2U9cixyPW99ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhaztlLmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxvLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVnY2QodCkuYS51bW9kKHQpfSxvLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LG8ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIG89aSxhPXI7MCE9PW8mJmE8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj0wfHRoaXMud29yZHNbYV07Zis9byxvPWY+Pj4yNixmJj02NzEwODg2Myx0aGlzLndvcmRzW2FdPWZ9cmV0dXJuIDAhPT1vJiYodGhpcy53b3Jkc1thXT1vLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxvLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmUpcmV0dXJuIDE7dGhpcy5zdHJpcCgpO3ZhciByO2lmKHRoaXMubGVuZ3RoPjEpcj0xO2Vsc2V7ZSYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsXCJOdW1iZXIgaXMgdG9vIGJpZ1wiKTt2YXIgaT0wfHRoaXMud29yZHNbMF07cj1pPT09dD8wOmk8dD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yOnJ9LG8ucHJvdG90eXBlLmNtcD1mdW5jdGlvbih0KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBlPXRoaXMudWNtcCh0KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxvLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPnQubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHx0LndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0sby5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5ndD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wKHQpfSxvLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk+PTB9LG8ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk+PTB9LG8ucHJvdG90eXBlLmx0bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT09PS0xfSxvLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LG8ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LG8ucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sby5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtKHQpfSxvLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLG4oMD09PXRoaXMubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LG8ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxvLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxvLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCxcInJlZFBvdyhub3JtYWxOdW0pXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgQT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2wucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LGwucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2RvIHRoaXMuc3BsaXQocix0aGlzLnRtcCkscj10aGlzLmltdWxLKHIpLHI9ci5pYWRkKHRoaXMudG1wKSxlPXIuYml0TGVuZ3RoKCk7d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sbC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sbC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHAsbCkscC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDE5NDMwMyxuPU1hdGgubWluKHQubGVuZ3RoLDkpLGk9MDtpPG47aSsrKWUud29yZHNbaV09dC53b3Jkc1tpXTtpZihlLmxlbmd0aD1uLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgbz10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPW8mcixpPTEwO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT0wfHQud29yZHNbaV07dC53b3Jkc1tpLTEwXT0oYSZyKTw8NHxvPj4+MjIsbz1hfW8+Pj49MjIsdC53b3Jkc1tpLTEwXT1vLDA9PT1vJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHAucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saShiLGwpLGkodixsKSxpKHksbCkseS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxvLl9wcmltZT1mdW5jdGlvbiB0KGUpe2lmKEFbZV0pcmV0dXJuIEFbZV07dmFyIHQ7aWYoXCJrMjU2XCI9PT1lKXQ9bmV3IHA7ZWxzZSBpZihcInAyMjRcIj09PWUpdD1uZXcgYjtlbHNlIGlmKFwicDE5MlwiPT09ZSl0PW5ldyB2O2Vsc2V7aWYoXCJwMjU1MTlcIiE9PWUpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwcmltZSBcIitlKTt0PW5ldyB5fXJldHVybiBBW2VdPXQsdH0sbS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih0LGUpe24oMD09PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCYmdC5yZWQ9PT1lLnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO1xucmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sbS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LG0ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sbS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sbS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxtLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgbygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxhPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylhKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIGY9bmV3IG8oMSkudG9SZWQodGhpcykscz1mLnJlZE5lZygpLHU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGg9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihoPW5ldyBvKDIqaCpoKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coaCx1KS5jbXAocyk7KWgucmVkSUFkZChzKTtmb3IodmFyIGM9dGhpcy5wb3coaCxpKSxkPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSksbD10aGlzLnBvdyh0LGkpLHA9YTswIT09bC5jbXAoZik7KXtmb3IodmFyIGI9bCx2PTA7MCE9PWIuY21wKGYpO3YrKyliPWIucmVkU3FyKCk7bih2PHApO3ZhciB5PXRoaXMucG93KGMsbmV3IG8oMSkuaXVzaGxuKHAtdi0xKSk7ZD1kLnJlZE11bCh5KSxjPXkucmVkU3FyKCksbD1sLnJlZE11bChjKSxwPXZ9cmV0dXJuIGR9LG0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0sbS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMSk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPTQsbj1uZXcgQXJyYXkoMTw8cik7blswXT1uZXcgbygxKS50b1JlZCh0aGlzKSxuWzFdPXQ7Zm9yKHZhciBpPTI7aTxuLmxlbmd0aDtpKyspbltpXT10aGlzLm11bChuW2ktMV0sdCk7dmFyIGE9blswXSxmPTAscz0wLHU9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXUmJih1PTI2KSxpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2Zvcih2YXIgaD1lLndvcmRzW2ldLGM9dS0xO2M+PTA7Yy0tKXt2YXIgZD1oPj5jJjE7YSE9PW5bMF0mJihhPXRoaXMuc3FyKGEpKSwwIT09ZHx8MCE9PWY/KGY8PD0xLGZ8PWQscysrLChzPT09cnx8MD09PWkmJjA9PT1jKSYmKGE9dGhpcy5tdWwoYSxuW2ZdKSxzPTAsZj0wKSk6cz0wfXU9MjZ9cmV0dXJuIGF9LG0ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LG0ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxvLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnKHQpfSxpKGcsbSksZy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxnLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksbz1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP289aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihvPWkuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtyZXR1cm4gZS5fZm9yY2VSZWQodGhpcyl9fShcInVuZGVmaW5lZFwiPT10eXBlb2YgdHx8dCx0aGlzKX0pLmNhbGwoZSxyKDkyKSh0KSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lO24udmVyc2lvbj1yKDQ2NSkudmVyc2lvbixuLnV0aWxzPXIoNTIxKSxuLnJhbmQ9cig1MjIpLG4uaG1hY0RSQkc9cig1MTkpLG4uY3VydmU9cig5OSksbi5jdXJ2ZXM9cig1MTIpLG4uZWM9cig1MTMpLG4uZWRkc2E9cig1MTYpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2NiksaT1yKDM3KSxvPXIoMTcpLGE9cigyOSksZj1yKDEyKSxzPXIoMTc0KSx1PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7ZS5mPXIoOCk/dTpmdW5jdGlvbih0LGUpe2lmKHQ9byh0KSxlPWEoZSwhMCkscyl0cnl7cmV0dXJuIHUodCxlKX1jYXRjaCh0KXt9aWYoZih0LGUpKXJldHVybiBpKCFuLmYuY2FsbCh0LGUpLHRbZV0pfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTIpLGk9cigxMSksbz1yKDEzMykoXCJJRV9QUk9UT1wiKSxhPU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ9aSh0KSxuKHQsbyk/dFtvXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P2E6bnVsbH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lO24udmVyc2lvbj1yKDQ2NykudmVyc2lvbixuLnV0aWxzPXIoNTU4KSxuLnJhbmQ9cig1NTkpLG4uaG1hY0RSQkc9cig1NTYpLG4uY3VydmU9cigxMDQpLG4uY3VydmVzPXIoNTQ5KSxuLmVjPXIoNTUwKSxuLmVkZHNhPXIoNTUzKX0sZnVuY3Rpb24odCxlKXt2YXIgcj17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQmJm4oZnVuY3Rpb24oKXtlP3QuY2FsbChudWxsLGZ1bmN0aW9uKCl7fSwxKTp0LmNhbGwobnVsbCl9KX19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gbigpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBpKHQpe2lmKGg9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKGg9PT1yfHwhaCkmJnNldFRpbWVvdXQpcmV0dXJuIGg9c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBoKHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBoLmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiBoLmNhbGwodGhpcyx0LDApfX19ZnVuY3Rpb24gbyh0KXtpZihjPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGM9PT1ufHwhYykmJmNsZWFyVGltZW91dClyZXR1cm4gYz1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtyZXR1cm4gYyh0KX1jYXRjaChlKXt0cnl7cmV0dXJuIGMuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBjLmNhbGwodGhpcyx0KX19fWZ1bmN0aW9uIGEoKXtiJiZsJiYoYj0hMSxsLmxlbmd0aD9wPWwuY29uY2F0KHApOnY9LTEscC5sZW5ndGgmJmYoKSl9ZnVuY3Rpb24gZigpe2lmKCFiKXt2YXIgdD1pKGEpO2I9ITA7Zm9yKHZhciBlPXAubGVuZ3RoO2U7KXtmb3IobD1wLHA9W107Kyt2PGU7KWwmJmxbdl0ucnVuKCk7dj0tMSxlPXAubGVuZ3RofWw9bnVsbCxiPSExLG8odCl9fWZ1bmN0aW9uIHModCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiB1KCl7fXZhciBoLGMsZD10LmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e2g9XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnJ9Y2F0Y2godCl7aD1yfXRyeXtjPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6bn1jYXRjaCh0KXtjPW59fSgpO3ZhciBsLHA9W10sYj0hMSx2PS0xO2QubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTtwLnB1c2gobmV3IHModCxlKSksMSE9PXAubGVuZ3RofHxifHxpKGYpfSxzLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxkLnRpdGxlPVwiYnJvd3NlclwiLGQuYnJvd3Nlcj0hMCxkLmVudj17fSxkLmFyZ3Y9W10sZC52ZXJzaW9uPVwiXCIsZC52ZXJzaW9ucz17fSxkLm9uPXUsZC5hZGRMaXN0ZW5lcj11LGQub25jZT11LGQub2ZmPXUsZC5yZW1vdmVMaXN0ZW5lcj11LGQucmVtb3ZlQWxsTGlzdGVuZXJzPXUsZC5lbWl0PXUsZC5iaW5kaW5nPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxkLmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifSxkLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0sZC51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzMpLGk9cig2NSksbz1yKDExKSxhPXIoMTApLGY9cigyODMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTE9PXQscz0yPT10LHU9Mz09dCxoPTQ9PXQsYz02PT10LGQ9NT09dHx8YyxsPWV8fGY7cmV0dXJuIGZ1bmN0aW9uKGUsZixwKXtmb3IodmFyIGIsdix5PW8oZSksbT1pKHkpLGc9bihmLHAsMyksdz1hKG0ubGVuZ3RoKSxfPTAsTT1yP2woZSx3KTpzP2woZSwwKTp2b2lkIDA7dz5fO18rKylpZigoZHx8XyBpbiBtKSYmKGI9bVtfXSx2PWcoYixfLHkpLHQpKWlmKHIpTVtfXT12O2Vsc2UgaWYodilzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gYjtjYXNlIDY6cmV0dXJuIF87Y2FzZSAyOk0ucHVzaChiKX1lbHNlIGlmKGgpcmV0dXJuITE7cmV0dXJuIGM/LTE6dXx8aD9oOk19fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDMyKSxvPXIoNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KGkuT2JqZWN0fHx7fSlbdF18fE9iamVjdFt0XSxhPXt9O2FbdF09ZShyKSxuKG4uUytuLkYqbyhmdW5jdGlvbigpe3IoMSl9KSxcIk9iamVjdFwiLGEpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIW4odCkpcmV0dXJuIHQ7dmFyIHIsaTtpZihlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnZhbHVlT2YpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoIWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiBvLmlzQk4odCk/dDoodGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsdm9pZChudWxsIT09dCYmKFwibGVcIiE9PWUmJlwiYmVcIiE9PWV8fChyPWUsZT0xMCksdGhpcy5faW5pdCh0fHwwLGV8fDEwLHJ8fFwiYmVcIikpKSl9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxpO28rKyl7dmFyIGE9dC5jaGFyQ29kZUF0KG8pLTQ4O248PD00LG58PWE+PTQ5JiZhPD01ND9hLTQ5KzEwOmE+PTE3JiZhPD0yMj9hLTE3KzEwOjE1JmF9cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPG87YSsrKXt2YXIgZj10LmNoYXJDb2RlQXQoYSktNDg7aSo9bixpKz1mPj00OT9mLTQ5KzEwOmY+PTE3P2YtMTcrMTA6Zn1yZXR1cm4gaX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfWZ1bmN0aW9uIHUodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxvPTB8ZS53b3Jkc1swXSxhPWkqbyxmPTY3MTA4ODYzJmEscz1hLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1mO2Zvcih2YXIgdT0xO3U8bjt1Kyspe2Zvcih2YXIgaD1zPj4+MjYsYz02NzEwODg2MyZzLGQ9TWF0aC5taW4odSxlLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsdS10Lmxlbmd0aCsxKTtsPD1kO2wrKyl7dmFyIHA9dS1sfDA7aT0wfHQud29yZHNbcF0sbz0wfGUud29yZHNbbF0sYT1pKm8rYyxoKz1hLzY3MTA4ODY0fDAsYz02NzEwODg2MyZhfXIud29yZHNbdV09MHxjLHM9MHxofXJldHVybiAwIT09cz9yLndvcmRzW3VdPTB8czpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBoKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsbz0wO288ci5sZW5ndGgtMTtvKyspe3ZhciBhPWk7aT0wO2Zvcih2YXIgZj02NzEwODg2MyZuLHM9TWF0aC5taW4obyxlLmxlbmd0aC0xKSx1PU1hdGgubWF4KDAsby10Lmxlbmd0aCsxKTt1PD1zO3UrKyl7dmFyIGg9by11LGM9MHx0LndvcmRzW2hdLGQ9MHxlLndvcmRzW3VdLGw9YypkLHA9NjcxMDg4NjMmbDthPWErKGwvNjcxMDg4NjR8MCl8MCxwPXArZnwwLGY9NjcxMDg4NjMmcCxhPWErKHA+Pj4yNil8MCxpKz1hPj4+MjYsYSY9NjcxMDg4NjN9ci53b3Jkc1tvXT1mLG49YSxhPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbb109bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1uZXcgZDtyZXR1cm4gbi5tdWxwKHQsZSxyKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZnVuY3Rpb24gbCh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgbyhlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgbygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gcCgpe2wuY2FsbCh0aGlzLFwiazI1NlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIil9ZnVuY3Rpb24gYigpe2wuY2FsbCh0aGlzLFwicDIyNFwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIil9ZnVuY3Rpb24gdigpe2wuY2FsbCh0aGlzLFwicDE5MlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIil9ZnVuY3Rpb24geSgpe2wuY2FsbCh0aGlzLFwiMjU1MTlcIixcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIil9ZnVuY3Rpb24gbSh0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9by5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLFwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxXCIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBnKHQpe20uY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBvKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVwib2JqZWN0XCI9PXR5cGVvZiB0P3QuZXhwb3J0cz1vOmUuQk49byxvLkJOPW8sby53b3JkU2l6ZT0yNjt2YXIgdzt0cnl7dz1yKDEpLkJ1ZmZlcn1jYXRjaCh0KXt9by5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygb3x8bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09by53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sby5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LG8ubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpO1wiaGV4XCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KSx0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIik7dmFyIGk9MDtcIi1cIj09PXRbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLFwiLVwiPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIG8sYSxmPTA7aWYoXCJiZVwiPT09cilmb3IoaT10Lmxlbmd0aC0xLG89MDtpPj0wO2ktPTMpYT10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtlbHNlIGlmKFwibGVcIj09PXIpZm9yKGk9MCxvPTA7aTx0Lmxlbmd0aDtpKz0zKWE9dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksbz0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPWEodCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMsbys9MjQsbz49MjYmJihvLT0yNixuKyspO3IrNiE9PWUmJihpPWEodCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBvPXQubGVuZ3RoLXIsYT1vJW4scz1NYXRoLm1pbihvLG8tYSkrcix1PTAsaD1yO2g8cztoKz1uKXU9Zih0LGgsaCtuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PWEpe3ZhciBjPTE7Zm9yKHU9Zih0LGgsdC5sZW5ndGgsZSksaD0wO2g8YTtoKyspYyo9ZTt0aGlzLmltdWxuKGMpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0sby5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LG8ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sby5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIF89W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLE09WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sUz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe3Q9dHx8MTAsZT0wfGV8fDE7dmFyIHI7aWYoMTY9PT10fHxcImhleFwiPT09dCl7cj1cIlwiO2Zvcih2YXIgaT0wLG89MCxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPXRoaXMud29yZHNbYV0scz0oMTY3NzcyMTUmKGY8PGl8bykpLnRvU3RyaW5nKDE2KTtvPWY+Pj4yNC1pJjE2Nzc3MjE1LHI9MCE9PW98fGEhPT10aGlzLmxlbmd0aC0xP19bNi1zLmxlbmd0aF0rcytyOnMrcixpKz0yLGk+PTI2JiYoaS09MjYsYS0tKX1mb3IoMCE9PW8mJihyPW8udG9TdHJpbmcoMTYpK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciB1PU1bdF0saD1TW3RdO3I9XCJcIjt2YXIgYz10aGlzLmNsb25lKCk7Zm9yKGMubmVnYXRpdmU9MDshYy5pc1plcm8oKTspe3ZhciBkPWMubW9kbihoKS50b1N0cmluZyh0KTtjPWMuaWRpdm4oaCkscj1jLmlzWmVybygpP2QrcjpfW3UtZC5sZW5ndGhdK2Qrcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9bighMSxcIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzZcIil9LG8ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSxcIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0c1wiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LG8ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHcpLHRoaXMudG9BcnJheUxpa2Uodyx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sby5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLG89cnx8TWF0aC5tYXgoMSxpKTtuKGk8PW8sXCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoXCIpLG4obz4wLFwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwXCIpLHRoaXMuc3RyaXAoKTt2YXIgYSxmLHM9XCJsZVwiPT09ZSx1PW5ldyB0KG8pLGg9dGhpcy5jbG9uZSgpO2lmKHMpe2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbZl09YTtmb3IoO2Y8bztmKyspdVtmXT0wfWVsc2V7Zm9yKGY9MDtmPG8taTtmKyspdVtmXT0wO2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbby1mLTFdPWF9cmV0dXJuIHV9LE1hdGguY2x6MzI/by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LG8ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PT0oMSZlKSYmcisrLHJ9LG8ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxvLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sby5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sby5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LG8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxvLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxvLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LG8ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LG8ucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LG8ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1YW5kKHQpfSxvLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxvLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodCk6dC5jbG9uZSgpLml1YW5kKHRoaXMpfSxvLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LG8ucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LG8ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LG8ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sby5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLGU/dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt2YXIgcixuO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsbz0wO288bi5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkrKDB8bi53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmbzxyLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LG8ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByPXRoaXMuY21wKHQpO2lmKDA9PT1yKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt2YXIgbixpO3I+MD8obj10aGlzLGk9dCk6KG49dCxpPXRoaXMpO2Zvcih2YXIgbz0wLGE9MDthPGkubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pLSgwfGkud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7Zm9yKDswIT09byYmYTxuLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2lmKDA9PT1vJiZhPG4ubGVuZ3RoJiZuIT09dGhpcylmb3IoO2E8bi5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09bi53b3Jkc1thXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYSksbiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxhPXQud29yZHMsZj1lLndvcmRzLHM9ci53b3Jkcyx1PTAsaD0wfGFbMF0sYz04MTkxJmgsZD1oPj4+MTMsbD0wfGFbMV0scD04MTkxJmwsYj1sPj4+MTMsdj0wfGFbMl0seT04MTkxJnYsbT12Pj4+MTMsZz0wfGFbM10sdz04MTkxJmcsXz1nPj4+MTMsTT0wfGFbNF0sUz04MTkxJk0sRT1NPj4+MTMsQT0wfGFbNV0saz04MTkxJkEseD1BPj4+MTMsST0wfGFbNl0sQj04MTkxJkksTz1JPj4+MTMsUj0wfGFbN10sUD04MTkxJlIsVD1SPj4+MTMsaj0wfGFbOF0sQz04MTkxJmosTj1qPj4+MTMsTD0wfGFbOV0sVT04MTkxJkwsej1MPj4+MTMsRD0wfGZbMF0scT04MTkxJkQsRj1EPj4+MTMsSz0wfGZbMV0sRz04MTkxJkssVj1LPj4+MTMsSD0wfGZbMl0sWD04MTkxJkgsWT1IPj4+MTMsVz0wfGZbM10sWj04MTkxJlcsSj1XPj4+MTMsJD0wfGZbNF0sUT04MTkxJiQsdHQ9JD4+PjEzLGV0PTB8Zls1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxmWzZdLG90PTgxOTEmaXQsYXQ9aXQ+Pj4xMyxmdD0wfGZbN10sc3Q9ODE5MSZmdCx1dD1mdD4+PjEzLGh0PTB8Zls4XSxjdD04MTkxJmh0LGR0PWh0Pj4+MTMsbHQ9MHxmWzldLHB0PTgxOTEmbHQsYnQ9bHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOSxuPU1hdGguaW11bChjLHEpLGk9TWF0aC5pbXVsKGMsRiksaT1pK01hdGguaW11bChkLHEpfDAsbz1NYXRoLmltdWwoZCxGKTt2YXIgdnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHZ0Pj4+MjYpfDAsdnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHAscSksaT1NYXRoLmltdWwocCxGKSxpPWkrTWF0aC5pbXVsKGIscSl8MCxvPU1hdGguaW11bChiLEYpLG49bitNYXRoLmltdWwoYyxHKXwwLGk9aStNYXRoLmltdWwoYyxWKXwwLGk9aStNYXRoLmltdWwoZCxHKXwwLG89bytNYXRoLmltdWwoZCxWKXwwO3ZhciB5dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeSxxKSxpPU1hdGguaW11bCh5LEYpLGk9aStNYXRoLmltdWwobSxxKXwwLG89TWF0aC5pbXVsKG0sRiksbj1uK01hdGguaW11bChwLEcpfDAsaT1pK01hdGguaW11bChwLFYpfDAsaT1pK01hdGguaW11bChiLEcpfDAsbz1vK01hdGguaW11bChiLFYpfDAsbj1uK01hdGguaW11bChjLFgpfDAsaT1pK01hdGguaW11bChjLFkpfDAsaT1pK01hdGguaW11bChkLFgpfDAsbz1vK01hdGguaW11bChkLFkpfDA7dmFyIG10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhtdD4+PjI2KXwwLG10Jj02NzEwODg2MyxuPU1hdGguaW11bCh3LHEpLGk9TWF0aC5pbXVsKHcsRiksaT1pK01hdGguaW11bChfLHEpfDAsbz1NYXRoLmltdWwoXyxGKSxuPW4rTWF0aC5pbXVsKHksRyl8MCxpPWkrTWF0aC5pbXVsKHksVil8MCxpPWkrTWF0aC5pbXVsKG0sRyl8MCxvPW8rTWF0aC5pbXVsKG0sVil8MCxuPW4rTWF0aC5pbXVsKHAsWCl8MCxpPWkrTWF0aC5pbXVsKHAsWSl8MCxpPWkrTWF0aC5pbXVsKGIsWCl8MCxvPW8rTWF0aC5pbXVsKGIsWSl8MCxuPW4rTWF0aC5pbXVsKGMsWil8MCxpPWkrTWF0aC5pbXVsKGMsSil8MCxpPWkrTWF0aC5pbXVsKGQsWil8MCxvPW8rTWF0aC5pbXVsKGQsSil8MDt2YXIgZ3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGd0Pj4+MjYpfDAsZ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFMscSksaT1NYXRoLmltdWwoUyxGKSxpPWkrTWF0aC5pbXVsKEUscSl8MCxvPU1hdGguaW11bChFLEYpLG49bitNYXRoLmltdWwodyxHKXwwLGk9aStNYXRoLmltdWwodyxWKXwwLGk9aStNYXRoLmltdWwoXyxHKXwwLG89bytNYXRoLmltdWwoXyxWKXwwLG49bitNYXRoLmltdWwoeSxYKXwwLGk9aStNYXRoLmltdWwoeSxZKXwwLGk9aStNYXRoLmltdWwobSxYKXwwLG89bytNYXRoLmltdWwobSxZKXwwLG49bitNYXRoLmltdWwocCxaKXwwLGk9aStNYXRoLmltdWwocCxKKXwwLGk9aStNYXRoLmltdWwoYixaKXwwLG89bytNYXRoLmltdWwoYixKKXwwLG49bitNYXRoLmltdWwoYyxRKXwwLGk9aStNYXRoLmltdWwoYyx0dCl8MCxpPWkrTWF0aC5pbXVsKGQsUSl8MCxvPW8rTWF0aC5pbXVsKGQsdHQpfDA7dmFyIHd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChrLHEpLGk9TWF0aC5pbXVsKGssRiksaT1pK01hdGguaW11bCh4LHEpfDAsbz1NYXRoLmltdWwoeCxGKSxuPW4rTWF0aC5pbXVsKFMsRyl8MCxpPWkrTWF0aC5pbXVsKFMsVil8MCxpPWkrTWF0aC5pbXVsKEUsRyl8MCxvPW8rTWF0aC5pbXVsKEUsVil8MCxuPW4rTWF0aC5pbXVsKHcsWCl8MCxpPWkrTWF0aC5pbXVsKHcsWSl8MCxpPWkrTWF0aC5pbXVsKF8sWCl8MCxvPW8rTWF0aC5pbXVsKF8sWSl8MCxuPW4rTWF0aC5pbXVsKHksWil8MCxpPWkrTWF0aC5pbXVsKHksSil8MCxpPWkrTWF0aC5pbXVsKG0sWil8MCxvPW8rTWF0aC5pbXVsKG0sSil8MCxuPW4rTWF0aC5pbXVsKHAsUSl8MCxpPWkrTWF0aC5pbXVsKHAsdHQpfDAsaT1pK01hdGguaW11bChiLFEpfDAsbz1vK01hdGguaW11bChiLHR0KXwwLG49bitNYXRoLmltdWwoYyxydCl8MCxpPWkrTWF0aC5pbXVsKGMsbnQpfDAsaT1pK01hdGguaW11bChkLHJ0KXwwLG89bytNYXRoLmltdWwoZCxudCl8MDt2YXIgX3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscSksaT1NYXRoLmltdWwoQixGKSxpPWkrTWF0aC5pbXVsKE8scSl8MCxvPU1hdGguaW11bChPLEYpLG49bitNYXRoLmltdWwoayxHKXwwLGk9aStNYXRoLmltdWwoayxWKXwwLGk9aStNYXRoLmltdWwoeCxHKXwwLG89bytNYXRoLmltdWwoeCxWKXwwLG49bitNYXRoLmltdWwoUyxYKXwwLGk9aStNYXRoLmltdWwoUyxZKXwwLGk9aStNYXRoLmltdWwoRSxYKXwwLG89bytNYXRoLmltdWwoRSxZKXwwLG49bitNYXRoLmltdWwodyxaKXwwLGk9aStNYXRoLmltdWwodyxKKXwwLGk9aStNYXRoLmltdWwoXyxaKXwwLG89bytNYXRoLmltdWwoXyxKKXwwLG49bitNYXRoLmltdWwoeSxRKXwwLGk9aStNYXRoLmltdWwoeSx0dCl8MCxpPWkrTWF0aC5pbXVsKG0sUSl8MCxvPW8rTWF0aC5pbXVsKG0sdHQpfDAsbj1uK01hdGguaW11bChwLHJ0KXwwLGk9aStNYXRoLmltdWwocCxudCl8MCxpPWkrTWF0aC5pbXVsKGIscnQpfDAsbz1vK01hdGguaW11bChiLG50KXwwLG49bitNYXRoLmltdWwoYyxvdCl8MCxpPWkrTWF0aC5pbXVsKGMsYXQpfDAsaT1pK01hdGguaW11bChkLG90KXwwLG89bytNYXRoLmltdWwoZCxhdCl8MDt2YXIgTXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFAscSksaT1NYXRoLmltdWwoUCxGKSxpPWkrTWF0aC5pbXVsKFQscSl8MCxvPU1hdGguaW11bChULEYpLG49bitNYXRoLmltdWwoQixHKXwwLGk9aStNYXRoLmltdWwoQixWKXwwLGk9aStNYXRoLmltdWwoTyxHKXwwLG89bytNYXRoLmltdWwoTyxWKXwwLG49bitNYXRoLmltdWwoayxYKXwwLGk9aStNYXRoLmltdWwoayxZKXwwLGk9aStNYXRoLmltdWwoeCxYKXwwLG89bytNYXRoLmltdWwoeCxZKXwwLG49bitNYXRoLmltdWwoUyxaKXwwLGk9aStNYXRoLmltdWwoUyxKKXwwLGk9aStNYXRoLmltdWwoRSxaKXwwLG89bytNYXRoLmltdWwoRSxKKXwwLG49bitNYXRoLmltdWwodyxRKXwwLGk9aStNYXRoLmltdWwodyx0dCl8MCxpPWkrTWF0aC5pbXVsKF8sUSl8MCxvPW8rTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bCh5LHJ0KXwwLGk9aStNYXRoLmltdWwoeSxudCl8MCxpPWkrTWF0aC5pbXVsKG0scnQpfDAsbz1vK01hdGguaW11bChtLG50KXwwLG49bitNYXRoLmltdWwocCxvdCl8MCxpPWkrTWF0aC5pbXVsKHAsYXQpfDAsaT1pK01hdGguaW11bChiLG90KXwwLG89bytNYXRoLmltdWwoYixhdCl8MCxuPW4rTWF0aC5pbXVsKGMsc3QpfDAsaT1pK01hdGguaW11bChjLHV0KXwwLGk9aStNYXRoLmltdWwoZCxzdCl8MCxvPW8rTWF0aC5pbXVsKGQsdXQpfDA7dmFyIFN0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChDLHEpLGk9TWF0aC5pbXVsKEMsRiksaT1pK01hdGguaW11bChOLHEpfDAsbz1NYXRoLmltdWwoTixGKSxuPW4rTWF0aC5pbXVsKFAsRyl8MCxpPWkrTWF0aC5pbXVsKFAsVil8MCxpPWkrTWF0aC5pbXVsKFQsRyl8MCxvPW8rTWF0aC5pbXVsKFQsVil8MCxuPW4rTWF0aC5pbXVsKEIsWCl8MCxpPWkrTWF0aC5pbXVsKEIsWSl8MCxpPWkrTWF0aC5pbXVsKE8sWCl8MCxvPW8rTWF0aC5pbXVsKE8sWSl8MCxuPW4rTWF0aC5pbXVsKGssWil8MCxpPWkrTWF0aC5pbXVsKGssSil8MCxpPWkrTWF0aC5pbXVsKHgsWil8MCxvPW8rTWF0aC5pbXVsKHgsSil8MCxuPW4rTWF0aC5pbXVsKFMsUSl8MCxpPWkrTWF0aC5pbXVsKFMsdHQpfDAsaT1pK01hdGguaW11bChFLFEpfDAsbz1vK01hdGguaW11bChFLHR0KXwwLG49bitNYXRoLmltdWwodyxydCl8MCxpPWkrTWF0aC5pbXVsKHcsbnQpfDAsaT1pK01hdGguaW11bChfLHJ0KXwwLG89bytNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKHksb3QpfDAsaT1pK01hdGguaW11bCh5LGF0KXwwLGk9aStNYXRoLmltdWwobSxvdCl8MCxvPW8rTWF0aC5pbXVsKG0sYXQpfDAsbj1uK01hdGguaW11bChwLHN0KXwwLGk9aStNYXRoLmltdWwocCx1dCl8MCxpPWkrTWF0aC5pbXVsKGIsc3QpfDAsbz1vK01hdGguaW11bChiLHV0KXwwLG49bitNYXRoLmltdWwoYyxjdCl8MCxpPWkrTWF0aC5pbXVsKGMsZHQpfDAsaT1pK01hdGguaW11bChkLGN0KXwwLG89bytNYXRoLmltdWwoZCxkdCl8MDt2YXIgRXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscSksaT1NYXRoLmltdWwoVSxGKSxpPWkrTWF0aC5pbXVsKHoscSl8MCxvPU1hdGguaW11bCh6LEYpLG49bitNYXRoLmltdWwoQyxHKXwwLGk9aStNYXRoLmltdWwoQyxWKXwwLGk9aStNYXRoLmltdWwoTixHKXwwLG89bytNYXRoLmltdWwoTixWKXwwLG49bitNYXRoLmltdWwoUCxYKXwwLGk9aStNYXRoLmltdWwoUCxZKXwwLGk9aStNYXRoLmltdWwoVCxYKXwwLG89bytNYXRoLmltdWwoVCxZKXwwLG49bitNYXRoLmltdWwoQixaKXwwLGk9aStNYXRoLmltdWwoQixKKXwwLGk9aStNYXRoLmltdWwoTyxaKXwwLG89bytNYXRoLmltdWwoTyxKKXwwLG49bitNYXRoLmltdWwoayxRKXwwLGk9aStNYXRoLmltdWwoayx0dCl8MCxpPWkrTWF0aC5pbXVsKHgsUSl8MCxvPW8rTWF0aC5pbXVsKHgsdHQpfDAsbj1uK01hdGguaW11bChTLHJ0KXwwLGk9aStNYXRoLmltdWwoUyxudCl8MCxpPWkrTWF0aC5pbXVsKEUscnQpfDAsbz1vK01hdGguaW11bChFLG50KXwwLG49bitNYXRoLmltdWwodyxvdCl8MCxpPWkrTWF0aC5pbXVsKHcsYXQpfDAsaT1pK01hdGguaW11bChfLG90KXwwLG89bytNYXRoLmltdWwoXyxhdCl8MCxuPW4rTWF0aC5pbXVsKHksc3QpfDAsaT1pK01hdGguaW11bCh5LHV0KXwwLGk9aStNYXRoLmltdWwobSxzdCl8MCxvPW8rTWF0aC5pbXVsKG0sdXQpfDAsbj1uK01hdGguaW11bChwLGN0KXwwLGk9aStNYXRoLmltdWwocCxkdCl8MCxpPWkrTWF0aC5pbXVsKGIsY3QpfDAsbz1vK01hdGguaW11bChiLGR0KXwwLG49bitNYXRoLmltdWwoYyxwdCl8MCxpPWkrTWF0aC5pbXVsKGMsYnQpfDAsaT1pK01hdGguaW11bChkLHB0KXwwLG89bytNYXRoLmltdWwoZCxidCl8MDt2YXIgQXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsRyksaT1NYXRoLmltdWwoVSxWKSxpPWkrTWF0aC5pbXVsKHosRyl8MCxvPU1hdGguaW11bCh6LFYpLG49bitNYXRoLmltdWwoQyxYKXwwLGk9aStNYXRoLmltdWwoQyxZKXwwLGk9aStNYXRoLmltdWwoTixYKXwwLG89bytNYXRoLmltdWwoTixZKXwwLG49bitNYXRoLmltdWwoUCxaKXwwLGk9aStNYXRoLmltdWwoUCxKKXwwLGk9aStNYXRoLmltdWwoVCxaKXwwLG89bytNYXRoLmltdWwoVCxKKXwwLG49bitNYXRoLmltdWwoQixRKXwwLGk9aStNYXRoLmltdWwoQix0dCl8MCxpPWkrTWF0aC5pbXVsKE8sUSl8MCxvPW8rTWF0aC5pbXVsKE8sdHQpfDAsbj1uK01hdGguaW11bChrLHJ0KXwwLGk9aStNYXRoLmltdWwoayxudCl8MCxpPWkrTWF0aC5pbXVsKHgscnQpfDAsbz1vK01hdGguaW11bCh4LG50KXwwLG49bitNYXRoLmltdWwoUyxvdCl8MCxpPWkrTWF0aC5pbXVsKFMsYXQpfDAsaT1pK01hdGguaW11bChFLG90KXwwLG89bytNYXRoLmltdWwoRSxhdCl8MCxuPW4rTWF0aC5pbXVsKHcsc3QpfDAsaT1pK01hdGguaW11bCh3LHV0KXwwLGk9aStNYXRoLmltdWwoXyxzdCl8MCxvPW8rTWF0aC5pbXVsKF8sdXQpfDAsbj1uK01hdGguaW11bCh5LGN0KXwwLGk9aStNYXRoLmltdWwoeSxkdCl8MCxpPWkrTWF0aC5pbXVsKG0sY3QpfDAsbz1vK01hdGguaW11bChtLGR0KXwwLG49bitNYXRoLmltdWwocCxwdCl8MCxpPWkrTWF0aC5pbXVsKHAsYnQpfDAsaT1pK01hdGguaW11bChiLHB0KXwwLG89bytNYXRoLmltdWwoYixidCl8MDt2YXIga3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWCksaT1NYXRoLmltdWwoVSxZKSxpPWkrTWF0aC5pbXVsKHosWCl8MCxvPU1hdGguaW11bCh6LFkpLG49bitNYXRoLmltdWwoQyxaKXwwLGk9aStNYXRoLmltdWwoQyxKKXwwLGk9aStNYXRoLmltdWwoTixaKXwwLG89bytNYXRoLmltdWwoTixKKXwwLG49bitNYXRoLmltdWwoUCxRKXwwLGk9aStNYXRoLmltdWwoUCx0dCl8MCxpPWkrTWF0aC5pbXVsKFQsUSl8MCxvPW8rTWF0aC5pbXVsKFQsdHQpfDAsbj1uK01hdGguaW11bChCLHJ0KXwwLGk9aStNYXRoLmltdWwoQixudCl8MCxpPWkrTWF0aC5pbXVsKE8scnQpfDAsbz1vK01hdGguaW11bChPLG50KXwwLG49bitNYXRoLmltdWwoayxvdCl8MCxpPWkrTWF0aC5pbXVsKGssYXQpfDAsaT1pK01hdGguaW11bCh4LG90KXwwLG89bytNYXRoLmltdWwoeCxhdCl8MCxuPW4rTWF0aC5pbXVsKFMsc3QpfDAsaT1pK01hdGguaW11bChTLHV0KXwwLGk9aStNYXRoLmltdWwoRSxzdCl8MCxvPW8rTWF0aC5pbXVsKEUsdXQpfDAsbj1uK01hdGguaW11bCh3LGN0KXwwLGk9aStNYXRoLmltdWwodyxkdCl8MCxpPWkrTWF0aC5pbXVsKF8sY3QpfDAsbz1vK01hdGguaW11bChfLGR0KXwwLG49bitNYXRoLmltdWwoeSxwdCl8MCxpPWkrTWF0aC5pbXVsKHksYnQpfDAsaT1pK01hdGguaW11bChtLHB0KXwwLG89bytNYXRoLmltdWwobSxidCl8MDt2YXIgeHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWiksaT1NYXRoLmltdWwoVSxKKSxpPWkrTWF0aC5pbXVsKHosWil8MCxvPU1hdGguaW11bCh6LEopLG49bitNYXRoLmltdWwoQyxRKXwwLGk9aStNYXRoLmltdWwoQyx0dCl8MCxpPWkrTWF0aC5pbXVsKE4sUSl8MCxvPW8rTWF0aC5pbXVsKE4sdHQpfDAsbj1uK01hdGguaW11bChQLHJ0KXwwLGk9aStNYXRoLmltdWwoUCxudCl8MCxpPWkrTWF0aC5pbXVsKFQscnQpfDAsbz1vK01hdGguaW11bChULG50KXwwLG49bitNYXRoLmltdWwoQixvdCl8MCxpPWkrTWF0aC5pbXVsKEIsYXQpfDAsaT1pK01hdGguaW11bChPLG90KXwwLG89bytNYXRoLmltdWwoTyxhdCl8MCxuPW4rTWF0aC5pbXVsKGssc3QpfDAsaT1pK01hdGguaW11bChrLHV0KXwwLGk9aStNYXRoLmltdWwoeCxzdCl8MCxvPW8rTWF0aC5pbXVsKHgsdXQpfDAsbj1uK01hdGguaW11bChTLGN0KXwwLGk9aStNYXRoLmltdWwoUyxkdCl8MCxpPWkrTWF0aC5pbXVsKEUsY3QpfDAsbz1vK01hdGguaW11bChFLGR0KXwwLG49bitNYXRoLmltdWwodyxwdCl8MCxpPWkrTWF0aC5pbXVsKHcsYnQpfDAsaT1pK01hdGguaW11bChfLHB0KXwwLG89bytNYXRoLmltdWwoXyxidCl8MDt2YXIgSXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsUSksaT1NYXRoLmltdWwoVSx0dCksaT1pK01hdGguaW11bCh6LFEpfDAsbz1NYXRoLmltdWwoeix0dCksbj1uK01hdGguaW11bChDLHJ0KXwwLGk9aStNYXRoLmltdWwoQyxudCl8MCxpPWkrTWF0aC5pbXVsKE4scnQpfDAsbz1vK01hdGguaW11bChOLG50KXwwLG49bitNYXRoLmltdWwoUCxvdCl8MCxpPWkrTWF0aC5pbXVsKFAsYXQpfDAsaT1pK01hdGguaW11bChULG90KXwwLG89bytNYXRoLmltdWwoVCxhdCl8MCxuPW4rTWF0aC5pbXVsKEIsc3QpfDAsaT1pK01hdGguaW11bChCLHV0KXwwLGk9aStNYXRoLmltdWwoTyxzdCl8MCxvPW8rTWF0aC5pbXVsKE8sdXQpfDAsbj1uK01hdGguaW11bChrLGN0KXwwLGk9aStNYXRoLmltdWwoayxkdCl8MCxpPWkrTWF0aC5pbXVsKHgsY3QpfDAsbz1vK01hdGguaW11bCh4LGR0KXwwLG49bitNYXRoLmltdWwoUyxwdCl8MCxpPWkrTWF0aC5pbXVsKFMsYnQpfDAsaT1pK01hdGguaW11bChFLHB0KXwwLG89bytNYXRoLmltdWwoRSxidCl8MDt2YXIgQnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEJ0Pj4+MjYpfDAsQnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscnQpLGk9TWF0aC5pbXVsKFUsbnQpLGk9aStNYXRoLmltdWwoeixydCl8MCxvPU1hdGguaW11bCh6LG50KSxuPW4rTWF0aC5pbXVsKEMsb3QpfDAsaT1pK01hdGguaW11bChDLGF0KXwwLGk9aStNYXRoLmltdWwoTixvdCl8MCxvPW8rTWF0aC5pbXVsKE4sYXQpfDAsbj1uK01hdGguaW11bChQLHN0KXwwLGk9aStNYXRoLmltdWwoUCx1dCl8MCxpPWkrTWF0aC5pbXVsKFQsc3QpfDAsbz1vK01hdGguaW11bChULHV0KXwwLG49bitNYXRoLmltdWwoQixjdCl8MCxpPWkrTWF0aC5pbXVsKEIsZHQpfDAsaT1pK01hdGguaW11bChPLGN0KXwwLG89bytNYXRoLmltdWwoTyxkdCl8MCxuPW4rTWF0aC5pbXVsKGsscHQpfDAsaT1pK01hdGguaW11bChrLGJ0KXwwLGk9aStNYXRoLmltdWwoeCxwdCl8MCxvPW8rTWF0aC5pbXVsKHgsYnQpfDA7dmFyIE90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxuPU1hdGguaW11bChVLG90KSxpPU1hdGguaW11bChVLGF0KSxpPWkrTWF0aC5pbXVsKHosb3QpfDAsbz1NYXRoLmltdWwoeixhdCksbj1uK01hdGguaW11bChDLHN0KXwwLGk9aStNYXRoLmltdWwoQyx1dCl8MCxpPWkrTWF0aC5pbXVsKE4sc3QpfDAsbz1vK01hdGguaW11bChOLHV0KXwwLG49bitNYXRoLmltdWwoUCxjdCl8MCxpPWkrTWF0aC5pbXVsKFAsZHQpfDAsaT1pK01hdGguaW11bChULGN0KXwwLG89bytNYXRoLmltdWwoVCxkdCl8MCxuPW4rTWF0aC5pbXVsKEIscHQpfDAsaT1pK01hdGguaW11bChCLGJ0KXwwLGk9aStNYXRoLmltdWwoTyxwdCl8MCxvPW8rTWF0aC5pbXVsKE8sYnQpfDA7dmFyIFJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhSdD4+PjI2KXwwLFJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHN0KSxpPU1hdGguaW11bChVLHV0KSxpPWkrTWF0aC5pbXVsKHosc3QpfDAsbz1NYXRoLmltdWwoeix1dCksbj1uK01hdGguaW11bChDLGN0KXwwLGk9aStNYXRoLmltdWwoQyxkdCl8MCxpPWkrTWF0aC5pbXVsKE4sY3QpfDAsbz1vK01hdGguaW11bChOLGR0KXwwLG49bitNYXRoLmltdWwoUCxwdCl8MCxpPWkrTWF0aC5pbXVsKFAsYnQpfDAsaT1pK01hdGguaW11bChULHB0KXwwLG89bytNYXRoLmltdWwoVCxidCl8MDt2YXIgUHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsY3QpLGk9TWF0aC5pbXVsKFUsZHQpLGk9aStNYXRoLmltdWwoeixjdCl8MCxvPU1hdGguaW11bCh6LGR0KSxuPW4rTWF0aC5pbXVsKEMscHQpfDAsaT1pK01hdGguaW11bChDLGJ0KXwwLGk9aStNYXRoLmltdWwoTixwdCl8MCxvPW8rTWF0aC5pbXVsKE4sYnQpfDA7dmFyIFR0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHB0KSxpPU1hdGguaW11bChVLGJ0KSxpPWkrTWF0aC5pbXVsKHoscHQpfDAsbz1NYXRoLmltdWwoeixidCk7dmFyIGp0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDtyZXR1cm4gdT0obysoaT4+PjEzKXwwKSsoanQ+Pj4yNil8MCxqdCY9NjcxMDg4NjMsc1swXT12dCxzWzFdPXl0LHNbMl09bXQsc1szXT1ndCxzWzRdPXd0LHNbNV09X3Qsc1s2XT1NdCxzWzddPVN0LHNbOF09RXQsc1s5XT1BdCxzWzEwXT1rdCxzWzExXT14dCxzWzEyXT1JdCxzWzEzXT1CdCxzWzE0XT1PdCxzWzE1XT1SdCxzWzE2XT1QdCxzWzE3XT1UdCxzWzE4XT1qdCwwIT09dSYmKHNbMTldPXUsci5sZW5ndGgrKykscn07TWF0aC5pbXVsfHwoRT11KSxvLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIHI9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT10Lmxlbmd0aD9FKHRoaXMsdCxlKTpuPDYzP3UodGhpcyx0LGUpOm48MTAyND9oKHRoaXMsdCxlKTpjKHRoaXMsdCxlKX0sZC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9by5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxkLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZC5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksbyl7Zm9yKHZhciBhPTA7YTxvO2ErKyluW2FdPWVbdFthXV0saVthXT1yW3RbYV1dfSxkLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLG8pe3RoaXMucGVybXV0ZShvLHQsZSxyLG4saSk7Zm9yKHZhciBhPTE7YTxpO2E8PD0xKWZvcih2YXIgZj1hPDwxLHM9TWF0aC5jb3MoMipNYXRoLlBJL2YpLHU9TWF0aC5zaW4oMipNYXRoLlBJL2YpLGg9MDtoPGk7aCs9Zilmb3IodmFyIGM9cyxkPXUsbD0wO2w8YTtsKyspe3ZhciBwPXJbaCtsXSxiPW5baCtsXSx2PXJbaCtsK2FdLHk9bltoK2wrYV0sbT1jKnYtZCp5O3k9Yyp5K2Qqdix2PW0scltoK2xdPXArdixuW2grbF09Yit5LHJbaCtsK2FdPXAtdixuW2grbCthXT1iLXksbCE9PWYmJihtPXMqYy11KmQsZD1zKmQrdSpjLGM9bSl9fSxkLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIG89MCxhPTA7YTxlO2ErKylvKz0wfHRbYV0sclsyKmFdPTgxOTEmbyxvPj4+PTEzLHJbMiphKzFdPTgxOTEmbyxvPj4+PTEzO2ZvcihhPTIqZTthPGk7KythKXJbYV09MDtuKDA9PT1vKSxuKDA9PT0obyYtODE5MikpfSxkLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxkLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLG89dGhpcy5zdHViKG4pLGE9bmV3IEFycmF5KG4pLGY9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLGQ9ci53b3JkcztkLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLGEsbiksXG50aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCx1LG4pLHRoaXMudHJhbnNmb3JtKGEsbyxmLHMsbixpKSx0aGlzLnRyYW5zZm9ybSh1LG8saCxjLG4saSk7Zm9yKHZhciBsPTA7bDxuO2wrKyl7dmFyIHA9ZltsXSpoW2xdLXNbbF0qY1tsXTtzW2xdPWZbbF0qY1tsXStzW2xdKmhbbF0sZltsXT1wfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShmLHMsbiksdGhpcy50cmFuc2Zvcm0oZixzLGQsbyxuLGkpLHRoaXMuY29uanVnYXRlKGQsbyxuKSx0aGlzLm5vcm1hbGl6ZTEzYihkLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sby5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxvLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksYyh0aGlzLHQsZSl9LG8ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxvLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxvPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1vPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZvfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LG8ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sby5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sby5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPXModCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgbygxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxvLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsbz02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBhPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy53b3Jkc1tlXSZvLHM9KDB8dGhpcy53b3Jkc1tlXSktZjw8cjt0aGlzLndvcmRzW2VdPXN8YSxhPWY+Pj4yNi1yfWEmJih0aGlzLndvcmRzW2VdPWEsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LG8ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGk7aT1lPyhlLWUlMjYpLzI2OjA7dmFyIG89dCUyNixhPU1hdGgubWluKCh0LW8pLzI2LHRoaXMubGVuZ3RoKSxmPTY3MTA4ODYzXjY3MTA4ODYzPj4+bzw8byxzPXI7aWYoaS09YSxpPU1hdGgubWF4KDAsaSkscyl7Zm9yKHZhciB1PTA7dTxhO3UrKylzLndvcmRzW3VdPXRoaXMud29yZHNbdV07cy5sZW5ndGg9YX1pZigwPT09YSk7ZWxzZSBpZih0aGlzLmxlbmd0aD5hKWZvcih0aGlzLmxlbmd0aC09YSx1PTA7dTx0aGlzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3UrYV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgaD0wO2Zvcih1PXRoaXMubGVuZ3RoLTE7dT49MCYmKDAhPT1ofHx1Pj1pKTt1LS0pe3ZhciBjPTB8dGhpcy53b3Jkc1t1XTt0aGlzLndvcmRzW3VdPWg8PDI2LW98Yz4+Pm8saD1jJmZ9cmV0dXJuIHMmJjAhPT1oJiYocy53b3Jkc1tzLmxlbmd0aCsrXT1oKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sby5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxvLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sby5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxvLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sby5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4hMTt2YXIgbz10aGlzLndvcmRzW3JdO3JldHVybiEhKG8maSl9LG8ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSxcImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVyc1wiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sby5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwP3RoaXMuaXN1Ym4oLXQpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8dD8odGhpcy53b3Jkc1swXT10LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxvLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30sby5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYobihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxvLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LG8ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LG8ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxvLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIGEsZj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStmO3ZhciBzPSgwfHQud29yZHNbaV0pKmU7YS09NjcxMDg4NjMmcyxmPShhPj4yNiktKHMvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKWE9KDB8dGhpcy53b3Jkc1tpK3JdKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PWYpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobihmPT09LTEpLGY9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspYT0tKDB8dGhpcy53b3Jkc1tpXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aC10Lmxlbmd0aCxuPXRoaXMuY2xvbmUoKSxpPXQsYT0wfGkud29yZHNbaS5sZW5ndGgtMV0sZj10aGlzLl9jb3VudEJpdHMoYSk7cj0yNi1mLDAhPT1yJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyx1PW4ubGVuZ3RoLWkubGVuZ3RoO2lmKFwibW9kXCIhPT1lKXtzPW5ldyBvKG51bGwpLHMubGVuZ3RoPXUrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspcy53b3Jkc1toXT0wfXZhciBjPW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLHUpOzA9PT1jLm5lZ2F0aXZlJiYobj1jLHMmJihzLndvcmRzW3VdPTEpKTtmb3IodmFyIGQ9dS0xO2Q+PTA7ZC0tKXt2YXIgbD02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2RdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2QtMV0pO2ZvcihsPU1hdGgubWluKGwvYXwwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGwsZCk7MCE9PW4ubmVnYXRpdmU7KWwtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGQpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1tkXT1sKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSxcImRpdlwiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LG8ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7aWYobighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKSlyZXR1cm57ZGl2Om5ldyBvKDApLG1vZDpuZXcgbygwKX07dmFyIGksYSxmO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KGY9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pYWRkKHQpKSx7ZGl2OmksbW9kOmF9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmU/KGY9dGhpcy5kaXZtb2QodC5uZWcoKSxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6Zi5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KGY9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaXN1Yih0KSkse2RpdjpmLmRpdixtb2Q6YX0pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IG8oMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD9cImRpdlwiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06XCJtb2RcIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpfSxvLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJkaXZcIiwhMSkuZGl2fSxvLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMSkubW9kfSxvLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITApLm1vZH0sby5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaXZtb2QodCk7aWYoZS5tb2QuaXNaZXJvKCkpcmV0dXJuIGUuZGl2O3ZhciByPTAhPT1lLmRpdi5uZWdhdGl2ZT9lLm1vZC5pc3ViKHQpOmUubW9kLG49dC51c2hybigxKSxpPXQuYW5kbG4oMSksbz1yLmNtcChuKTtyZXR1cm4gbzwwfHwxPT09aSYmMD09PW8/ZS5kaXY6MCE9PWUuZGl2Lm5lZ2F0aXZlP2UuZGl2LmlzdWJuKDEpOmUuZGl2LmlhZGRuKDEpfSxvLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0oMTw8MjYpJXQscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPShlKnIrKDB8dGhpcy53b3Jkc1tpXSkpJXQ7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqZTt0aGlzLndvcmRzW3JdPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0sby5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPW5ldyBvKDApLHM9bmV3IG8oMSksdT0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrdTtmb3IodmFyIGg9ci5jbG9uZSgpLGM9ZS5jbG9uZSgpOyFlLmlzWmVybygpOyl7Zm9yKHZhciBkPTAsbD0xOzA9PT0oZS53b3Jkc1swXSZsKSYmZDwyNjsrK2QsbDw8PTEpO2lmKGQ+MClmb3IoZS5pdXNocm4oZCk7ZC0tID4wOykoaS5pc09kZCgpfHxhLmlzT2RkKCkpJiYoaS5pYWRkKGgpLGEuaXN1YihjKSksaS5pdXNocm4oMSksYS5pdXNocm4oMSk7Zm9yKHZhciBwPTAsYj0xOzA9PT0oci53b3Jkc1swXSZiKSYmcDwyNjsrK3AsYjw8PTEpO2lmKHA+MClmb3Ioci5pdXNocm4ocCk7cC0tID4wOykoZi5pc09kZCgpfHxzLmlzT2RkKCkpJiYoZi5pYWRkKGgpLHMuaXN1YihjKSksZi5pdXNocm4oMSkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoZiksYS5pc3ViKHMpKTooci5pc3ViKGUpLGYuaXN1YihpKSxzLmlzdWIoYSkpfXJldHVybnthOmYsYjpzLGdjZDpyLml1c2hsbih1KX19LG8ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIHM9MCx1PTE7MD09PShlLndvcmRzWzBdJnUpJiZzPDI2Oysrcyx1PDw9MSk7aWYocz4wKWZvcihlLml1c2hybihzKTtzLS0gPjA7KWkuaXNPZGQoKSYmaS5pYWRkKGYpLGkuaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGM9MTswPT09KHIud29yZHNbMF0mYykmJmg8MjY7KytoLGM8PD0xKTtpZihoPjApZm9yKHIuaXVzaHJuKGgpO2gtLSA+MDspYS5pc09kZCgpJiZhLmlhZGQoZiksYS5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoYSkpOihyLmlzdWIoZSksYS5pc3ViKGkpKX12YXIgZDtyZXR1cm4gZD0wPT09ZS5jbXBuKDEpP2k6YSxkLmNtcG4oMCk8MCYmZC5pYWRkKHQpLGR9LG8ucHJvdG90eXBlLmdjZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB0LmFicygpO2lmKHQuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2UubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9ZS5jbXAocik7aWYoaTwwKXt2YXIgbz1lO2U9cixyPW99ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhaztlLmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxvLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVnY2QodCkuYS51bW9kKHQpfSxvLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LG8ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIG89aSxhPXI7MCE9PW8mJmE8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj0wfHRoaXMud29yZHNbYV07Zis9byxvPWY+Pj4yNixmJj02NzEwODg2Myx0aGlzLndvcmRzW2FdPWZ9cmV0dXJuIDAhPT1vJiYodGhpcy53b3Jkc1thXT1vLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxvLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmUpcmV0dXJuIDE7dGhpcy5zdHJpcCgpO3ZhciByO2lmKHRoaXMubGVuZ3RoPjEpcj0xO2Vsc2V7ZSYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsXCJOdW1iZXIgaXMgdG9vIGJpZ1wiKTt2YXIgaT0wfHRoaXMud29yZHNbMF07cj1pPT09dD8wOmk8dD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yOnJ9LG8ucHJvdG90eXBlLmNtcD1mdW5jdGlvbih0KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBlPXRoaXMudWNtcCh0KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxvLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPnQubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHx0LndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0sby5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5ndD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wKHQpfSxvLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk+PTB9LG8ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk+PTB9LG8ucHJvdG90eXBlLmx0bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT09PS0xfSxvLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LG8ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LG8ucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sby5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtKHQpfSxvLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLG4oMD09PXRoaXMubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LG8ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxvLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxvLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCxcInJlZFBvdyhub3JtYWxOdW0pXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgQT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2wucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LGwucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2RvIHRoaXMuc3BsaXQocix0aGlzLnRtcCkscj10aGlzLmltdWxLKHIpLHI9ci5pYWRkKHRoaXMudG1wKSxlPXIuYml0TGVuZ3RoKCk7d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sbC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sbC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHAsbCkscC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDE5NDMwMyxuPU1hdGgubWluKHQubGVuZ3RoLDkpLGk9MDtpPG47aSsrKWUud29yZHNbaV09dC53b3Jkc1tpXTtpZihlLmxlbmd0aD1uLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgbz10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPW8mcixpPTEwO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT0wfHQud29yZHNbaV07dC53b3Jkc1tpLTEwXT0oYSZyKTw8NHxvPj4+MjIsbz1hfW8+Pj49MjIsdC53b3Jkc1tpLTEwXT1vLDA9PT1vJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHAucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saShiLGwpLGkodixsKSxpKHksbCkseS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxvLl9wcmltZT1mdW5jdGlvbiB0KGUpe2lmKEFbZV0pcmV0dXJuIEFbZV07dmFyIHQ7aWYoXCJrMjU2XCI9PT1lKXQ9bmV3IHA7ZWxzZSBpZihcInAyMjRcIj09PWUpdD1uZXcgYjtlbHNlIGlmKFwicDE5MlwiPT09ZSl0PW5ldyB2O2Vsc2V7aWYoXCJwMjU1MTlcIiE9PWUpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwcmltZSBcIitlKTt0PW5ldyB5fXJldHVybiBBW2VdPXQsdH0sbS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih0LGUpe24oMD09PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCYmdC5yZWQ9PT1lLnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LG0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSxtLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LG0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LG0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sbS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT09MSksMz09PWUpe3ZhciByPXRoaXMubS5hZGQobmV3IG8oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codCxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksYT0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspYSsrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBmPW5ldyBvKDEpLnRvUmVkKHRoaXMpLHM9Zi5yZWROZWcoKSx1PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxoPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoaD1uZXcgbygyKmgqaCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGgsdSkuY21wKHMpOyloLnJlZElBZGQocyk7Zm9yKHZhciBjPXRoaXMucG93KGgsaSksZD10aGlzLnBvdyh0LGkuYWRkbigxKS5pdXNocm4oMSkpLGw9dGhpcy5wb3codCxpKSxwPWE7MCE9PWwuY21wKGYpOyl7Zm9yKHZhciBiPWwsdj0wOzAhPT1iLmNtcChmKTt2KyspYj1iLnJlZFNxcigpO24odjxwKTt2YXIgeT10aGlzLnBvdyhjLG5ldyBvKDEpLml1c2hsbihwLXYtMSkpO2Q9ZC5yZWRNdWwoeSksYz15LnJlZFNxcigpLGw9bC5yZWRNdWwoYykscD12fXJldHVybiBkfSxtLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlPyhlLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LG0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe2lmKGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDEpO2lmKDA9PT1lLmNtcG4oMSkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgcj00LG49bmV3IEFycmF5KDE8PHIpO25bMF09bmV3IG8oMSkudG9SZWQodGhpcyksblsxXT10O2Zvcih2YXIgaT0yO2k8bi5sZW5ndGg7aSsrKW5baV09dGhpcy5tdWwobltpLTFdLHQpO3ZhciBhPW5bMF0sZj0wLHM9MCx1PWUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT11JiYodT0yNiksaT1lLmxlbmd0aC0xO2k+PTA7aS0tKXtmb3IodmFyIGg9ZS53b3Jkc1tpXSxjPXUtMTtjPj0wO2MtLSl7dmFyIGQ9aD4+YyYxO2EhPT1uWzBdJiYoYT10aGlzLnNxcihhKSksMCE9PWR8fDAhPT1mPyhmPDw9MSxmfD1kLHMrKywocz09PXJ8fDA9PT1pJiYwPT09YykmJihhPXRoaXMubXVsKGEsbltmXSkscz0wLGY9MCkpOnM9MH11PTI2fXJldHVybiBhfSxtLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSxtLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sby5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZyh0KX0saShnLG0pLGcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0sZy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxhPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/YT1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKGE9aS5pYWRkKHRoaXMubSkpLGEuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSk7cmV0dXJuIGUuX2ZvcmNlUmVkKHRoaXMpfX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHR8fHQsdGhpcyl9KS5jYWxsKGUscig5MikodCkpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe2kuY2FsbCh0aGlzKX10LmV4cG9ydHM9bjt2YXIgaT1yKDExMCkuRXZlbnRFbWl0dGVyLG89cig2MDMpO28obixpKSxuLlJlYWRhYmxlPXIoNjAwKSxuLldyaXRhYmxlPXIoNjAyKSxuLkR1cGxleD1yKDU5NSksbi5UcmFuc2Zvcm09cig2MDEpLG4uUGFzc1Rocm91Z2g9cig1OTkpLG4uU3RyZWFtPW4sbi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7dC53cml0YWJsZSYmITE9PT10LndyaXRlKGUpJiZ1LnBhdXNlJiZ1LnBhdXNlKCl9ZnVuY3Rpb24gbigpe3UucmVhZGFibGUmJnUucmVzdW1lJiZ1LnJlc3VtZSgpfWZ1bmN0aW9uIG8oKXtofHwoaD0hMCx0LmVuZCgpKX1mdW5jdGlvbiBhKCl7aHx8KGg9ITAsXCJmdW5jdGlvblwiPT10eXBlb2YgdC5kZXN0cm95JiZ0LmRlc3Ryb3koKSl9ZnVuY3Rpb24gZih0KXtpZihzKCksMD09PWkubGlzdGVuZXJDb3VudCh0aGlzLFwiZXJyb3JcIikpdGhyb3cgdH1mdW5jdGlvbiBzKCl7dS5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIixyKSx0LnJlbW92ZUxpc3RlbmVyKFwiZHJhaW5cIixuKSx1LnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsbyksdS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsYSksdS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsZiksdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsZiksdS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLHMpLHUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHMpLHQucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHMpfXZhciB1PXRoaXM7dS5vbihcImRhdGFcIixyKSx0Lm9uKFwiZHJhaW5cIixuKSx0Ll9pc1N0ZGlvfHxlJiZlLmVuZD09PSExfHwodS5vbihcImVuZFwiLG8pLHUub24oXCJjbG9zZVwiLGEpKTt2YXIgaD0hMTtyZXR1cm4gdS5vbihcImVycm9yXCIsZiksdC5vbihcImVycm9yXCIsZiksdS5vbihcImVuZFwiLHMpLHUub24oXCJjbG9zZVwiLHMpLHQub24oXCJjbG9zZVwiLHMpLHQuZW1pdChcInBpcGVcIix1KSx0fX0sZnVuY3Rpb24odCxlKXt2YXIgcj10LmV4cG9ydHM9e3ZlcnNpb246XCIyLjQuMFwifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChlLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIHQuY2FsbChlLHIsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3JldHVybiB0LmNhbGwoZSxyLG4saSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxOTApLGk9cigwKSxvPXIoODcpKFwibWV0YWRhdGFcIiksYT1vLnN0b3JlfHwoby5zdG9yZT1uZXcocigxOTMpKSksZj1mdW5jdGlvbih0LGUscil7dmFyIGk9YS5nZXQodCk7aWYoIWkpe2lmKCFyKXJldHVybjthLnNldCh0LGk9bmV3IG4pfXZhciBvPWkuZ2V0KGUpO2lmKCFvKXtpZighcilyZXR1cm47aS5zZXQoZSxvPW5ldyBuKX1yZXR1cm4gb30scz1mdW5jdGlvbih0LGUscil7dmFyIG49ZihlLHIsITEpO3JldHVybiB2b2lkIDAhPT1uJiZuLmhhcyh0KX0sdT1mdW5jdGlvbih0LGUscil7dmFyIG49ZihlLHIsITEpO3JldHVybiB2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldCh0KX0saD1mdW5jdGlvbih0LGUscixuKXtmKHIsbiwhMCkuc2V0KHQsZSl9LGM9ZnVuY3Rpb24odCxlKXt2YXIgcj1mKHQsZSwhMSksbj1bXTtyZXR1cm4gciYmci5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7bi5wdXNoKGUpfSksbn0sZD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dHx8XCJzeW1ib2xcIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9LGw9ZnVuY3Rpb24odCl7aShpLlMsXCJSZWZsZWN0XCIsdCl9O3QuZXhwb3J0cz17c3RvcmU6YSxtYXA6ZixoYXM6cyxnZXQ6dSxzZXQ6aCxrZXlzOmMsa2V5OmQsZXhwOmx9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7aWYocig4KSl7dmFyIG49cig0MSksaT1yKDQpLG89cig1KSxhPXIoMCksZj1yKDg4KSxzPXIoMTQwKSx1PXIoMzMpLGg9cig0MCksYz1yKDM3KSxkPXIoMTQpLGw9cig0NSkscD1yKDM4KSxiPXIoMTApLHY9cig0NykseT1yKDI5KSxtPXIoMTIpLGc9cigxODcpLHc9cig2NCksXz1yKDYpLE09cigxMSksUz1yKDEyNSksRT1yKDQyKSxBPXIoMjEpLGs9cig0MykuZix4PXIoMTQyKSxJPXIoNDgpLEI9cig3KSxPPXIoMjcpLFI9cig3OCksUD1yKDEzNCksVD1yKDE0Myksaj1yKDU2KSxDPXIoODQpLE49cig0NiksTD1yKDExOCksVT1yKDE2Nyksej1yKDkpLEQ9cigyMCkscT16LmYsRj1ELmYsSz1pLlJhbmdlRXJyb3IsRz1pLlR5cGVFcnJvcixWPWkuVWludDhBcnJheSxIPVwiQXJyYXlCdWZmZXJcIixYPVwiU2hhcmVkXCIrSCxZPVwiQllURVNfUEVSX0VMRU1FTlRcIixXPVwicHJvdG90eXBlXCIsWj1BcnJheVtXXSxKPXMuQXJyYXlCdWZmZXIsJD1zLkRhdGFWaWV3LFE9TygwKSx0dD1PKDIpLGV0PU8oMykscnQ9Tyg0KSxudD1PKDUpLGl0PU8oNiksb3Q9UighMCksYXQ9UighMSksZnQ9VC52YWx1ZXMsc3Q9VC5rZXlzLHV0PVQuZW50cmllcyxodD1aLmxhc3RJbmRleE9mLGN0PVoucmVkdWNlLGR0PVoucmVkdWNlUmlnaHQsbHQ9Wi5qb2luLHB0PVouc29ydCxidD1aLnNsaWNlLHZ0PVoudG9TdHJpbmcseXQ9Wi50b0xvY2FsZVN0cmluZyxtdD1CKFwiaXRlcmF0b3JcIiksZ3Q9QihcInRvU3RyaW5nVGFnXCIpLHd0PUkoXCJ0eXBlZF9jb25zdHJ1Y3RvclwiKSxfdD1JKFwiZGVmX2NvbnN0cnVjdG9yXCIpLE10PWYuQ09OU1RSLFN0PWYuVFlQRUQsRXQ9Zi5WSUVXLEF0PVwiV3JvbmcgbGVuZ3RoIVwiLGt0PU8oMSxmdW5jdGlvbih0LGUpe3JldHVybiBQdChQKHQsdFtfdF0pLGUpfSkseHQ9byhmdW5jdGlvbigpe3JldHVybiAxPT09bmV3IFYobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXX0pLEl0PSEhViYmISFWW1ddLnNldCYmbyhmdW5jdGlvbigpe25ldyBWKDEpLnNldCh7fSl9KSxCdD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXQpdGhyb3cgRyhBdCk7dmFyIHI9K3Qsbj1iKHQpO2lmKGUmJiFnKHIsbikpdGhyb3cgSyhBdCk7cmV0dXJuIG59LE90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9cCh0KTtpZihyPDB8fHIlZSl0aHJvdyBLKFwiV3Jvbmcgb2Zmc2V0IVwiKTtyZXR1cm4gcn0sUnQ9ZnVuY3Rpb24odCl7aWYoXyh0KSYmU3QgaW4gdClyZXR1cm4gdDt0aHJvdyBHKHQrXCIgaXMgbm90IGEgdHlwZWQgYXJyYXkhXCIpfSxQdD1mdW5jdGlvbih0LGUpe2lmKCEoXyh0KSYmd3QgaW4gdCkpdGhyb3cgRyhcIkl0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIVwiKTtyZXR1cm4gbmV3IHQoZSl9LFR0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGp0KFAodCx0W190XSksZSl9LGp0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aCxpPVB0KHQsbik7bj5yOylpW3JdPWVbcisrXTtyZXR1cm4gaX0sQ3Q9ZnVuY3Rpb24odCxlLHIpe3EodCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZFtyXX19KX0sTnQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksbyxhLGY9TSh0KSxzPWFyZ3VtZW50cy5sZW5ndGgsaD1zPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxjPXZvaWQgMCE9PWgsZD14KGYpO2lmKHZvaWQgMCE9ZCYmIVMoZCkpe2ZvcihhPWQuY2FsbChmKSxuPVtdLGU9MDshKG89YS5uZXh0KCkpLmRvbmU7ZSsrKW4ucHVzaChvLnZhbHVlKTtmPW59Zm9yKGMmJnM+MiYmKGg9dShoLGFyZ3VtZW50c1syXSwyKSksZT0wLHI9YihmLmxlbmd0aCksaT1QdCh0aGlzLHIpO3I+ZTtlKyspaVtlXT1jP2goZltlXSxlKTpmW2VdO3JldHVybiBpfSxMdD1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxyPVB0KHRoaXMsZSk7ZT50OylyW3RdPWFyZ3VtZW50c1t0KytdO3JldHVybiByfSxVdD0hIVYmJm8oZnVuY3Rpb24oKXt5dC5jYWxsKG5ldyBWKDEpKX0pLHp0PWZ1bmN0aW9uKCl7cmV0dXJuIHl0LmFwcGx5KFV0P2J0LmNhbGwoUnQodGhpcykpOlJ0KHRoaXMpLGFyZ3VtZW50cyl9LER0PXtjb3B5V2l0aGluOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFUuY2FsbChSdCh0aGlzKSx0LGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gcnQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGZpbGw6ZnVuY3Rpb24odCl7cmV0dXJuIEwuYXBwbHkoUnQodGhpcyksYXJndW1lbnRzKX0sZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBUdCh0aGlzLHR0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKX0sZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gbnQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGZpbmRJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gaXQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGZvckVhY2g6ZnVuY3Rpb24odCl7UShSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0saW5kZXhPZjpmdW5jdGlvbih0KXtyZXR1cm4gYXQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGluY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBvdChSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0sam9pbjpmdW5jdGlvbih0KXtyZXR1cm4gbHQuYXBwbHkoUnQodGhpcyksYXJndW1lbnRzKX0sbGFzdEluZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGh0LmFwcGx5KFJ0KHRoaXMpLGFyZ3VtZW50cyl9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4ga3QoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LHJlZHVjZTpmdW5jdGlvbih0KXtyZXR1cm4gY3QuYXBwbHkoUnQodGhpcyksYXJndW1lbnRzKX0scmVkdWNlUmlnaHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGR0LmFwcGx5KFJ0KHRoaXMpLGFyZ3VtZW50cyl9LHJldmVyc2U6ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLHI9UnQoZSkubGVuZ3RoLG49TWF0aC5mbG9vcihyLzIpLGk9MDtpPG47KXQ9ZVtpXSxlW2krK109ZVstLXJdLGVbcl09dDtyZXR1cm4gZX0sc29tZTpmdW5jdGlvbih0KXtyZXR1cm4gZXQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHB0LmNhbGwoUnQodGhpcyksdCl9LHN1YmFycmF5OmZ1bmN0aW9uKHQsZSl7dmFyIHI9UnQodGhpcyksbj1yLmxlbmd0aCxpPXYodCxuKTtyZXR1cm4gbmV3KFAocixyW190XSkpKHIuYnVmZmVyLHIuYnl0ZU9mZnNldCtpKnIuQllURVNfUEVSX0VMRU1FTlQsYigodm9pZCAwPT09ZT9uOnYoZSxuKSktaSkpfX0scXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVHQodGhpcyxidC5jYWxsKFJ0KHRoaXMpLHQsZSkpfSxGdD1mdW5jdGlvbih0KXtSdCh0aGlzKTt2YXIgZT1PdChhcmd1bWVudHNbMV0sMSkscj10aGlzLmxlbmd0aCxuPU0odCksaT1iKG4ubGVuZ3RoKSxvPTA7aWYoaStlPnIpdGhyb3cgSyhBdCk7Zm9yKDtvPGk7KXRoaXNbZStvXT1uW28rK119LEt0PXtlbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHV0LmNhbGwoUnQodGhpcykpfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHN0LmNhbGwoUnQodGhpcykpfSx2YWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZnQuY2FsbChSdCh0aGlzKSl9fSxHdD1mdW5jdGlvbih0LGUpe3JldHVybiBfKHQpJiZ0W1N0XSYmXCJzeW1ib2xcIiE9dHlwZW9mIGUmJmUgaW4gdCYmU3RyaW5nKCtlKT09U3RyaW5nKGUpfSxWdD1mdW5jdGlvbih0LGUpe3JldHVybiBHdCh0LGU9eShlLCEwKSk/YygyLHRbZV0pOkYodCxlKX0sSHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiEoR3QodCxlPXkoZSwhMCkpJiZfKHIpJiZtKHIsXCJ2YWx1ZVwiKSl8fG0ocixcImdldFwiKXx8bShyLFwic2V0XCIpfHxyLmNvbmZpZ3VyYWJsZXx8bShyLFwid3JpdGFibGVcIikmJiFyLndyaXRhYmxlfHxtKHIsXCJlbnVtZXJhYmxlXCIpJiYhci5lbnVtZXJhYmxlP3EodCxlLHIpOih0W2VdPXIudmFsdWUsdCl9O010fHwoRC5mPVZ0LHouZj1IdCksYShhLlMrYS5GKiFNdCxcIk9iamVjdFwiLHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6VnQsZGVmaW5lUHJvcGVydHk6SHR9KSxvKGZ1bmN0aW9uKCl7dnQuY2FsbCh7fSl9KSYmKHZ0PXl0PWZ1bmN0aW9uKCl7cmV0dXJuIGx0LmNhbGwodGhpcyl9KTt2YXIgWHQ9bCh7fSxEdCk7bChYdCxLdCksZChYdCxtdCxLdC52YWx1ZXMpLGwoWHQse3NsaWNlOnF0LHNldDpGdCxjb25zdHJ1Y3RvcjpmdW5jdGlvbigpe30sdG9TdHJpbmc6dnQsdG9Mb2NhbGVTdHJpbmc6enR9KSxDdChYdCxcImJ1ZmZlclwiLFwiYlwiKSxDdChYdCxcImJ5dGVPZmZzZXRcIixcIm9cIiksQ3QoWHQsXCJieXRlTGVuZ3RoXCIsXCJsXCIpLEN0KFh0LFwibGVuZ3RoXCIsXCJlXCIpLHEoWHQsZ3Qse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1N0XX19KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7cz0hIXM7dmFyIHU9dCsocz9cIkNsYW1wZWRcIjpcIlwiKStcIkFycmF5XCIsYz1cIlVpbnQ4QXJyYXlcIiE9dSxsPVwiZ2V0XCIrdCxwPVwic2V0XCIrdCx2PWlbdV0seT12fHx7fSxtPXYmJkEodiksZz0hdnx8IWYuQUJWLE09e30sUz12JiZ2W1ddLHg9ZnVuY3Rpb24odCxyKXt2YXIgbj10Ll9kO3JldHVybiBuLnZbbF0ociplK24ubyx4dCl9LEk9ZnVuY3Rpb24odCxyLG4pe3ZhciBpPXQuX2Q7cyYmKG49KG49TWF0aC5yb3VuZChuKSk8MD8wOm4+MjU1PzI1NToyNTUmbiksaS52W3BdKHIqZStpLm8sbix4dCl9LEI9ZnVuY3Rpb24odCxlKXtxKHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHgodGhpcyxlKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBJKHRoaXMsZSx0KX0sZW51bWVyYWJsZTohMH0pfTtnPyh2PXIoZnVuY3Rpb24odCxyLG4saSl7aCh0LHYsdSxcIl9kXCIpO3ZhciBvLGEsZixzLGM9MCxsPTA7aWYoXyhyKSl7aWYoIShyIGluc3RhbmNlb2YgSnx8KHM9dyhyKSk9PUh8fHM9PVgpKXJldHVybiBTdCBpbiByP2p0KHYscik6TnQuY2FsbCh2LHIpO289cixsPU90KG4sZSk7dmFyIHA9ci5ieXRlTGVuZ3RoO2lmKHZvaWQgMD09PWkpe2lmKHAlZSl0aHJvdyBLKEF0KTtpZihhPXAtbCxhPDApdGhyb3cgSyhBdCl9ZWxzZSBpZihhPWIoaSkqZSxhK2w+cCl0aHJvdyBLKEF0KTtmPWEvZX1lbHNlIGY9QnQociwhMCksYT1mKmUsbz1uZXcgSihhKTtmb3IoZCh0LFwiX2RcIix7YjpvLG86bCxsOmEsZTpmLHY6bmV3ICQobyl9KTtjPGY7KUIodCxjKyspfSksUz12W1ddPUUoWHQpLGQoUyxcImNvbnN0cnVjdG9yXCIsdikpOkMoZnVuY3Rpb24odCl7bmV3IHYobnVsbCksbmV3IHYodCl9LCEwKXx8KHY9cihmdW5jdGlvbih0LHIsbixpKXtoKHQsdix1KTt2YXIgbztyZXR1cm4gXyhyKT9yIGluc3RhbmNlb2YgSnx8KG89dyhyKSk9PUh8fG89PVg/dm9pZCAwIT09aT9uZXcgeShyLE90KG4sZSksaSk6dm9pZCAwIT09bj9uZXcgeShyLE90KG4sZSkpOm5ldyB5KHIpOlN0IGluIHI/anQodixyKTpOdC5jYWxsKHYscik6bmV3IHkoQnQocixjKSl9KSxRKG0hPT1GdW5jdGlvbi5wcm90b3R5cGU/ayh5KS5jb25jYXQoayhtKSk6ayh5KSxmdW5jdGlvbih0KXt0IGluIHZ8fGQodix0LHlbdF0pfSksdltXXT1TLG58fChTLmNvbnN0cnVjdG9yPXYpKTt2YXIgTz1TW210XSxSPSEhTyYmKFwidmFsdWVzXCI9PU8ubmFtZXx8dm9pZCAwPT1PLm5hbWUpLFA9S3QudmFsdWVzO2Qodix3dCwhMCksZChTLFN0LHUpLGQoUyxFdCwhMCksZChTLF90LHYpLChzP25ldyB2KDEpW2d0XT09dTpndCBpbiBTKXx8cShTLGd0LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX19KSxNW3VdPXYsYShhLkcrYS5XK2EuRioodiE9eSksTSksYShhLlMsdSx7QllURVNfUEVSX0VMRU1FTlQ6ZSxmcm9tOk50LG9mOkx0fSksWSBpbiBTfHxkKFMsWSxlKSxhKGEuUCx1LER0KSxOKHUpLGEoYS5QK2EuRipJdCx1LHtzZXQ6RnR9KSxhKGEuUCthLkYqIVIsdSxLdCksYShhLlArYS5GKihTLnRvU3RyaW5nIT12dCksdSx7dG9TdHJpbmc6dnR9KSxhKGEuUCthLkYqbyhmdW5jdGlvbigpe25ldyB2KDEpLnNsaWNlKCl9KSx1LHtzbGljZTpxdH0pLGEoYS5QK2EuRioobyhmdW5jdGlvbigpe3JldHVyblsxLDJdLnRvTG9jYWxlU3RyaW5nKCkhPW5ldyB2KFsxLDJdKS50b0xvY2FsZVN0cmluZygpfSl8fCFvKGZ1bmN0aW9uKCl7Uy50b0xvY2FsZVN0cmluZy5jYWxsKFsxLDJdKX0pKSx1LHt0b0xvY2FsZVN0cmluZzp6dH0pLGpbdV09Uj9POlAsbnx8Unx8ZChTLG10LFApfX1lbHNlIHQuZXhwb3J0cz1mdW5jdGlvbigpe319LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ4KShcIm1ldGFcIiksaT1yKDYpLG89cigxMiksYT1yKDkpLmYsZj0wLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdT0hcig1KShmdW5jdGlvbigpe3JldHVybiBzKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksaD1mdW5jdGlvbih0KXthKHQsbix7dmFsdWU6e2k6XCJPXCIrICsrZix3Ont9fX0pfSxjPWZ1bmN0aW9uKHQsZSl7aWYoIWkodCkpcmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQ/dDooXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJTXCI6XCJQXCIpK3Q7aWYoIW8odCxuKSl7aWYoIXModCkpcmV0dXJuXCJGXCI7aWYoIWUpcmV0dXJuXCJFXCI7aCh0KX1yZXR1cm4gdFtuXS5pfSxkPWZ1bmN0aW9uKHQsZSl7aWYoIW8odCxuKSl7aWYoIXModCkpcmV0dXJuITA7aWYoIWUpcmV0dXJuITE7aCh0KX1yZXR1cm4gdFtuXS53fSxsPWZ1bmN0aW9uKHQpe3JldHVybiB1JiZwLk5FRUQmJnModCkmJiFvKHQsbikmJmgodCksdH0scD10LmV4cG9ydHM9e0tFWTpuLE5FRUQ6ITEsZmFzdEtleTpjLGdldFdlYWs6ZCxvbkZyZWV6ZTpsfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19fSxmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguY2VpbCxuPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/bjpyKSh0KX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI7cj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpO3RyeXtyPXJ8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKXx8KDAsZXZhbCkoXCJ0aGlzXCIpfWNhdGNoKHQpe1wib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJihyPXdpbmRvdyl9dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCEodCBpbnN0YW5jZW9mIGUpfHx2b2lkIDAhPT1uJiZuIGluIHQpdGhyb3cgVHlwZUVycm9yKHIrXCI6IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSExfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzKSxpPXIoMTgwKSxvPXIoMTIxKSxhPXIoMTMzKShcIklFX1BST1RPXCIpLGY9ZnVuY3Rpb24oKXt9LHM9XCJwcm90b3R5cGVcIix1PWZ1bmN0aW9uKCl7dmFyIHQsZT1yKDEyMCkoXCJpZnJhbWVcIiksbj1vLmxlbmd0aCxpPVwiPFwiLGE9XCI+XCI7Zm9yKGUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixyKDEyMykuYXBwZW5kQ2hpbGQoZSksZS5zcmM9XCJqYXZhc2NyaXB0OlwiLHQ9ZS5jb250ZW50V2luZG93LmRvY3VtZW50LHQub3BlbigpLHQud3JpdGUoaStcInNjcmlwdFwiK2ErXCJkb2N1bWVudC5GPU9iamVjdFwiK2krXCIvc2NyaXB0XCIrYSksdC5jbG9zZSgpLHU9dC5GO24tLTspZGVsZXRlIHVbc11bb1tuXV07cmV0dXJuIHUoKX07dC5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIG51bGwhPT10PyhmW3NdPW4odCkscj1uZXcgZixmW3NdPW51bGwsclthXT10KTpyPXUoKSx2b2lkIDA9PT1lP3I6aShyLGUpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTgyKSxpPXIoMTIxKS5jb25jYXQoXCJsZW5ndGhcIixcInByb3RvdHlwZVwiKTtlLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxODIpLGk9cigxMjEpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgaSBpbiBlKW4odCxpLGVbaV0scik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0KSxpPXIoOSksbz1yKDgpLGE9cig3KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07byYmZSYmIWVbYV0mJmkuZihlLGEse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM4KSxpPU1hdGgubWF4LG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9bih0KSx0PDA/aSh0K2UsMCk6byh0LGUpfX0sZnVuY3Rpb24odCxlKXt2YXIgcj0wLG49TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJTeW1ib2woXCIuY29uY2F0KHZvaWQgMD09PXQ/XCJcIjp0LFwiKV9cIiwoKytyK24pLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLnV0aWxzPXIoNTI3KSxuLmNvbW1vbj1yKDUyMyksbi5zaGE9cig1MjYpLG4ucmlwZW1kPXIoNTI1KSxuLmhtYWM9cig1MjQpLG4uc2hhMT1uLnNoYS5zaGExLG4uc2hhMjU2PW4uc2hhLnNoYTI1NixuLnNoYTIyND1uLnNoYS5zaGEyMjQsbi5zaGEzODQ9bi5zaGEuc2hhMzg0LG4uc2hhNTEyPW4uc2hhLnNoYTUxMixuLnJpcGVtZDE2MD1uLnJpcGVtZC5yaXBlbWQxNjB9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24udXRpbHM9cig1NjQpLG4uY29tbW9uPXIoNTYwKSxuLnNoYT1yKDU2Myksbi5yaXBlbWQ9cig1NjIpLG4uaG1hYz1yKDU2MSksbi5zaGExPW4uc2hhLnNoYTEsbi5zaGEyNTY9bi5zaGEuc2hhMjU2LG4uc2hhMjI0PW4uc2hhLnNoYTIyNCxuLnNoYTM4ND1uLnNoYS5zaGEzODQsbi5zaGE1MTI9bi5zaGEuc2hhNTEyLG4ucmlwZW1kMTYwPW4ucmlwZW1kLnJpcGVtZDE2MH0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh1LmNhbGwodGhpcyx0KSxoLmNhbGwodGhpcyx0KSx0JiZ0LnJlYWRhYmxlPT09ITEmJih0aGlzLnJlYWRhYmxlPSExKSx0JiZ0LndyaXRhYmxlPT09ITEmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsdCYmdC5hbGxvd0hhbGZPcGVuPT09ITEmJih0aGlzLmFsbG93SGFsZk9wZW49ITEpLHZvaWQgdGhpcy5vbmNlKFwiZW5kXCIsaSkpOm5ldyBuKHQpfWZ1bmN0aW9uIGkoKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fGYobyx0aGlzKX1mdW5jdGlvbiBvKHQpe3QuZW5kKCl9dmFyIGE9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX07dC5leHBvcnRzPW47dmFyIGY9cigxNTcpLHM9cig3Myk7cy5pbmhlcml0cz1yKDc0KTt2YXIgdT1yKDI1MCksaD1yKDE1NSk7cy5pbmhlcml0cyhuLHUpO2Zvcih2YXIgYz1hKGgucHJvdG90eXBlKSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBsPWNbZF07bi5wcm90b3R5cGVbbF18fChuLnByb3RvdHlwZVtsXT1oLnByb3RvdHlwZVtsXSl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtpZih0JiYhcyh0KSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIit0KX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIG8odCl7dGhpcy5jaGFyUmVjZWl2ZWQ9dC5sZW5ndGglMix0aGlzLmNoYXJMZW5ndGg9dGhpcy5jaGFyUmVjZWl2ZWQ/MjowfWZ1bmN0aW9uIGEodCl7dGhpcy5jaGFyUmVjZWl2ZWQ9dC5sZW5ndGglMyx0aGlzLmNoYXJMZW5ndGg9dGhpcy5jaGFyUmVjZWl2ZWQ/MzowfXZhciBmPXIoMSkuQnVmZmVyLHM9Zi5pc0VuY29kaW5nfHxmdW5jdGlvbih0KXtzd2l0Y2godCYmdC50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOmNhc2VcInJhd1wiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSx1PWUuU3RyaW5nRGVjb2Rlcj1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5lbmNvZGluZz0odHx8XCJ1dGY4XCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXS8sXCJcIiksbih0KSx0aGlzLmVuY29kaW5nKXtjYXNlXCJ1dGY4XCI6dGhpcy5zdXJyb2dhdGVTaXplPTM7YnJlYWs7Y2FzZVwidWNzMlwiOmNhc2VcInV0ZjE2bGVcIjp0aGlzLnN1cnJvZ2F0ZVNpemU9Mix0aGlzLmRldGVjdEluY29tcGxldGVDaGFyPW87YnJlYWs7Y2FzZVwiYmFzZTY0XCI6dGhpcy5zdXJyb2dhdGVTaXplPTMsdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhcj1hO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHZvaWQodGhpcy53cml0ZT1pKX10aGlzLmNoYXJCdWZmZXI9bmV3IGYoNiksdGhpcy5jaGFyUmVjZWl2ZWQ9MCx0aGlzLmNoYXJMZW5ndGg9MH07dS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVwiXCI7dGhpcy5jaGFyTGVuZ3RoOyl7dmFyIHI9dC5sZW5ndGg+PXRoaXMuY2hhckxlbmd0aC10aGlzLmNoYXJSZWNlaXZlZD90aGlzLmNoYXJMZW5ndGgtdGhpcy5jaGFyUmVjZWl2ZWQ6dC5sZW5ndGg7aWYodC5jb3B5KHRoaXMuY2hhckJ1ZmZlcix0aGlzLmNoYXJSZWNlaXZlZCwwLHIpLHRoaXMuY2hhclJlY2VpdmVkKz1yLHRoaXMuY2hhclJlY2VpdmVkPHRoaXMuY2hhckxlbmd0aClyZXR1cm5cIlwiO3Q9dC5zbGljZShyLHQubGVuZ3RoKSxlPXRoaXMuY2hhckJ1ZmZlci5zbGljZSgwLHRoaXMuY2hhckxlbmd0aCkudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7dmFyIG49ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpO2lmKCEobj49NTUyOTYmJm48PTU2MzE5KSl7aWYodGhpcy5jaGFyUmVjZWl2ZWQ9dGhpcy5jaGFyTGVuZ3RoPTAsMD09PXQubGVuZ3RoKXJldHVybiBlO2JyZWFrfXRoaXMuY2hhckxlbmd0aCs9dGhpcy5zdXJyb2dhdGVTaXplLGU9XCJcIn10aGlzLmRldGVjdEluY29tcGxldGVDaGFyKHQpO3ZhciBpPXQubGVuZ3RoO3RoaXMuY2hhckxlbmd0aCYmKHQuY29weSh0aGlzLmNoYXJCdWZmZXIsMCx0Lmxlbmd0aC10aGlzLmNoYXJSZWNlaXZlZCxpKSxpLT10aGlzLmNoYXJSZWNlaXZlZCksZSs9dC50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsaSk7dmFyIGk9ZS5sZW5ndGgtMSxuPWUuY2hhckNvZGVBdChpKTtpZihuPj01NTI5NiYmbjw9NTYzMTkpe3ZhciBvPXRoaXMuc3Vycm9nYXRlU2l6ZTtyZXR1cm4gdGhpcy5jaGFyTGVuZ3RoKz1vLHRoaXMuY2hhclJlY2VpdmVkKz1vLHRoaXMuY2hhckJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlcixvLDAsbyksdC5jb3B5KHRoaXMuY2hhckJ1ZmZlciwwLDAsbyksZS5zdWJzdHJpbmcoMCxpKX1yZXR1cm4gZX0sdS5wcm90b3R5cGUuZGV0ZWN0SW5jb21wbGV0ZUNoYXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoPj0zPzM6dC5sZW5ndGg7ZT4wO2UtLSl7dmFyIHI9dFt0Lmxlbmd0aC1lXTtpZigxPT1lJiZyPj41PT02KXt0aGlzLmNoYXJMZW5ndGg9MjticmVha31pZihlPD0yJiZyPj40PT0xNCl7dGhpcy5jaGFyTGVuZ3RoPTM7YnJlYWt9aWYoZTw9MyYmcj4+Mz09MzApe3RoaXMuY2hhckxlbmd0aD00O2JyZWFrfX10aGlzLmNoYXJSZWNlaXZlZD1lfSx1LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odCl7dmFyIGU9XCJcIjtpZih0JiZ0Lmxlbmd0aCYmKGU9dGhpcy53cml0ZSh0KSksdGhpcy5jaGFyUmVjZWl2ZWQpe3ZhciByPXRoaXMuY2hhclJlY2VpdmVkLG49dGhpcy5jaGFyQnVmZmVyLGk9dGhpcy5lbmNvZGluZztlKz1uLnNsaWNlKDAscikudG9TdHJpbmcoaSl9cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbnJldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoNjIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDcpKFwidW5zY29wYWJsZXNcIiksaT1BcnJheS5wcm90b3R5cGU7dm9pZCAwPT1pW25dJiZyKDE0KShpLG4se30pLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtpW25dW3RdPSEwfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzMpLGk9cigxNzYpLG89cigxMjUpLGE9cigzKSxmPXIoMTApLHM9cigxNDIpLHU9e30saD17fSxlPXQuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjLGQpe3ZhciBsLHAsYix2LHk9ZD9mdW5jdGlvbigpe3JldHVybiB0fTpzKHQpLG09bihyLGMsZT8yOjEpLGc9MDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB5KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBpdGVyYWJsZSFcIik7aWYobyh5KSl7Zm9yKGw9Zih0Lmxlbmd0aCk7bD5nO2crKylpZih2PWU/bShhKHA9dFtnXSlbMF0scFsxXSk6bSh0W2ddKSx2PT09dXx8dj09PWgpcmV0dXJuIHZ9ZWxzZSBmb3IoYj15LmNhbGwodCk7IShwPWIubmV4dCgpKS5kb25lOylpZih2PWkoYixtLHAudmFsdWUsZSksdj09PXV8fHY9PT1oKXJldHVybiB2fTtlLkJSRUFLPXUsZS5SRVRVUk49aH0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e319LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDkpLmYsaT1yKDEyKSxvPXIoNykoXCJ0b1N0cmluZ1RhZ1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3QmJiFpKHQ9cj90OnQucHJvdG90eXBlLG8pJiZuKHQsbyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigyNCksbz1yKDUpLGE9cigxMzgpLGY9XCJbXCIrYStcIl1cIixzPVwi4oCLwoVcIix1PVJlZ0V4cChcIl5cIitmK2YrXCIqXCIpLGg9UmVnRXhwKGYrZitcIiokXCIpLGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGY9byhmdW5jdGlvbigpe3JldHVybiEhYVt0XSgpfHxzW3RdKCkhPXN9KSx1PWlbdF09Zj9lKGQpOmFbdF07ciYmKGlbcl09dSksbihuLlArbi5GKmYsXCJTdHJpbmdcIixpKX0sZD1jLnRyaW09ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1TdHJpbmcoaSh0KSksMSZlJiYodD10LnJlcGxhY2UodSxcIlwiKSksMiZlJiYodD10LnJlcGxhY2UoaCxcIlwiKSksdH07dC5leHBvcnRzPWN9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt1LmNhbGwodGhpcyxcImRpZ2VzdFwiKSx0aGlzLl9oYXNoPXQsdGhpcy5idWZmZXJzPVtdfWZ1bmN0aW9uIGkodCl7dS5jYWxsKHRoaXMsXCJkaWdlc3RcIiksdGhpcy5faGFzaD10fXZhciBvPXIoMiksYT1yKDEwNSksZj1yKDU2Nykscz1yKDU2OCksdT1yKDU2Nik7byhuLHUpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5idWZmZXJzLnB1c2godCl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PWUuY29uY2F0KHRoaXMuYnVmZmVycykscj10aGlzLl9oYXNoKHQpO3JldHVybiB0aGlzLmJ1ZmZlcnM9bnVsbCxyfSxvKGksdSksaS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9oYXNoLnVwZGF0ZSh0KX0saS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD10LnRvTG93ZXJDYXNlKCksXCJtZDVcIj09PXQ/bmV3IG4oYSk6XCJybWQxNjBcIj09PXR8fFwicmlwZW1kMTYwXCI9PT10P25ldyBuKGYpOm5ldyBpKHModCkpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIpe3RoaXMuX2Jsb2NrPW5ldyBlKHQpLHRoaXMuX2ZpbmFsU2l6ZT1yLHRoaXMuX2Jsb2NrU2l6ZT10LHRoaXMuX2xlbj0wLHRoaXMuX3M9MH1yLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHI9cnx8XCJ1dGY4XCIsdD1uZXcgZSh0LHIpKTtmb3IodmFyIG49dGhpcy5fbGVuKz10Lmxlbmd0aCxpPXRoaXMuX3N8fDAsbz0wLGE9dGhpcy5fYmxvY2s7aTxuOyl7Zm9yKHZhciBmPU1hdGgubWluKHQubGVuZ3RoLG8rdGhpcy5fYmxvY2tTaXplLWkldGhpcy5fYmxvY2tTaXplKSxzPWYtbyx1PTA7dTxzO3UrKylhW2kldGhpcy5fYmxvY2tTaXplK3VdPXRbdStvXTtpKz1zLG8rPXMsaSV0aGlzLl9ibG9ja1NpemU9PT0wJiZ0aGlzLl91cGRhdGUoYSl9cmV0dXJuIHRoaXMuX3M9aSx0aGlzfSxyLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIGU9OCp0aGlzLl9sZW47dGhpcy5fYmxvY2tbdGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZV09MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplKzEpLGUlKDgqdGhpcy5fYmxvY2tTaXplKT49OCp0aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpLHRoaXMuX2Jsb2NrLndyaXRlSW50MzJCRShlLHRoaXMuX2Jsb2NrU2l6ZS00KTt2YXIgcj10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spfHx0aGlzLl9oYXNoKCk7cmV0dXJuIHQ/ci50b1N0cmluZyh0KTpyfSxyLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzXCIpfSx0LmV4cG9ydHM9cn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXFxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMVwiKX1mdW5jdGlvbiBvKHQsaSl7aWYodD42NTUzNil0aHJvdyBuZXcgRXJyb3IoXCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzXCIpO3ZhciBvPW5ldyBlLlVpbnQ4QXJyYXkodCk7dD4wJiZhLmdldFJhbmRvbVZhbHVlcyhvKTt2YXIgZj1uZXcgcihvLmJ1ZmZlcik7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgaT9uLm5leHRUaWNrKGZ1bmN0aW9uKCl7aShudWxsLGYpfSk6Zn12YXIgYT1lLmNyeXB0b3x8ZS5tc0NyeXB0bzthJiZhLmdldFJhbmRvbVZhbHVlcz90LmV4cG9ydHM9bzp0LmV4cG9ydHM9aX0pLmNhbGwoZSxyKDM5KSxyKDEpLkJ1ZmZlcixyKDI2KSl9LGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIGkodCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKTt2YXIgaT1uKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmNhbGwodGhpcykpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxcIm1lc3NhZ2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6dm9pZCAwIT09dD9TdHJpbmcodCk6XCJcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwibmFtZVwiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTppLmNvbnN0cnVjdG9yLm5hbWV9KSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoaSxpLmNvbnN0cnVjdG9yKSxpfXJldHVybiBpKGUsdCksZX0oRXJyb3IpO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMTE1KSxhPXIoNzUpLGY9cig5MCkscz1yKDkxKSx1PXIoMjAxKSxoPXIoMTE2KSxjPXIoMTU5KSxkPXIoMTEzKSxsPS9eY2Y6KFsxLTlhLWZdWzAtOWEtZl17MCwzfXwwKTpbYS16QS1aMC05Xy1dKiQvLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpfXJldHVybiBpKHQsW3trZXk6XCJnZXRUeXBlSWRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLlRZUEVfSUR9fSx7a2V5OlwiZ2V0Qml0bWFza1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuRkVBVFVSRV9CSVRNQVNLfX0se2tleTpcImdldENvbmRpdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGE7cmV0dXJuIHQuc2V0VHlwZUlkKHRoaXMuZ2V0VHlwZUlkKCkpLHQuc2V0Qml0bWFzayh0aGlzLmdldEJpdG1hc2soKSksdC5zZXRIYXNoKHRoaXMuZ2VuZXJhdGVIYXNoKCkpLHQuc2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgodGhpcy5jYWxjdWxhdGVNYXhGdWxmaWxsbWVudExlbmd0aCgpKSx0fX0se2tleTpcImdldENvbmRpdGlvblVyaVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uKCkuc2VyaWFsaXplVXJpKCl9fSx7a2V5OlwiZ2V0Q29uZGl0aW9uQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDb25kaXRpb24oKS5zZXJpYWxpemVCaW5hcnkoKX19LHtrZXk6XCJnZW5lcmF0ZUhhc2hcIix2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIlRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSBhIHN1YmNsYXNzXCIpfX0se2tleTpcImNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZjtyZXR1cm4gdGhpcy53cml0ZVBheWxvYWQodCksdC5nZXRTaXplKCl9fSx7a2V5Olwic2VyaWFsaXplVXJpXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5cImNmOlwiK3RoaXMuZ2V0VHlwZUlkKCkudG9TdHJpbmcoMTYpK1wiOlwiK2guZW5jb2RlKHRoaXMuc2VyaWFsaXplUGF5bG9hZCgpKX19LHtrZXk6XCJzZXJpYWxpemVCaW5hcnlcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBzO3JldHVybiB0LndyaXRlVUludDE2KHRoaXMuZ2V0VHlwZUlkKCkpLHQud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLnNlcmlhbGl6ZVBheWxvYWQoKSksdC5nZXRCdWZmZXIoKX19LHtrZXk6XCJzZXJpYWxpemVQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcztyZXR1cm4gdGhpcy53cml0ZVBheWxvYWQodCksdC5nZXRCdWZmZXIoKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfX1dLFt7a2V5OlwiZnJvbVVyaVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiB0KXJldHVybiBlO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcIlNlcmlhbGl6ZWQgZnVsZmlsbG1lbnQgbXVzdCBiZSBhIHN0cmluZ1wiKTt2YXIgcj1lLnNwbGl0KFwiOlwiKTtpZihcImNmXCIhPT1yWzBdKXRocm93IG5ldyBjKCdTZXJpYWxpemVkIGZ1bGZpbGxtZW50IG11c3Qgc3RhcnQgd2l0aCBcImNmOlwiJyk7aWYoIXQuUkVHRVguZXhlYyhlKSl0aHJvdyBuZXcgZChcIkludmFsaWQgZnVsZmlsbG1lbnQgZm9ybWF0XCIpO3ZhciBuPXBhcnNlSW50KHJbMV0sMTYpLGk9aC5kZWNvZGUoclsyXSksYT1vLmdldENsYXNzRnJvbVR5cGVJZChuKSxmPW5ldyBhO3JldHVybiBmLnBhcnNlUGF5bG9hZCh1LmZyb20oaSksaS5sZW5ndGgpLGZ9fSx7a2V5OlwiZnJvbUJpbmFyeVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q9dS5mcm9tKHQpO3ZhciBlPW8uZ2V0Q2xhc3NGcm9tVHlwZUlkKHQucmVhZFVJbnQxNigpKSxyPW5ldyBlLG49dC5yZWFkTGVuZ3RoUHJlZml4KCk7cmV0dXJuIHIucGFyc2VQYXlsb2FkKHQsbikscn19XSksdH0oKTtwLlJFR0VYPWwsdC5leHBvcnRzPXB9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIzKSxpPXIoNykoXCJ0b1N0cmluZ1RhZ1wiKSxvPVwiQXJndW1lbnRzXCI9PW4oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxhPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKHQpe319O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGY7cmV0dXJuIHZvaWQgMD09PXQ/XCJVbmRlZmluZWRcIjpudWxsPT09dD9cIk51bGxcIjpcInN0cmluZ1wiPT10eXBlb2Yocj1hKGU9T2JqZWN0KHQpLGkpKT9yOm8/bihlKTpcIk9iamVjdFwiPT0oZj1uKGUpKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jYWxsZWU/XCJBcmd1bWVudHNcIjpmfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjMpO3QuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm5cIlN0cmluZ1wiPT1uKHQpP3Quc3BsaXQoXCJcIik6T2JqZWN0KHQpfX0sZnVuY3Rpb24odCxlKXtlLmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLHIubGVuZ3RoKSxpPW5ldyBlKG4pLG89MDtvPG47KytvKWlbb109dFtvXV5yW29dO3JldHVybiBpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uUmVwb3J0ZXI9cig1MzIpLlJlcG9ydGVyLG4uRGVjb2RlckJ1ZmZlcj1yKDIxNCkuRGVjb2RlckJ1ZmZlcixuLkVuY29kZXJCdWZmZXI9cigyMTQpLkVuY29kZXJCdWZmZXIsbi5Ob2RlPXIoNTMxKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsci5sZW5ndGgpLGk9bmV3IGUobiksbz0wO288bjsrK28paVtvXT10W29dXnJbb107cmV0dXJuIGl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gby5pc0JOKHQpP3Q6KHRoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLHZvaWQobnVsbCE9PXQmJihcImxlXCIhPT1lJiZcImJlXCIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHxcImJlXCIpKSkpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288aTtvKyspe3ZhciBhPXQuY2hhckNvZGVBdChvKS00ODtuPDw9NCxufD1hPj00OSYmYTw9NTQ/YS00OSsxMDphPj0xNyYmYTw9MjI/YS0xNysxMDoxNSZhfXJldHVybiBufWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxvO2ErKyl7dmFyIGY9dC5jaGFyQ29kZUF0KGEpLTQ4O2kqPW4saSs9Zj49NDk/Zi00OSsxMDpmPj0xNz9mLTE3KzEwOmZ9cmV0dXJuIGl9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX1mdW5jdGlvbiB1KHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sbz0wfGUud29yZHNbMF0sYT1pKm8sZj02NzEwODg2MyZhLHM9YS82NzEwODg2NHwwO3Iud29yZHNbMF09Zjtmb3IodmFyIHU9MTt1PG47dSsrKXtmb3IodmFyIGg9cz4+PjI2LGM9NjcxMDg4NjMmcyxkPU1hdGgubWluKHUsZS5sZW5ndGgtMSksbD1NYXRoLm1heCgwLHUtdC5sZW5ndGgrMSk7bDw9ZDtsKyspe3ZhciBwPXUtbHwwO2k9MHx0LndvcmRzW3BdLG89MHxlLndvcmRzW2xdLGE9aSpvK2MsaCs9YS82NzEwODg2NHwwLGM9NjcxMDg4NjMmYX1yLndvcmRzW3VdPTB8YyxzPTB8aH1yZXR1cm4gMCE9PXM/ci53b3Jkc1t1XT0wfHM6ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gaCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLG89MDtvPHIubGVuZ3RoLTE7bysrKXt2YXIgYT1pO2k9MDtmb3IodmFyIGY9NjcxMDg4NjMmbixzPU1hdGgubWluKG8sZS5sZW5ndGgtMSksdT1NYXRoLm1heCgwLG8tdC5sZW5ndGgrMSk7dTw9czt1Kyspe3ZhciBoPW8tdSxjPTB8dC53b3Jkc1toXSxkPTB8ZS53b3Jkc1t1XSxsPWMqZCxwPTY3MTA4ODYzJmw7YT1hKyhsLzY3MTA4ODY0fDApfDAscD1wK2Z8MCxmPTY3MTA4ODYzJnAsYT1hKyhwPj4+MjYpfDAsaSs9YT4+PjI2LGEmPTY3MTA4ODYzfXIud29yZHNbb109ZixuPWEsYT1pfXJldHVybiAwIT09bj9yLndvcmRzW29dPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ubXVscCh0LGUscil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIGwodCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IG8oZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IG8oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHAoKXtsLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIGIoKXtsLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIHYoKXtsLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIHkoKXtsLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIG0odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPW8uX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gZyh0KXttLmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT09MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgbygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1cIm9iamVjdFwiPT10eXBlb2YgdD90LmV4cG9ydHM9bzplLkJOPW8sby5CTj1vLG8ud29yZFNpemU9MjY7dmFyIHc7dHJ5e3c9cigxKS5CdWZmZXJ9Y2F0Y2godCl7fW8uaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG98fG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PW8ud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LG8ubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxvLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sby5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTtcImhleFwiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNiksdD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3ZhciBpPTA7XCItXCI9PT10WzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSxcIi1cIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBvLGEsZj0wO2lmKFwiYmVcIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxvPTA7aT49MDtpLT0zKWE9dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAsbz0wO2k8dC5sZW5ndGg7aSs9MylhPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLG89MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1hKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzLG8rPTI0LG8+PTI2JiYoby09MjYsbisrKTtyKzYhPT1lJiYoaT1hKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgbz10Lmxlbmd0aC1yLGE9byVuLHM9TWF0aC5taW4obyxvLWEpK3IsdT0wLGg9cjtoPHM7aCs9bil1PWYodCxoLGgrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpO2lmKDAhPT1hKXt2YXIgYz0xO2Zvcih1PWYodCxoLHQubGVuZ3RoLGUpLGg9MDtoPGE7aCsrKWMqPWU7dGhpcy5pbXVsbihjKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KX19LG8ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxvLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LG8ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9O3ZhciBfPVtcIlwiLFwiMFwiLFwiMDBcIixcIjAwMFwiLFwiMDAwMFwiLFwiMDAwMDBcIixcIjAwMDAwMFwiLFwiMDAwMDAwMFwiLFwiMDAwMDAwMDBcIixcIjAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiXSxNPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFM9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt0PXR8fDEwLGU9MHxlfHwxO3ZhciByO2lmKDE2PT09dHx8XCJoZXhcIj09PXQpe3I9XCJcIjtmb3IodmFyIGk9MCxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj10aGlzLndvcmRzW2FdLHM9KDE2Nzc3MjE1JihmPDxpfG8pKS50b1N0cmluZygxNik7bz1mPj4+MjQtaSYxNjc3NzIxNSxyPTAhPT1vfHxhIT09dGhpcy5sZW5ndGgtMT9fWzYtcy5sZW5ndGhdK3MrcjpzK3IsaSs9MixpPj0yNiYmKGktPTI2LGEtLSl9Zm9yKDAhPT1vJiYocj1vLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgdT1NW3RdLGg9U1t0XTtyPVwiXCI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgZD1jLm1vZG4oaCkudG9TdHJpbmcodCk7Yz1jLmlkaXZuKGgpLHI9Yy5pc1plcm8oKT9kK3I6X1t1LWQubGVuZ3RoXStkK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPVwiMFwiK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfW4oITEsXCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2XCIpfSxvLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD90Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm4oITEsXCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHNcIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxvLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3KSx0aGlzLnRvQXJyYXlMaWtlKHcsdCxlKX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKG8+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKSx0aGlzLnN0cmlwKCk7dmFyIGEsZixzPVwibGVcIj09PWUsdT1uZXcgdChvKSxoPXRoaXMuY2xvbmUoKTtpZihzKXtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W2ZdPWE7Zm9yKDtmPG87ZisrKXVbZl09MH1lbHNle2ZvcihmPTA7ZjxvLWk7ZisrKXVbZl09MDtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W28tZi0xXT1hfXJldHVybiB1fSxNYXRoLmNsejMyP28ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9Om8ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxvLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT09KDEmZSkmJnIrKyxyfSxvLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sby5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LG8ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LG8ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sby5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sby5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHQpfSxvLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxvLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHQpOnQuY2xvbmUoKS5pdW9yKHRoaXMpfSxvLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sby5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sby5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sby5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxvLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxvLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxvLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LG8ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSxlP3RoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dmFyIHIsbjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLG89MDtvPG4ubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pKygwfG4ud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJm88ci5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxvLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcj10aGlzLmNtcCh0KTtpZigwPT09cilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dmFyIG4saTtyPjA/KG49dGhpcyxpPXQpOihuPXQsaT10aGlzKTtmb3IodmFyIG89MCxhPTA7YTxpLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKS0oMHxpLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2Zvcig7MCE9PW8mJmE8bi5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtpZigwPT09byYmYTxuLmxlbmd0aCYmbiE9PXRoaXMpZm9yKDthPG4ubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPW4ud29yZHNbYV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGEpLG4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sYT10LndvcmRzLGY9ZS53b3JkcyxzPXIud29yZHMsdT0wLGg9MHxhWzBdLGM9ODE5MSZoLGQ9aD4+PjEzLGw9MHxhWzFdLHA9ODE5MSZsLGI9bD4+PjEzLHY9MHxhWzJdLHk9ODE5MSZ2LG09dj4+PjEzLGc9MHxhWzNdLHc9ODE5MSZnLF89Zz4+PjEzLE09MHxhWzRdLFM9ODE5MSZNLEU9TT4+PjEzLEE9MHxhWzVdLGs9ODE5MSZBLHg9QT4+PjEzLEk9MHxhWzZdLEI9ODE5MSZJLE89ST4+PjEzLFI9MHxhWzddLFA9ODE5MSZSLFQ9Uj4+PjEzLGo9MHxhWzhdLEM9ODE5MSZqLE49aj4+PjEzLEw9MHxhWzldLFU9ODE5MSZMLHo9TD4+PjEzLEQ9MHxmWzBdLHE9ODE5MSZELEY9RD4+PjEzLEs9MHxmWzFdLEc9ODE5MSZLLFY9Sz4+PjEzLEg9MHxmWzJdLFg9ODE5MSZILFk9SD4+PjEzLFc9MHxmWzNdLFo9ODE5MSZXLEo9Vz4+PjEzLCQ9MHxmWzRdLFE9ODE5MSYkLHR0PSQ+Pj4xMyxldD0wfGZbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8Zls2XSxvdD04MTkxJml0LGF0PWl0Pj4+MTMsZnQ9MHxmWzddLHN0PTgxOTEmZnQsdXQ9ZnQ+Pj4xMyxodD0wfGZbOF0sY3Q9ODE5MSZodCxkdD1odD4+PjEzLGx0PTB8Zls5XSxwdD04MTkxJmx0LGJ0PWx0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTksbj1NYXRoLmltdWwoYyxxKSxpPU1hdGguaW11bChjLEYpLGk9aStNYXRoLmltdWwoZCxxKXwwLG89TWF0aC5pbXVsKGQsRik7dmFyIHZ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChwLHEpLGk9TWF0aC5pbXVsKHAsRiksaT1pK01hdGguaW11bChiLHEpfDAsbz1NYXRoLmltdWwoYixGKSxuPW4rTWF0aC5pbXVsKGMsRyl8MCxpPWkrTWF0aC5pbXVsKGMsVil8MCxpPWkrTWF0aC5pbXVsKGQsRyl8MCxvPW8rTWF0aC5pbXVsKGQsVil8MDt2YXIgeXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHkscSksaT1NYXRoLmltdWwoeSxGKSxpPWkrTWF0aC5pbXVsKG0scSl8MCxvPU1hdGguaW11bChtLEYpLG49bitNYXRoLmltdWwocCxHKXwwLGk9aStNYXRoLmltdWwocCxWKXwwLGk9aStNYXRoLmltdWwoYixHKXwwLG89bytNYXRoLmltdWwoYixWKXwwLG49bitNYXRoLmltdWwoYyxYKXwwLGk9aStNYXRoLmltdWwoYyxZKXwwLGk9aStNYXRoLmltdWwoZCxYKXwwLG89bytNYXRoLmltdWwoZCxZKXwwO3ZhciBtdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsobXQ+Pj4yNil8MCxtdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwodyxxKSxpPU1hdGguaW11bCh3LEYpLGk9aStNYXRoLmltdWwoXyxxKXwwLG89TWF0aC5pbXVsKF8sRiksbj1uK01hdGguaW11bCh5LEcpfDAsaT1pK01hdGguaW11bCh5LFYpfDAsaT1pK01hdGguaW11bChtLEcpfDAsbz1vK01hdGguaW11bChtLFYpfDAsbj1uK01hdGguaW11bChwLFgpfDAsaT1pK01hdGguaW11bChwLFkpfDAsaT1pK01hdGguaW11bChiLFgpfDAsbz1vK01hdGguaW11bChiLFkpfDAsbj1uK01hdGguaW11bChjLFopfDAsaT1pK01hdGguaW11bChjLEopfDAsaT1pK01hdGguaW11bChkLFopfDAsbz1vK01hdGguaW11bChkLEopfDA7dmFyIGd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhndD4+PjI2KXwwLGd0Jj02NzEwODg2MyxuPU1hdGguaW11bChTLHEpLGk9TWF0aC5pbXVsKFMsRiksaT1pK01hdGguaW11bChFLHEpfDAsbz1NYXRoLmltdWwoRSxGKSxuPW4rTWF0aC5pbXVsKHcsRyl8MCxpPWkrTWF0aC5pbXVsKHcsVil8MCxpPWkrTWF0aC5pbXVsKF8sRyl8MCxvPW8rTWF0aC5pbXVsKF8sVil8MCxuPW4rTWF0aC5pbXVsKHksWCl8MCxpPWkrTWF0aC5pbXVsKHksWSl8MCxpPWkrTWF0aC5pbXVsKG0sWCl8MCxvPW8rTWF0aC5pbXVsKG0sWSl8MCxuPW4rTWF0aC5pbXVsKHAsWil8MCxpPWkrTWF0aC5pbXVsKHAsSil8MCxpPWkrTWF0aC5pbXVsKGIsWil8MCxvPW8rTWF0aC5pbXVsKGIsSil8MCxuPW4rTWF0aC5pbXVsKGMsUSl8MCxpPWkrTWF0aC5pbXVsKGMsdHQpfDAsaT1pK01hdGguaW11bChkLFEpfDAsbz1vK01hdGguaW11bChkLHR0KXwwO3ZhciB3dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxxKSxpPU1hdGguaW11bChrLEYpLGk9aStNYXRoLmltdWwoeCxxKXwwLG89TWF0aC5pbXVsKHgsRiksbj1uK01hdGguaW11bChTLEcpfDAsaT1pK01hdGguaW11bChTLFYpfDAsaT1pK01hdGguaW11bChFLEcpfDAsbz1vK01hdGguaW11bChFLFYpfDAsbj1uK01hdGguaW11bCh3LFgpfDAsaT1pK01hdGguaW11bCh3LFkpfDAsaT1pK01hdGguaW11bChfLFgpfDAsbz1vK01hdGguaW11bChfLFkpfDAsbj1uK01hdGguaW11bCh5LFopfDAsaT1pK01hdGguaW11bCh5LEopfDAsaT1pK01hdGguaW11bChtLFopfDAsbz1vK01hdGguaW11bChtLEopfDAsbj1uK01hdGguaW11bChwLFEpfDAsaT1pK01hdGguaW11bChwLHR0KXwwLGk9aStNYXRoLmltdWwoYixRKXwwLG89bytNYXRoLmltdWwoYix0dCl8MCxuPW4rTWF0aC5pbXVsKGMscnQpfDAsaT1pK01hdGguaW11bChjLG50KXwwLGk9aStNYXRoLmltdWwoZCxydCl8MCxvPW8rTWF0aC5pbXVsKGQsbnQpfDA7dmFyIF90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChCLHEpLGk9TWF0aC5pbXVsKEIsRiksaT1pK01hdGguaW11bChPLHEpfDAsbz1NYXRoLmltdWwoTyxGKSxuPW4rTWF0aC5pbXVsKGssRyl8MCxpPWkrTWF0aC5pbXVsKGssVil8MCxpPWkrTWF0aC5pbXVsKHgsRyl8MCxvPW8rTWF0aC5pbXVsKHgsVil8MCxuPW4rTWF0aC5pbXVsKFMsWCl8MCxpPWkrTWF0aC5pbXVsKFMsWSl8MCxpPWkrTWF0aC5pbXVsKEUsWCl8MCxvPW8rTWF0aC5pbXVsKEUsWSl8MCxuPW4rTWF0aC5pbXVsKHcsWil8MCxpPWkrTWF0aC5pbXVsKHcsSil8MCxpPWkrTWF0aC5pbXVsKF8sWil8MCxvPW8rTWF0aC5pbXVsKF8sSil8MCxuPW4rTWF0aC5pbXVsKHksUSl8MCxpPWkrTWF0aC5pbXVsKHksdHQpfDAsaT1pK01hdGguaW11bChtLFEpfDAsbz1vK01hdGguaW11bChtLHR0KXwwLG49bitNYXRoLmltdWwocCxydCl8MCxpPWkrTWF0aC5pbXVsKHAsbnQpfDAsaT1pK01hdGguaW11bChiLHJ0KXwwLG89bytNYXRoLmltdWwoYixudCl8MCxuPW4rTWF0aC5pbXVsKGMsb3QpfDAsaT1pK01hdGguaW11bChjLGF0KXwwLGk9aStNYXRoLmltdWwoZCxvdCl8MCxvPW8rTWF0aC5pbXVsKGQsYXQpfDA7dmFyIE10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2MyxuPU1hdGguaW11bChQLHEpLGk9TWF0aC5pbXVsKFAsRiksaT1pK01hdGguaW11bChULHEpfDAsbz1NYXRoLmltdWwoVCxGKSxuPW4rTWF0aC5pbXVsKEIsRyl8MCxpPWkrTWF0aC5pbXVsKEIsVil8MCxpPWkrTWF0aC5pbXVsKE8sRyl8MCxvPW8rTWF0aC5pbXVsKE8sVil8MCxuPW4rTWF0aC5pbXVsKGssWCl8MCxpPWkrTWF0aC5pbXVsKGssWSl8MCxpPWkrTWF0aC5pbXVsKHgsWCl8MCxvPW8rTWF0aC5pbXVsKHgsWSl8MCxuPW4rTWF0aC5pbXVsKFMsWil8MCxpPWkrTWF0aC5pbXVsKFMsSil8MCxpPWkrTWF0aC5pbXVsKEUsWil8MCxvPW8rTWF0aC5pbXVsKEUsSil8MCxuPW4rTWF0aC5pbXVsKHcsUSl8MCxpPWkrTWF0aC5pbXVsKHcsdHQpfDAsaT1pK01hdGguaW11bChfLFEpfDAsbz1vK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwoeSxydCl8MCxpPWkrTWF0aC5pbXVsKHksbnQpfDAsaT1pK01hdGguaW11bChtLHJ0KXwwLG89bytNYXRoLmltdWwobSxudCl8MCxuPW4rTWF0aC5pbXVsKHAsb3QpfDAsaT1pK01hdGguaW11bChwLGF0KXwwLGk9aStNYXRoLmltdWwoYixvdCl8MCxvPW8rTWF0aC5pbXVsKGIsYXQpfDAsbj1uK01hdGguaW11bChjLHN0KXwwLGk9aStNYXRoLmltdWwoYyx1dCl8MCxpPWkrTWF0aC5pbXVsKGQsc3QpfDAsbz1vK01hdGguaW11bChkLHV0KXwwO3ZhciBTdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxxKSxpPU1hdGguaW11bChDLEYpLGk9aStNYXRoLmltdWwoTixxKXwwLG89TWF0aC5pbXVsKE4sRiksbj1uK01hdGguaW11bChQLEcpfDAsaT1pK01hdGguaW11bChQLFYpfDAsaT1pK01hdGguaW11bChULEcpfDAsbz1vK01hdGguaW11bChULFYpfDAsbj1uK01hdGguaW11bChCLFgpfDAsaT1pK01hdGguaW11bChCLFkpfDAsaT1pK01hdGguaW11bChPLFgpfDAsbz1vK01hdGguaW11bChPLFkpfDAsbj1uK01hdGguaW11bChrLFopfDAsaT1pK01hdGguaW11bChrLEopfDAsaT1pK01hdGguaW11bCh4LFopfDAsbz1vK01hdGguaW11bCh4LEopfDAsbj1uK01hdGguaW11bChTLFEpfDAsaT1pK01hdGguaW11bChTLHR0KXwwLGk9aStNYXRoLmltdWwoRSxRKXwwLG89bytNYXRoLmltdWwoRSx0dCl8MCxuPW4rTWF0aC5pbXVsKHcscnQpfDAsaT1pK01hdGguaW11bCh3LG50KXwwLGk9aStNYXRoLmltdWwoXyxydCl8MCxvPW8rTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bCh5LG90KXwwLGk9aStNYXRoLmltdWwoeSxhdCl8MCxpPWkrTWF0aC5pbXVsKG0sb3QpfDAsbz1vK01hdGguaW11bChtLGF0KXwwLG49bitNYXRoLmltdWwocCxzdCl8MCxpPWkrTWF0aC5pbXVsKHAsdXQpfDAsaT1pK01hdGguaW11bChiLHN0KXwwLG89bytNYXRoLmltdWwoYix1dCl8MCxuPW4rTWF0aC5pbXVsKGMsY3QpfDAsaT1pK01hdGguaW11bChjLGR0KXwwLGk9aStNYXRoLmltdWwoZCxjdCl8MCxvPW8rTWF0aC5pbXVsKGQsZHQpfDA7dmFyIEV0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHEpLGk9TWF0aC5pbXVsKFUsRiksaT1pK01hdGguaW11bCh6LHEpfDAsbz1NYXRoLmltdWwoeixGKSxuPW4rTWF0aC5pbXVsKEMsRyl8MCxpPWkrTWF0aC5pbXVsKEMsVil8MCxpPWkrTWF0aC5pbXVsKE4sRyl8MCxvPW8rTWF0aC5pbXVsKE4sVil8MCxuPW4rTWF0aC5pbXVsKFAsWCl8MCxpPWkrTWF0aC5pbXVsKFAsWSl8MCxpPWkrTWF0aC5pbXVsKFQsWCl8MCxvPW8rTWF0aC5pbXVsKFQsWSl8MCxuPW4rTWF0aC5pbXVsKEIsWil8MCxpPWkrTWF0aC5pbXVsKEIsSil8MCxpPWkrTWF0aC5pbXVsKE8sWil8MCxvPW8rTWF0aC5pbXVsKE8sSil8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPWkrTWF0aC5pbXVsKGssdHQpfDAsaT1pK01hdGguaW11bCh4LFEpfDAsbz1vK01hdGguaW11bCh4LHR0KXwwLG49bitNYXRoLmltdWwoUyxydCl8MCxpPWkrTWF0aC5pbXVsKFMsbnQpfDAsaT1pK01hdGguaW11bChFLHJ0KXwwLG89bytNYXRoLmltdWwoRSxudCl8MCxuPW4rTWF0aC5pbXVsKHcsb3QpfDAsaT1pK01hdGguaW11bCh3LGF0KXwwLGk9aStNYXRoLmltdWwoXyxvdCl8MCxvPW8rTWF0aC5pbXVsKF8sYXQpfDAsbj1uK01hdGguaW11bCh5LHN0KXwwLGk9aStNYXRoLmltdWwoeSx1dCl8MCxpPWkrTWF0aC5pbXVsKG0sc3QpfDAsbz1vK01hdGguaW11bChtLHV0KXwwLG49bitNYXRoLmltdWwocCxjdCl8MCxpPWkrTWF0aC5pbXVsKHAsZHQpfDAsaT1pK01hdGguaW11bChiLGN0KXwwLG89bytNYXRoLmltdWwoYixkdCl8MCxuPW4rTWF0aC5pbXVsKGMscHQpfDAsaT1pK01hdGguaW11bChjLGJ0KXwwLGk9aStNYXRoLmltdWwoZCxwdCl8MCxvPW8rTWF0aC5pbXVsKGQsYnQpfDA7dmFyIEF0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLEcpLGk9TWF0aC5pbXVsKFUsViksaT1pK01hdGguaW11bCh6LEcpfDAsbz1NYXRoLmltdWwoeixWKSxuPW4rTWF0aC5pbXVsKEMsWCl8MCxpPWkrTWF0aC5pbXVsKEMsWSl8MCxpPWkrTWF0aC5pbXVsKE4sWCl8MCxvPW8rTWF0aC5pbXVsKE4sWSl8MCxuPW4rTWF0aC5pbXVsKFAsWil8MCxpPWkrTWF0aC5pbXVsKFAsSil8MCxpPWkrTWF0aC5pbXVsKFQsWil8MCxvPW8rTWF0aC5pbXVsKFQsSil8MCxuPW4rTWF0aC5pbXVsKEIsUSl8MCxpPWkrTWF0aC5pbXVsKEIsdHQpfDAsaT1pK01hdGguaW11bChPLFEpfDAsbz1vK01hdGguaW11bChPLHR0KXwwLG49bitNYXRoLmltdWwoayxydCl8MCxpPWkrTWF0aC5pbXVsKGssbnQpfDAsaT1pK01hdGguaW11bCh4LHJ0KXwwLG89bytNYXRoLmltdWwoeCxudCl8MCxuPW4rTWF0aC5pbXVsKFMsb3QpfDAsaT1pK01hdGguaW11bChTLGF0KXwwLGk9aStNYXRoLmltdWwoRSxvdCl8MCxvPW8rTWF0aC5pbXVsKEUsYXQpfDAsbj1uK01hdGguaW11bCh3LHN0KXwwLGk9aStNYXRoLmltdWwodyx1dCl8MCxpPWkrTWF0aC5pbXVsKF8sc3QpfDAsbz1vK01hdGguaW11bChfLHV0KXwwLG49bitNYXRoLmltdWwoeSxjdCl8MCxpPWkrTWF0aC5pbXVsKHksZHQpfDAsaT1pK01hdGguaW11bChtLGN0KXwwLG89bytNYXRoLmltdWwobSxkdCl8MCxuPW4rTWF0aC5pbXVsKHAscHQpfDAsaT1pK01hdGguaW11bChwLGJ0KXwwLGk9aStNYXRoLmltdWwoYixwdCl8MCxvPW8rTWF0aC5pbXVsKGIsYnQpfDA7dmFyIGt0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFgpLGk9TWF0aC5pbXVsKFUsWSksaT1pK01hdGguaW11bCh6LFgpfDAsbz1NYXRoLmltdWwoeixZKSxuPW4rTWF0aC5pbXVsKEMsWil8MCxpPWkrTWF0aC5pbXVsKEMsSil8MCxpPWkrTWF0aC5pbXVsKE4sWil8MCxvPW8rTWF0aC5pbXVsKE4sSil8MCxuPW4rTWF0aC5pbXVsKFAsUSl8MCxpPWkrTWF0aC5pbXVsKFAsdHQpfDAsaT1pK01hdGguaW11bChULFEpfDAsbz1vK01hdGguaW11bChULHR0KXwwLG49bitNYXRoLmltdWwoQixydCl8MCxpPWkrTWF0aC5pbXVsKEIsbnQpfDAsaT1pK01hdGguaW11bChPLHJ0KXwwLG89bytNYXRoLmltdWwoTyxudCl8MCxuPW4rTWF0aC5pbXVsKGssb3QpfDAsaT1pK01hdGguaW11bChrLGF0KXwwLGk9aStNYXRoLmltdWwoeCxvdCl8MCxvPW8rTWF0aC5pbXVsKHgsYXQpfDAsbj1uK01hdGguaW11bChTLHN0KXwwLGk9aStNYXRoLmltdWwoUyx1dCl8MCxpPWkrTWF0aC5pbXVsKEUsc3QpfDAsbz1vK01hdGguaW11bChFLHV0KXwwLG49bitNYXRoLmltdWwodyxjdCl8MCxpPWkrTWF0aC5pbXVsKHcsZHQpfDAsaT1pK01hdGguaW11bChfLGN0KXwwLG89bytNYXRoLmltdWwoXyxkdCl8MCxuPW4rTWF0aC5pbXVsKHkscHQpfDAsaT1pK01hdGguaW11bCh5LGJ0KXwwLGk9aStNYXRoLmltdWwobSxwdCl8MCxvPW8rTWF0aC5pbXVsKG0sYnQpfDA7dmFyIHh0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh4dD4+PjI2KXwwLHh0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFopLGk9TWF0aC5pbXVsKFUsSiksaT1pK01hdGguaW11bCh6LFopfDAsbz1NYXRoLmltdWwoeixKKSxuPW4rTWF0aC5pbXVsKEMsUSl8MCxpPWkrTWF0aC5pbXVsKEMsdHQpfDAsaT1pK01hdGguaW11bChOLFEpfDAsbz1vK01hdGguaW11bChOLHR0KXwwLG49bitNYXRoLmltdWwoUCxydCl8MCxpPWkrTWF0aC5pbXVsKFAsbnQpfDAsaT1pK01hdGguaW11bChULHJ0KXwwLG89bytNYXRoLmltdWwoVCxudCl8MCxuPW4rTWF0aC5pbXVsKEIsb3QpfDAsaT1pK01hdGguaW11bChCLGF0KXwwLGk9aStNYXRoLmltdWwoTyxvdCl8MCxvPW8rTWF0aC5pbXVsKE8sYXQpfDAsbj1uK01hdGguaW11bChrLHN0KXwwLGk9aStNYXRoLmltdWwoayx1dCl8MCxpPWkrTWF0aC5pbXVsKHgsc3QpfDAsbz1vK01hdGguaW11bCh4LHV0KXwwLG49bitNYXRoLmltdWwoUyxjdCl8MCxpPWkrTWF0aC5pbXVsKFMsZHQpfDAsaT1pK01hdGguaW11bChFLGN0KXwwLG89bytNYXRoLmltdWwoRSxkdCl8MCxuPW4rTWF0aC5pbXVsKHcscHQpfDAsaT1pK01hdGguaW11bCh3LGJ0KXwwLGk9aStNYXRoLmltdWwoXyxwdCl8MCxvPW8rTWF0aC5pbXVsKF8sYnQpfDA7dmFyIEl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhJdD4+PjI2KXwwLEl0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFEpLGk9TWF0aC5pbXVsKFUsdHQpLGk9aStNYXRoLmltdWwoeixRKXwwLG89TWF0aC5pbXVsKHosdHQpLG49bitNYXRoLmltdWwoQyxydCl8MCxpPWkrTWF0aC5pbXVsKEMsbnQpfDAsaT1pK01hdGguaW11bChOLHJ0KXwwLG89bytNYXRoLmltdWwoTixudCl8MCxuPW4rTWF0aC5pbXVsKFAsb3QpfDAsaT1pK01hdGguaW11bChQLGF0KXwwLGk9aStNYXRoLmltdWwoVCxvdCl8MCxvPW8rTWF0aC5pbXVsKFQsYXQpfDAsbj1uK01hdGguaW11bChCLHN0KXwwLGk9aStNYXRoLmltdWwoQix1dCl8MCxpPWkrTWF0aC5pbXVsKE8sc3QpfDAsbz1vK01hdGguaW11bChPLHV0KXwwLG49bitNYXRoLmltdWwoayxjdCl8MCxpPWkrTWF0aC5pbXVsKGssZHQpfDAsaT1pK01hdGguaW11bCh4LGN0KXwwLG89bytNYXRoLmltdWwoeCxkdCl8MCxuPW4rTWF0aC5pbXVsKFMscHQpfDAsaT1pK01hdGguaW11bChTLGJ0KXwwLGk9aStNYXRoLmltdWwoRSxwdCl8MCxvPW8rTWF0aC5pbXVsKEUsYnQpfDA7dmFyIEJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhCdD4+PjI2KXwwLEJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHJ0KSxpPU1hdGguaW11bChVLG50KSxpPWkrTWF0aC5pbXVsKHoscnQpfDAsbz1NYXRoLmltdWwoeixudCksbj1uK01hdGguaW11bChDLG90KXwwLGk9aStNYXRoLmltdWwoQyxhdCl8MCxpPWkrTWF0aC5pbXVsKE4sb3QpfDAsbz1vK01hdGguaW11bChOLGF0KXwwLG49bitNYXRoLmltdWwoUCxzdCl8MCxpPWkrTWF0aC5pbXVsKFAsdXQpfDAsaT1pK01hdGguaW11bChULHN0KXwwLG89bytNYXRoLmltdWwoVCx1dCl8MCxuPW4rTWF0aC5pbXVsKEIsY3QpfDAsaT1pK01hdGguaW11bChCLGR0KXwwLGk9aStNYXRoLmltdWwoTyxjdCl8MCxvPW8rTWF0aC5pbXVsKE8sZHQpfDAsbj1uK01hdGguaW11bChrLHB0KXwwLGk9aStNYXRoLmltdWwoayxidCl8MCxpPWkrTWF0aC5pbXVsKHgscHQpfDAsbz1vK01hdGguaW11bCh4LGJ0KXwwO3ZhciBPdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxvdCksaT1NYXRoLmltdWwoVSxhdCksaT1pK01hdGguaW11bCh6LG90KXwwLG89TWF0aC5pbXVsKHosYXQpLG49bitNYXRoLmltdWwoQyxzdCl8MCxpPWkrTWF0aC5pbXVsKEMsdXQpfDAsaT1pK01hdGguaW11bChOLHN0KXwwLG89bytNYXRoLmltdWwoTix1dCl8MCxuPW4rTWF0aC5pbXVsKFAsY3QpfDAsaT1pK01hdGguaW11bChQLGR0KXwwLGk9aStNYXRoLmltdWwoVCxjdCl8MCxvPW8rTWF0aC5pbXVsKFQsZHQpfDAsbj1uK01hdGguaW11bChCLHB0KXwwLGk9aStNYXRoLmltdWwoQixidCl8MCxpPWkrTWF0aC5pbXVsKE8scHQpfDAsbz1vK01hdGguaW11bChPLGJ0KXwwO3ZhciBSdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUnQ+Pj4yNil8MCxSdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxzdCksaT1NYXRoLmltdWwoVSx1dCksaT1pK01hdGguaW11bCh6LHN0KXwwLG89TWF0aC5pbXVsKHosdXQpLG49bitNYXRoLmltdWwoQyxjdCl8MCxpPWkrTWF0aC5pbXVsKEMsZHQpfDAsaT1pK01hdGguaW11bChOLGN0KXwwLG89bytNYXRoLmltdWwoTixkdCl8MCxuPW4rTWF0aC5pbXVsKFAscHQpfDAsaT1pK01hdGguaW11bChQLGJ0KXwwLGk9aStNYXRoLmltdWwoVCxwdCl8MCxvPW8rTWF0aC5pbXVsKFQsYnQpfDA7dmFyIFB0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLGN0KSxpPU1hdGguaW11bChVLGR0KSxpPWkrTWF0aC5pbXVsKHosY3QpfDAsbz1NYXRoLmltdWwoeixkdCksbj1uK01hdGguaW11bChDLHB0KXwwLGk9aStNYXRoLmltdWwoQyxidCl8MCxpPWkrTWF0aC5pbXVsKE4scHQpfDAsbz1vK01hdGguaW11bChOLGJ0KXwwO3ZhciBUdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoVHQ+Pj4yNil8MCxUdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxwdCksaT1NYXRoLmltdWwoVSxidCksaT1pK01hdGguaW11bCh6LHB0KXwwLG89TWF0aC5pbXVsKHosYnQpO3ZhciBqdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7cmV0dXJuIHU9KG8rKGk+Pj4xMyl8MCkrKGp0Pj4+MjYpfDAsanQmPTY3MTA4ODYzLHNbMF09dnQsc1sxXT15dCxzWzJdPW10LHNbM109Z3Qsc1s0XT13dCxzWzVdPV90LHNbNl09TXQsc1s3XT1TdCxzWzhdPUV0LHNbOV09QXQsc1sxMF09a3Qsc1sxMV09eHQsc1sxMl09SXQsc1sxM109QnQsc1sxNF09T3Qsc1sxNV09UnQsc1sxNl09UHQsc1sxN109VHQsc1sxOF09anQsMCE9PXUmJihzWzE5XT11LHIubGVuZ3RoKyspLHJ9O01hdGguaW11bHx8KEU9dSksby5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiByPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/RSh0aGlzLHQsZSk6bjw2Mz91KHRoaXMsdCxlKTpuPDEwMjQ/aCh0aGlzLHQsZSk6Yyh0aGlzLHQsZSl9LGQucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPW8ucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LFxuZC5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksbyl7Zm9yKHZhciBhPTA7YTxvO2ErKyluW2FdPWVbdFthXV0saVthXT1yW3RbYV1dfSxkLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLG8pe3RoaXMucGVybXV0ZShvLHQsZSxyLG4saSk7Zm9yKHZhciBhPTE7YTxpO2E8PD0xKWZvcih2YXIgZj1hPDwxLHM9TWF0aC5jb3MoMipNYXRoLlBJL2YpLHU9TWF0aC5zaW4oMipNYXRoLlBJL2YpLGg9MDtoPGk7aCs9Zilmb3IodmFyIGM9cyxkPXUsbD0wO2w8YTtsKyspe3ZhciBwPXJbaCtsXSxiPW5baCtsXSx2PXJbaCtsK2FdLHk9bltoK2wrYV0sbT1jKnYtZCp5O3k9Yyp5K2Qqdix2PW0scltoK2xdPXArdixuW2grbF09Yit5LHJbaCtsK2FdPXAtdixuW2grbCthXT1iLXksbCE9PWYmJihtPXMqYy11KmQsZD1zKmQrdSpjLGM9bSl9fSxkLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIG89MCxhPTA7YTxlO2ErKylvKz0wfHRbYV0sclsyKmFdPTgxOTEmbyxvPj4+PTEzLHJbMiphKzFdPTgxOTEmbyxvPj4+PTEzO2ZvcihhPTIqZTthPGk7KythKXJbYV09MDtuKDA9PT1vKSxuKDA9PT0obyYtODE5MikpfSxkLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxkLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLG89dGhpcy5zdHViKG4pLGE9bmV3IEFycmF5KG4pLGY9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLGQ9ci53b3JkcztkLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLGEsbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsdSxuKSx0aGlzLnRyYW5zZm9ybShhLG8sZixzLG4saSksdGhpcy50cmFuc2Zvcm0odSxvLGgsYyxuLGkpO2Zvcih2YXIgbD0wO2w8bjtsKyspe3ZhciBwPWZbbF0qaFtsXS1zW2xdKmNbbF07c1tsXT1mW2xdKmNbbF0rc1tsXSpoW2xdLGZbbF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUoZixzLG4pLHRoaXMudHJhbnNmb3JtKGYscyxkLG8sbixpKSx0aGlzLmNvbmp1Z2F0ZShkLG8sbiksdGhpcy5ub3JtYWxpemUxM2IoZCxuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sby5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGModGhpcyx0LGUpfSxvLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sby5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsbz0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9bz4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmb31yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxvLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LG8ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LG8ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1zKHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IG8oMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sby5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LG89NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgYT0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMud29yZHNbZV0mbyxzPSgwfHRoaXMud29yZHNbZV0pLWY8PHI7dGhpcy53b3Jkc1tlXT1zfGEsYT1mPj4+MjYtcn1hJiYodGhpcy53b3Jkc1tlXT1hLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBpO2k9ZT8oZS1lJTI2KS8yNjowO3ZhciBvPXQlMjYsYT1NYXRoLm1pbigodC1vKS8yNix0aGlzLmxlbmd0aCksZj02NzEwODg2M142NzEwODg2Mz4+Pm88PG8scz1yO2lmKGktPWEsaT1NYXRoLm1heCgwLGkpLHMpe2Zvcih2YXIgdT0wO3U8YTt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPWF9aWYoMD09PWEpO2Vsc2UgaWYodGhpcy5sZW5ndGg+YSlmb3IodGhpcy5sZW5ndGgtPWEsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K2FdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGg9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09aHx8dT49aSk7dS0tKXt2YXIgYz0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1oPDwyNi1vfGM+Pj5vLGg9YyZmfXJldHVybiBzJiYwIT09aCYmKHMud29yZHNbcy5sZW5ndGgrK109aCksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LG8ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuITE7dmFyIG89dGhpcy53b3Jkc1tyXTtyZXR1cm4hIShvJmkpfSxvLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LG8ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sby5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LG8ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sby5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxvLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxvLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sby5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBhLGY9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrZjt2YXIgcz0oMHx0LndvcmRzW2ldKSplO2EtPTY3MTA4ODYzJnMsZj0oYT4+MjYpLShzLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylhPSgwfHRoaXMud29yZHNbaStyXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1mKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oZj09PS0xKSxmPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWE9LSgwfHRoaXMud29yZHNbaV0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtdC5sZW5ndGgsbj10aGlzLmNsb25lKCksaT10LGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdLGY9dGhpcy5fY291bnRCaXRzKGEpO3I9MjYtZiwwIT09ciYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsdT1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09ZSl7cz1uZXcgbyhudWxsKSxzLmxlbmd0aD11KzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXMud29yZHNbaF09MH12YXIgYz1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSx1KTswPT09Yy5uZWdhdGl2ZSYmKG49YyxzJiYocy53b3Jkc1t1XT0xKSk7Zm9yKHZhciBkPXUtMTtkPj0wO2QtLSl7dmFyIGw9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtkXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtkLTFdKTtmb3IobD1NYXRoLm1pbihsL2F8MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxsLGQpOzAhPT1uLm5lZ2F0aXZlOylsLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxkKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbZF09bCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksXCJkaXZcIiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxvLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCkpcmV0dXJue2RpdjpuZXcgbygwKSxtb2Q6bmV3IG8oMCl9O3ZhciBpLGEsZjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaWFkZCh0KSkse2RpdjppLG1vZDphfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhmPXRoaXMuZGl2bW9kKHQubmVnKCksZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOmYubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlzdWIodCkpLHtkaXY6Zi5kaXYsbW9kOmF9KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBvKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/XCJkaXZcIj09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKX0sby5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwiZGl2XCIsITEpLmRpdn0sby5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITEpLm1vZH0sby5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCEwKS5tb2R9LG8ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLG89ci5jbXAobik7cmV0dXJuIG88MHx8MT09PWkmJjA9PT1vP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sby5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxvLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LG8ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1uZXcgbygwKSxzPW5ldyBvKDEpLHU9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK3U7Zm9yKHZhciBoPXIuY2xvbmUoKSxjPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZD0wLGw9MTswPT09KGUud29yZHNbMF0mbCkmJmQ8MjY7KytkLGw8PD0xKTtpZihkPjApZm9yKGUuaXVzaHJuKGQpO2QtLSA+MDspKGkuaXNPZGQoKXx8YS5pc09kZCgpKSYmKGkuaWFkZChoKSxhLmlzdWIoYykpLGkuaXVzaHJuKDEpLGEuaXVzaHJuKDEpO2Zvcih2YXIgcD0wLGI9MTswPT09KHIud29yZHNbMF0mYikmJnA8MjY7KytwLGI8PD0xKTtpZihwPjApZm9yKHIuaXVzaHJuKHApO3AtLSA+MDspKGYuaXNPZGQoKXx8cy5pc09kZCgpKSYmKGYuaWFkZChoKSxzLmlzdWIoYykpLGYuaXVzaHJuKDEpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGYpLGEuaXN1YihzKSk6KHIuaXN1YihlKSxmLmlzdWIoaSkscy5pc3ViKGEpKX1yZXR1cm57YTpmLGI6cyxnY2Q6ci5pdXNobG4odSl9fSxvLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBzPTAsdT0xOzA9PT0oZS53b3Jkc1swXSZ1KSYmczwyNjsrK3MsdTw8PTEpO2lmKHM+MClmb3IoZS5pdXNocm4ocyk7cy0tID4wOylpLmlzT2RkKCkmJmkuaWFkZChmKSxpLml1c2hybigxKTtmb3IodmFyIGg9MCxjPTE7MD09PShyLndvcmRzWzBdJmMpJiZoPDI2OysraCxjPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KWEuaXNPZGQoKSYmYS5pYWRkKGYpLGEuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGEpKTooci5pc3ViKGUpLGEuaXN1YihpKSl9dmFyIGQ7cmV0dXJuIGQ9MD09PWUuY21wbigxKT9pOmEsZC5jbXBuKDApPDAmJmQuaWFkZCh0KSxkfSxvLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIG89ZTtlPXIscj1vfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sby5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sby5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxvLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBvPWksYT1yOzAhPT1vJiZhPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9MHx0aGlzLndvcmRzW2FdO2YrPW8sbz1mPj4+MjYsZiY9NjcxMDg4NjMsdGhpcy53b3Jkc1thXT1mfXJldHVybiAwIT09byYmKHRoaXMud29yZHNbYV09byx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sby5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZT10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZlKXJldHVybiAxO3RoaXMuc3RyaXAoKTt2YXIgcjtpZih0aGlzLmxlbmd0aD4xKXI9MTtlbHNle2UmJih0PS10KSxuKHQ8PTY3MTA4ODYzLFwiTnVtYmVyIGlzIHRvbyBiaWdcIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO3I9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcjpyfSxvLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sby5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LG8ucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sby5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxvLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxvLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT09PS0xfSxvLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk9PT0tMX0sby5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxvLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxvLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LG8ucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbSh0KX0sby5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxvLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30sby5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sby5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sby5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sby5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsXCJyZWRQb3cobm9ybWFsTnVtKVwiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtsLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxsLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkbyB0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpO3doaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LGwucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LGwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saShwLGwpLHAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTQxOTQzMDMsbj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxpPTA7aTxuO2krKyllLndvcmRzW2ldPXQud29yZHNbaV07aWYoZS5sZW5ndGg9bix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIG89dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT1vJnIsaT0xMDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9MHx0LndvcmRzW2ldO3Qud29yZHNbaS0xMF09KGEmcik8PDR8bz4+PjIyLG89YX1vPj4+PTIyLHQud29yZHNbaS0xMF09bywwPT09byYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSxwLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoYixsKSxpKHYsbCksaSh5LGwpLHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sby5fcHJpbWU9ZnVuY3Rpb24gdChlKXtpZihBW2VdKXJldHVybiBBW2VdO3ZhciB0O2lmKFwiazI1NlwiPT09ZSl0PW5ldyBwO2Vsc2UgaWYoXCJwMjI0XCI9PT1lKXQ9bmV3IGI7ZWxzZSBpZihcInAxOTJcIj09PWUpdD1uZXcgdjtlbHNle2lmKFwicDI1NTE5XCIhPT1lKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gcHJpbWUgXCIrZSk7dD1uZXcgeX1yZXR1cm4gQVtlXT10LHR9LG0ucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodCksdGhpcy5pbW9kKHQudXNobG4oZSkpfSxtLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sbS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSxtLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0LmNsb25lKCkpfSxtLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubXVsKHQsdCl9LG0ucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odCl7aWYodC5pc1plcm8oKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPXRoaXMubS5hbmRsbigzKTtpZihuKGUlMj09PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBvKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLGE9MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KWErKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgZj1uZXcgbygxKS50b1JlZCh0aGlzKSxzPWYucmVkTmVnKCksdT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksaD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGg9bmV3IG8oMipoKmgpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhoLHUpLmNtcChzKTspaC5yZWRJQWRkKHMpO2Zvcih2YXIgYz10aGlzLnBvdyhoLGkpLGQ9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxsPXRoaXMucG93KHQsaSkscD1hOzAhPT1sLmNtcChmKTspe2Zvcih2YXIgYj1sLHY9MDswIT09Yi5jbXAoZik7disrKWI9Yi5yZWRTcXIoKTtuKHY8cCk7dmFyIHk9dGhpcy5wb3coYyxuZXcgbygxKS5pdXNobG4ocC12LTEpKTtkPWQucmVkTXVsKHkpLGM9eS5yZWRTcXIoKSxsPWwucmVkTXVsKGMpLHA9dn1yZXR1cm4gZH0sbS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSxtLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgbygxKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9NCxuPW5ldyBBcnJheSgxPDxyKTtuWzBdPW5ldyBvKDEpLnRvUmVkKHRoaXMpLG5bMV09dDtmb3IodmFyIGk9MjtpPG4ubGVuZ3RoO2krKyluW2ldPXRoaXMubXVsKG5baS0xXSx0KTt2YXIgYT1uWzBdLGY9MCxzPTAsdT1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09dSYmKHU9MjYpLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7Zm9yKHZhciBoPWUud29yZHNbaV0sYz11LTE7Yz49MDtjLS0pe3ZhciBkPWg+PmMmMTthIT09blswXSYmKGE9dGhpcy5zcXIoYSkpLDAhPT1kfHwwIT09Zj8oZjw8PTEsZnw9ZCxzKyssKHM9PT1yfHwwPT09aSYmMD09PWMpJiYoYT10aGlzLm11bChhLG5bZl0pLHM9MCxmPTApKTpzPTB9dT0yNn1yZXR1cm4gYX0sbS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQudW1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0sbS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LG8ubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGcodCl9LGkoZyxtKSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnVzaGxuKHRoaXMuc2hpZnQpKX0sZy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LGcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiBuZXcgbygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9dC5tdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO3JldHVybiBlLl9mb3JjZVJlZCh0aGlzKX19KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0fHx0LHRoaXMpfSkuY2FsbChlLHIoOTIpKHQpKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5SZXBvcnRlcj1yKDU4MikuUmVwb3J0ZXIsbi5EZWNvZGVyQnVmZmVyPXIoMjM0KS5EZWNvZGVyQnVmZmVyLG4uRW5jb2RlckJ1ZmZlcj1yKDIzNCkuRW5jb2RlckJ1ZmZlcixuLk5vZGU9cig1ODEpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxyLmxlbmd0aCksaT1uZXcgZShuKSxvPTA7bzxuOysrbylpW29dPXRbb11ecltvXTtyZXR1cm4gaX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheSh0KTpcIltvYmplY3QgQXJyYXldXCI9PT12KHQpfWZ1bmN0aW9uIG4odCl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIG51bGw9PT10fWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXR9ZnVuY3Rpb24gYSh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdH1mdW5jdGlvbiBmKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHModCl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiBoKHQpe3JldHVyblwiW29iamVjdCBSZWdFeHBdXCI9PT12KHQpfWZ1bmN0aW9uIGModCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIGQodCl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT12KHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuXCJbb2JqZWN0IEVycm9yXVwiPT09dih0KXx8dCBpbnN0YW5jZW9mIEVycm9yfWZ1bmN0aW9uIHAodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdH1mdW5jdGlvbiBiKHQpe3JldHVybiBudWxsPT09dHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJzdHJpbmdcIj09dHlwZW9mIHR8fFwic3ltYm9sXCI9PXR5cGVvZiB0fHxcInVuZGVmaW5lZFwiPT10eXBlb2YgdH1mdW5jdGlvbiB2KHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZS5pc0FycmF5PXIsZS5pc0Jvb2xlYW49bixlLmlzTnVsbD1pLGUuaXNOdWxsT3JVbmRlZmluZWQ9byxlLmlzTnVtYmVyPWEsZS5pc1N0cmluZz1mLGUuaXNTeW1ib2w9cyxlLmlzVW5kZWZpbmVkPXUsZS5pc1JlZ0V4cD1oLGUuaXNPYmplY3Q9YyxlLmlzRGF0ZT1kLGUuaXNFcnJvcj1sLGUuaXNGdW5jdGlvbj1wLGUuaXNQcmltaXRpdmU9YixlLmlzQnVmZmVyPXQuaXNCdWZmZXJ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMTE1KSxhPXIoMTU5KSxmPXIoMTEzKSxzPXIoNTMpLHU9cigxMTYpLGg9cigyMDEpLGM9cig5MSksZD1yKDE2MiksbD0vXmNjOihbMS05YS1mXVswLTlhLWZdezAsM318MCk6WzEtOWEtZl1bMC05YS1mXXswLDE1fTpbYS16QS1aMC05Xy1dezAsODZ9OihbMS05XVswLTldezAsMTd9fDApJC8scD0vXmNjOihbMS05YS1mXVswLTlhLWZdezAsM318MCk6WzEtOWEtZl1bMC05YS1mXXswLDd9OlthLXpBLVowLTlfLV17MCw4Nn06KFsxLTldWzAtOV17MCwxN318MCkkLyxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KX1yZXR1cm4gaSh0LFt7a2V5OlwiZ2V0VHlwZUlkXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlfX0se2tleTpcInNldFR5cGVJZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMudHlwZT10fX0se2tleTpcImdldEJpdG1hc2tcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJpdG1hc2t9fSx7a2V5Olwic2V0Qml0bWFza1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuYml0bWFzaz10fX0se2tleTpcImdldEhhc2hcIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmhhc2gpdGhyb3cgbmV3IHMoXCJIYXNoIG5vdCBzZXRcIik7cmV0dXJuIHRoaXMuaGFzaH19LHtrZXk6XCJzZXRIYXNoXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkhhc2ggbXVzdCBiZSBhIEJ1ZmZlclwiKTt0aGlzLmhhc2g9dH19LHtrZXk6XCJnZXRNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHRoaXMubWF4RnVsZmlsbG1lbnRMZW5ndGgpdGhyb3cgbmV3IHMoXCJNYXhpbXVtIGZ1bGZpbGxtZW50IGxlbmd0aCBub3Qgc2V0XCIpO3JldHVybiB0aGlzLm1heEZ1bGZpbGxtZW50TGVuZ3RofX0se2tleTpcInNldE1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bGZpbGxtZW50IGxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXJcIik7aWYodDwwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJGdWxmaWxsbWVudCBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSBvciB6ZXJvXCIpO3RoaXMubWF4RnVsZmlsbG1lbnRMZW5ndGg9dH19LHtrZXk6XCJzZXJpYWxpemVVcmlcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblwiY2M6XCIrdGhpcy5nZXRUeXBlSWQoKS50b1N0cmluZygxNikrXCI6XCIrdGhpcy5nZXRCaXRtYXNrKCkudG9TdHJpbmcoMTYpK1wiOlwiK3UuZW5jb2RlKHRoaXMuZ2V0SGFzaCgpKStcIjpcIit0aGlzLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCl9fSx7a2V5Olwic2VyaWFsaXplQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYztyZXR1cm4gdC53cml0ZVVJbnQxNih0aGlzLmdldFR5cGVJZCgpKSx0LndyaXRlVmFyVUludCh0aGlzLmdldEJpdG1hc2soKSksdC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMuZ2V0SGFzaCgpKSx0LndyaXRlVmFyVUludCh0aGlzLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCkpLHQuZ2V0QnVmZmVyKCl9fSx7a2V5OlwicGFyc2VCaW5hcnlcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNldFR5cGVJZCh0LnJlYWRVSW50MTYoKSksdGhpcy5zZXRCaXRtYXNrKHQucmVhZFZhclVJbnQoKSksdGhpcy5zZXRIYXNoKHQucmVhZFZhck9jdGV0U3RyaW5nKCkpLHRoaXMuc2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgodC5yZWFkVmFyVUludCgpKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoby5nZXRDbGFzc0Zyb21UeXBlSWQodGhpcy5nZXRUeXBlSWQoKSksdGhpcy5nZXRCaXRtYXNrKCk+dC5NQVhfU0FGRV9CSVRNQVNLKXRocm93IG5ldyBFcnJvcihcIkJpdG1hc2sgdG9vIGxhcmdlIHRvIGJlIHNhZmVseSByZXByZXNlbnRlZFwiKTtpZih0aGlzLmdldEJpdG1hc2soKSZ+dC5TVVBQT1JURURfQklUTUFTSyl0aHJvdyBuZXcgRXJyb3IoXCJDb25kaXRpb24gcmVxdWVzdGVkIHVuc3VwcG9ydGVkIGZlYXR1cmUgc3VpdGVzXCIpO2lmKHRoaXMuZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKT50Lk1BWF9GVUxGSUxMTUVOVF9MRU5HVEgpdGhyb3cgbmV3IEVycm9yKFwiQ29uZGl0aW9uIHJlcXVlc3RlZCB0b28gbGFyZ2Ugb2YgYSBtYXggZnVsZmlsbG1lbnQgc2l6ZVwiKTtyZXR1cm4hMH19XSxbe2tleTpcImZyb21VcmlcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdClyZXR1cm4gZTtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJTZXJpYWxpemVkIGNvbmRpdGlvbiBtdXN0IGJlIGEgc3RyaW5nXCIpO3ZhciByPWUuc3BsaXQoXCI6XCIpO2lmKFwiY2NcIiE9PXJbMF0pdGhyb3cgbmV3IGEoJ1NlcmlhbGl6ZWQgY29uZGl0aW9uIG11c3Qgc3RhcnQgd2l0aCBcImNjOlwiJyk7aWYoIXQuUkVHRVhfU1RSSUNULmV4ZWMoZSkpdGhyb3cgbmV3IGYoXCJJbnZhbGlkIGNvbmRpdGlvbiBmb3JtYXRcIik7dmFyIG49bmV3IHQ7cmV0dXJuIG4uc2V0VHlwZUlkKHBhcnNlSW50KHJbMV0sMTYpKSxuLnNldEJpdG1hc2socGFyc2VJbnQoclsyXSwxNikpLG4uc2V0SGFzaCh1LmRlY29kZShyWzNdKSksbi5zZXRNYXhGdWxmaWxsbWVudExlbmd0aChwYXJzZUludChyWzRdLDEwKSksbn19LHtrZXk6XCJmcm9tQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1oLmZyb20oZSk7dmFyIHI9bmV3IHQ7cmV0dXJuIHIucGFyc2VCaW5hcnkoZSkscn19XSksdH0oKTtiLk1BWF9TQUZFX0JJVE1BU0s9NDI5NDk2NzI5NSxiLlNVUFBPUlRFRF9CSVRNQVNLPTYzLGIuTUFYX0ZVTEZJTExNRU5UX0xFTkdUSD02NTUzNSxiLlJFR0VYPWwsYi5SRUdFWF9TVFJJQ1Q9cCx0LmV4cG9ydHM9Yn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1yKDYzKSxzPXIoMTE0KSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGEoZSxbe2tleTpcImdlbmVyYXRlSGFzaFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHMoXCJzaGEyNTZcIik7cmV0dXJuIHRoaXMud3JpdGVIYXNoUGF5bG9hZCh0KSx0LmdldERpZ2VzdCgpfX1dKSxlfShmKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE3KSxpPXIoMTApLG89cig0Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsYSl7dmFyIGYscz1uKGUpLHU9aShzLmxlbmd0aCksaD1vKGEsdSk7aWYodCYmciE9cil7Zm9yKDt1Pmg7KWlmKGY9c1toKytdLGYhPWYpcmV0dXJuITB9ZWxzZSBmb3IoO3U+aDtoKyspaWYoKHR8fGggaW4gcykmJnNbaF09PT1yKXJldHVybiB0fHxofHwwO3JldHVybiF0JiYtMX19fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0KSxpPXIoMCksbz1yKDE1KSxhPXIoNDUpLGY9cigzNikscz1yKDU1KSx1PXIoNDApLGg9cig2KSxjPXIoNSksZD1yKDg0KSxsPXIoNTcpLHA9cigxMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixiLHYseSl7dmFyIG09blt0XSxnPW0sdz12P1wic2V0XCI6XCJhZGRcIixfPWcmJmcucHJvdG90eXBlLE09e30sUz1mdW5jdGlvbih0KXt2YXIgZT1fW3RdO28oXyx0LFwiZGVsZXRlXCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuISh5JiYhaCh0KSkmJmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OlwiaGFzXCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuISh5JiYhaCh0KSkmJmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OlwiZ2V0XCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIHkmJiFoKHQpP3ZvaWQgMDplLmNhbGwodGhpcywwPT09dD8wOnQpfTpcImFkZFwiPT10P2Z1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQpLHRoaXN9OmZ1bmN0aW9uKHQscil7cmV0dXJuIGUuY2FsbCh0aGlzLDA9PT10PzA6dCxyKSx0aGlzfSl9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGcmJih5fHxfLmZvckVhY2gmJiFjKGZ1bmN0aW9uKCl7KG5ldyBnKS5lbnRyaWVzKCkubmV4dCgpfSkpKXt2YXIgRT1uZXcgZyxBPUVbd10oeT97fTotMCwxKSE9RSxrPWMoZnVuY3Rpb24oKXtFLmhhcygxKX0pLHg9ZChmdW5jdGlvbih0KXtuZXcgZyh0KX0pLEk9IXkmJmMoZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IGcsZT01O2UtLTspdFt3XShlLGUpO3JldHVybiF0LmhhcygtMCl9KTt4fHwoZz1lKGZ1bmN0aW9uKGUscil7dShlLGcsdCk7dmFyIG49cChuZXcgbSxlLGcpO3JldHVybiB2b2lkIDAhPXImJnMocix2LG5bd10sbiksbn0pLGcucHJvdG90eXBlPV8sXy5jb25zdHJ1Y3Rvcj1nKSwoa3x8SSkmJihTKFwiZGVsZXRlXCIpLFMoXCJoYXNcIiksdiYmUyhcImdldFwiKSksKEl8fEEpJiZTKHcpLHkmJl8uY2xlYXImJmRlbGV0ZSBfLmNsZWFyfWVsc2UgZz1iLmdldENvbnN0cnVjdG9yKGUsdCx2LHcpLGEoZy5wcm90b3R5cGUsciksZi5ORUVEPSEwO3JldHVybiBsKGcsdCksTVt0XT1nLGkoaS5HK2kuVytpLkYqKGchPW0pLE0pLHl8fGIuc2V0U3Ryb25nKGcsdCx2KSxnfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTQpLGk9cigxNSksbz1yKDUpLGE9cigyNCksZj1yKDcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHM9Zih0KSx1PXIoYSxzLFwiXCJbdF0pLGg9dVswXSxjPXVbMV07byhmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBlW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIDd9LDchPVwiXCJbdF0oZSl9KSYmKGkoU3RyaW5nLnByb3RvdHlwZSx0LGgpLG4oUmVnRXhwLnByb3RvdHlwZSxzLDI9PWU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gYy5jYWxsKHQsdGhpcyxlKX06ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbCh0LHRoaXMpfSkpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMyk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKSxlPVwiXCI7cmV0dXJuIHQuZ2xvYmFsJiYoZSs9XCJnXCIpLHQuaWdub3JlQ2FzZSYmKGUrPVwiaVwiKSx0Lm11bHRpbGluZSYmKGUrPVwibVwiKSx0LnVuaWNvZGUmJihlKz1cInVcIiksdC5zdGlja3kmJihlKz1cInlcIiksZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj12b2lkIDA9PT1yO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuP3QoKTp0LmNhbGwocik7Y2FzZSAxOnJldHVybiBuP3QoZVswXSk6dC5jYWxsKHIsZVswXSk7Y2FzZSAyOnJldHVybiBuP3QoZVswXSxlWzFdKTp0LmNhbGwocixlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gbj90KGVbMF0sZVsxXSxlWzJdKTp0LmNhbGwocixlWzBdLGVbMV0sZVsyXSk7Y2FzZSA0OnJldHVybiBuP3QoZVswXSxlWzFdLGVbMl0sZVszXSk6dC5jYWxsKHIsZVswXSxlWzFdLGVbMl0sZVszXSl9cmV0dXJuIHQuYXBwbHkocixlKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigyMyksbz1yKDcpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBuKHQpJiYodm9pZCAwIT09KGU9dFtvXSk/ISFlOlwiUmVnRXhwXCI9PWkodCkpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNykoXCJpdGVyYXRvclwiKSxpPSExO3RyeXt2YXIgbz1bN11bbl0oKTtvLnJldHVybj1mdW5jdGlvbigpe2k9ITB9LEFycmF5LmZyb20obyxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFpKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgbz1bN10sYT1vW25dKCk7YS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6cj0hMH19LG9bbl09ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdChvKX1jYXRjaCh0KXt9cmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoNDEpfHwhcig1KShmdW5jdGlvbigpe3ZhciB0PU1hdGgucmFuZG9tKCk7X19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsdCxmdW5jdGlvbigpe30pLGRlbGV0ZSByKDQpW3RdfSl9LGZ1bmN0aW9uKHQsZSl7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9XCJfX2NvcmUtanNfc2hhcmVkX19cIixvPW5baV18fChuW2ldPXt9KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG9bdF18fChvW3RdPXt9KX19LGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1yKDQpLG89cigxNCksYT1yKDQ4KSxmPWEoXCJ0eXBlZF9hcnJheVwiKSxzPWEoXCJ2aWV3XCIpLHU9ISghaS5BcnJheUJ1ZmZlcnx8IWkuRGF0YVZpZXcpLGg9dSxjPTAsZD05LGw9XCJJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheVwiLnNwbGl0KFwiLFwiKTtjPGQ7KShuPWlbbFtjKytdXSk/KG8obi5wcm90b3R5cGUsZiwhMCksbyhuLnByb3RvdHlwZSxzLCEwKSk6aD0hMTt0LmV4cG9ydHM9e0FCVjp1LENPTlNUUjpoLFRZUEVEOmYsVklFVzpzfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9cig0NzIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPXIoNDc0KX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud2VicGFja1BvbHlmaWxsfHwodC5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwibG9hZGVkXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJpZFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pfX0pLHQud2VicGFja1BvbHlmaWxsPTEpLHR9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5yYW5kb21CeXRlcz1lLnJuZz1lLnBzZXVkb1JhbmRvbUJ5dGVzPWUucHJuZz1yKDYxKSxlLmNyZWF0ZUhhc2g9ZS5IYXNoPXIoNTkpLGUuY3JlYXRlSG1hYz1lLkhtYWM9cigxNDkpO3ZhciBuPVtcInNoYTFcIixcInNoYTIyNFwiLFwic2hhMjU2XCIsXCJzaGEzODRcIixcInNoYTUxMlwiLFwibWQ1XCIsXCJybWQxNjBcIl0uY29uY2F0KE9iamVjdC5rZXlzKHIoMjExKSkpO2UuZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG59O3ZhciBpPXIoMTUxKTtlLnBia2RmMj1pLnBia2RmMixlLnBia2RmMlN5bmM9aS5wYmtkZjJTeW5jO3ZhciBvPXIoNDkzKTtbXCJDaXBoZXJcIixcImNyZWF0ZUNpcGhlclwiLFwiQ2lwaGVyaXZcIixcImNyZWF0ZUNpcGhlcml2XCIsXCJEZWNpcGhlclwiLFwiY3JlYXRlRGVjaXBoZXJcIixcIkRlY2lwaGVyaXZcIixcImNyZWF0ZURlY2lwaGVyaXZcIixcImdldENpcGhlcnNcIixcImxpc3RDaXBoZXJzXCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1vW3RdfSk7dmFyIGE9cig1NzMpO1tcIkRpZmZpZUhlbGxtYW5Hcm91cFwiLFwiY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwXCIsXCJnZXREaWZmaWVIZWxsbWFuXCIsXCJjcmVhdGVEaWZmaWVIZWxsbWFuXCIsXCJEaWZmaWVIZWxsbWFuXCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1hW3RdfSk7dmFyIGY9cig1MDYpO1tcImNyZWF0ZVNpZ25cIixcIlNpZ25cIixcImNyZWF0ZVZlcmlmeVwiLFwiVmVyaWZ5XCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1mW3RdfSksZS5jcmVhdGVFQ0RIPXIoNTQ0KTt2YXIgcz1yKDU3Nyk7W1wicHVibGljRW5jcnlwdFwiLFwicHJpdmF0ZUVuY3J5cHRcIixcInB1YmxpY0RlY3J5cHRcIixcInByaXZhdGVEZWNyeXB0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1zW3RdfSksW1wiY3JlYXRlQ3JlZGVudGlhbHNcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFtcInNvcnJ5LCBcIit0K1wiIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcIixcIndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzXCIsXCJodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvLWJyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnlcIl0uam9pbihcIlxcblwiKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXt2YXIgZSxyO3JldHVybiBlPXQ+Znx8dDwwPyhyPU1hdGguYWJzKHQpJWYsdDwwP2YtcjpyKTp0fWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDt0KyspdFtlXT0wO3JldHVybiExfWZ1bmN0aW9uIGkoKXt0aGlzLlNCT1g9W10sdGhpcy5JTlZfU0JPWD1bXSx0aGlzLlNVQl9NSVg9W1tdLFtdLFtdLFtdXSx0aGlzLklOVl9TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5pbml0KCksdGhpcy5SQ09OPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC80LHI9bmV3IEFycmF5KGUpLG49LTE7KytuPGU7KXJbbl09dC5yZWFkVUludDMyQkUoNCpuKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3RoaXMuX2tleT1vKHQpLHRoaXMuX2RvUmVzZXQoKX12YXIgZj1NYXRoLnBvdygyLDMyKTtpLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvLGEsZixzLHU7Zm9yKHQ9ZnVuY3Rpb24oKXt2YXIgdCxyO2ZvcihyPVtdLGU9dD0wO3Q8MjU2O2U9Kyt0KWU8MTI4P3IucHVzaChlPDwxKTpyLnB1c2goZTw8MV4yODMpO3JldHVybiByfSgpLGk9MCxzPTAsZT11PTA7dTwyNTY7ZT0rK3Upcj1zXnM8PDFeczw8Ml5zPDwzXnM8PDQscj1yPj4+OF4yNTUmcl45OSx0aGlzLlNCT1hbaV09cix0aGlzLklOVl9TQk9YW3JdPWksbz10W2ldLGE9dFtvXSxmPXRbYV0sbj0yNTcqdFtyXV4xNjg0MzAwOCpyLHRoaXMuU1VCX01JWFswXVtpXT1uPDwyNHxuPj4+OCx0aGlzLlNVQl9NSVhbMV1baV09bjw8MTZ8bj4+PjE2LHRoaXMuU1VCX01JWFsyXVtpXT1uPDw4fG4+Pj4yNCx0aGlzLlNVQl9NSVhbM11baV09bixuPTE2ODQzMDA5KmZeNjU1MzcqYV4yNTcqb14xNjg0MzAwOCppLHRoaXMuSU5WX1NVQl9NSVhbMF1bcl09bjw8MjR8bj4+PjgsdGhpcy5JTlZfU1VCX01JWFsxXVtyXT1uPDwxNnxuPj4+MTYsdGhpcy5JTlZfU1VCX01JWFsyXVtyXT1uPDw4fG4+Pj4yNCx0aGlzLklOVl9TVUJfTUlYWzNdW3JdPW4sMD09PWk/aT1zPTE6KGk9b150W3RbdFtmXm9dXV0sc149dFt0W3NdXSk7cmV0dXJuITB9O3ZhciBzPW5ldyBpO2EuYmxvY2tTaXplPTE2LGEucHJvdG90eXBlLmJsb2NrU2l6ZT1hLmJsb2NrU2l6ZSxhLmtleVNpemU9MzIsYS5wcm90b3R5cGUua2V5U2l6ZT1hLmtleVNpemUsYS5wcm90b3R5cGUuX2RvUmVzZXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG87Zm9yKHI9dGhpcy5fa2V5LGU9ci5sZW5ndGgsdGhpcy5fblJvdW5kcz1lKzYsaT00Kih0aGlzLl9uUm91bmRzKzEpLHRoaXMuX2tleVNjaGVkdWxlPVtdLG49MDtuPGk7bisrKXRoaXMuX2tleVNjaGVkdWxlW25dPW48ZT9yW25dOihvPXRoaXMuX2tleVNjaGVkdWxlW24tMV0sbiVlPT09MD8obz1vPDw4fG8+Pj4yNCxvPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb10sb149cy5SQ09OW24vZXwwXTw8MjQpOmU+NiYmbiVlPT09ND9vPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb106dm9pZCAwLHRoaXMuX2tleVNjaGVkdWxlW24tZV1ebyk7Zm9yKHRoaXMuX2ludktleVNjaGVkdWxlPVtdLHQ9MDt0PGk7dCsrKW49aS10LG89dGhpcy5fa2V5U2NoZWR1bGVbbi0odCU0PzA6NCldLHRoaXMuX2ludktleVNjaGVkdWxlW3RdPXQ8NHx8bjw9ND9vOnMuSU5WX1NVQl9NSVhbMF1bcy5TQk9YW28+Pj4yNF1dXnMuSU5WX1NVQl9NSVhbMV1bcy5TQk9YW28+Pj4xNiYyNTVdXV5zLklOVl9TVUJfTUlYWzJdW3MuU0JPWFtvPj4+OCYyNTVdXV5zLklOVl9TVUJfTUlYWzNdW3MuU0JPWFsyNTUmb11dO1xucmV0dXJuITB9LGEucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPXRoaXMuX2RvQ3J5cHRCbG9jayhlLHRoaXMuX2tleVNjaGVkdWxlLHMuU1VCX01JWCxzLlNCT1gpLG49bmV3IHQoMTYpO3JldHVybiBuLndyaXRlVUludDMyQkUoclswXSwwKSxuLndyaXRlVUludDMyQkUoclsxXSw0KSxuLndyaXRlVUludDMyQkUoclsyXSw4KSxuLndyaXRlVUludDMyQkUoclszXSwxMiksbn0sYS5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKGUpe2U9byhuZXcgdChlKSk7dmFyIHI9W2VbM10sZVsxXV07ZVsxXT1yWzBdLGVbM109clsxXTt2YXIgbj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9pbnZLZXlTY2hlZHVsZSxzLklOVl9TVUJfTUlYLHMuSU5WX1NCT1gpLGk9bmV3IHQoMTYpO3JldHVybiBpLndyaXRlVUludDMyQkUoblswXSwwKSxpLndyaXRlVUludDMyQkUoblszXSw0KSxpLndyaXRlVUludDMyQkUoblsyXSw4KSxpLndyaXRlVUludDMyQkUoblsxXSwxMiksaX0sYS5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtuKHRoaXMuX2tleVNjaGVkdWxlKSxuKHRoaXMuX2ludktleVNjaGVkdWxlKSxuKHRoaXMuX2tleSl9LGEucHJvdG90eXBlLl9kb0NyeXB0QmxvY2s9ZnVuY3Rpb24odCxlLG4saSl7dmFyIG8sYSxmLHMsdSxoLGMsZCxsO2E9dFswXV5lWzBdLGY9dFsxXV5lWzFdLHM9dFsyXV5lWzJdLHU9dFszXV5lWzNdLG89NDtmb3IodmFyIHA9MTtwPHRoaXMuX25Sb3VuZHM7cCsrKWg9blswXVthPj4+MjRdXm5bMV1bZj4+PjE2JjI1NV1eblsyXVtzPj4+OCYyNTVdXm5bM11bMjU1JnVdXmVbbysrXSxjPW5bMF1bZj4+PjI0XV5uWzFdW3M+Pj4xNiYyNTVdXm5bMl1bdT4+PjgmMjU1XV5uWzNdWzI1NSZhXV5lW28rK10sZD1uWzBdW3M+Pj4yNF1eblsxXVt1Pj4+MTYmMjU1XV5uWzJdW2E+Pj44JjI1NV1eblszXVsyNTUmZl1eZVtvKytdLGw9blswXVt1Pj4+MjRdXm5bMV1bYT4+PjE2JjI1NV1eblsyXVtmPj4+OCYyNTVdXm5bM11bMjU1JnNdXmVbbysrXSxhPWgsZj1jLHM9ZCx1PWw7cmV0dXJuIGg9KGlbYT4+PjI0XTw8MjR8aVtmPj4+MTYmMjU1XTw8MTZ8aVtzPj4+OCYyNTVdPDw4fGlbMjU1JnVdKV5lW28rK10sYz0oaVtmPj4+MjRdPDwyNHxpW3M+Pj4xNiYyNTVdPDwxNnxpW3U+Pj44JjI1NV08PDh8aVsyNTUmYV0pXmVbbysrXSxkPShpW3M+Pj4yNF08PDI0fGlbdT4+PjE2JjI1NV08PDE2fGlbYT4+PjgmMjU1XTw8OHxpWzI1NSZmXSleZVtvKytdLGw9KGlbdT4+PjI0XTw8MjR8aVthPj4+MTYmMjU1XTw8MTZ8aVtmPj4+OCYyNTVdPDw4fGlbMjU1JnNdKV5lW28rK10sW3IoaCkscihjKSxyKGQpLHIobCldfSxlLkFFUz1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlW1wiYWVzLTEyOC1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTkyLWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTEyOC1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTI1Ni1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlLmFlczEyOD1lW1wiYWVzLTEyOC1jYmNcIl0sZS5hZXMxOTI9ZVtcImFlcy0xOTItY2JjXCJdLGUuYWVzMjU2PWVbXCJhZXMtMjU2LWNiY1wiXSxlW1wiYWVzLTEyOC1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMTkyLWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn0sZVtcImFlcy0yNTYtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoO3ItLTspe2lmKGU9dC5yZWFkVUludDgociksMjU1IT09ZSl7ZSsrLHQud3JpdGVVSW50OChlLHIpO2JyZWFrfXQud3JpdGVVSW50OCgwLHIpfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldik7cmV0dXJuIG4odC5fcHJldiksZX12YXIgbz1yKDY3KTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLGkoZSldKTt2YXIgbj1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLG8ocixuKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9XCJzdHJpbmdcIj09dHlwZW9mIHQsdGhpcy5oYXNoTW9kZT90aGlzW3RdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXZhciBpPXIoMzEpLlRyYW5zZm9ybSxvPXIoMiksYT1yKDUyKS5TdHJpbmdEZWNvZGVyO3QuZXhwb3J0cz1uLG8obixpKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKTt2YXIgaT10aGlzLl91cGRhdGUodCk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoobiYmKGk9dGhpcy5fdG9TdHJpbmcoaSxuKSksaSl9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodCk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh0KSl9Y2F0Y2godCl7bj10fWZpbmFsbHl7cihuKX19LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dGhpcy5wdXNoKHRoaXMuX2ZpbmFsKCkpfWNhdGNoKHQpe2U9dH1maW5hbGx5e3QoZSl9fSxuLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9maW5hbCgpfHxuZXcgZShcIlwiKTtyZXR1cm4gdCYmKHI9dGhpcy5fdG9TdHJpbmcocix0LCEwKSkscn0sbi5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgYShlKSx0aGlzLl9lbmNvZGluZz1lKSx0aGlzLl9lbmNvZGluZyE9PWUpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc3dpdGNoIGVuY29kaW5nc1wiKTt2YXIgbj10aGlzLl9kZWNvZGVyLndyaXRlKHQpO3JldHVybiByJiYobis9dGhpcy5fZGVjb2Rlci5lbmQoKSksbn19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfXQuZXhwb3J0cz1yLHIuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe2lmKHQhPWUpdGhyb3cgbmV3IEVycm9yKHJ8fFwiQXNzZXJ0aW9uIGZhaWxlZDogXCIrdCtcIiAhPSBcIitlKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lO24uYmFzZT1yKDUwOCksbi5zaG9ydD1yKDUxMSksbi5tb250PXIoNTEwKSxuLmVkd2FyZHM9cig1MDkpfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmJpZ251bT1yKDE4KSxuLmRlZmluZT1yKDUzMCkuZGVmaW5lLG4uYmFzZT1yKDY4KSxuLmNvbnN0YW50cz1yKDIxNSksbi5kZWNvZGVycz1yKDUzNCksbi5lbmNvZGVycz1yKDUzNil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXt2YXIgZSxyO3JldHVybiBlPXQ+Znx8dDwwPyhyPU1hdGguYWJzKHQpJWYsdDwwP2YtcjpyKTp0fWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDt0KyspdFtlXT0wO3JldHVybiExfWZ1bmN0aW9uIGkoKXt0aGlzLlNCT1g9W10sdGhpcy5JTlZfU0JPWD1bXSx0aGlzLlNVQl9NSVg9W1tdLFtdLFtdLFtdXSx0aGlzLklOVl9TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5pbml0KCksdGhpcy5SQ09OPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC80LHI9bmV3IEFycmF5KGUpLG49LTE7KytuPGU7KXJbbl09dC5yZWFkVUludDMyQkUoNCpuKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3RoaXMuX2tleT1vKHQpLHRoaXMuX2RvUmVzZXQoKX12YXIgZj1NYXRoLnBvdygyLDMyKTtpLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvLGEsZixzLHU7Zm9yKHQ9ZnVuY3Rpb24oKXt2YXIgdCxyO2ZvcihyPVtdLGU9dD0wO3Q8MjU2O2U9Kyt0KWU8MTI4P3IucHVzaChlPDwxKTpyLnB1c2goZTw8MV4yODMpO3JldHVybiByfSgpLGk9MCxzPTAsZT11PTA7dTwyNTY7ZT0rK3Upcj1zXnM8PDFeczw8Ml5zPDwzXnM8PDQscj1yPj4+OF4yNTUmcl45OSx0aGlzLlNCT1hbaV09cix0aGlzLklOVl9TQk9YW3JdPWksbz10W2ldLGE9dFtvXSxmPXRbYV0sbj0yNTcqdFtyXV4xNjg0MzAwOCpyLHRoaXMuU1VCX01JWFswXVtpXT1uPDwyNHxuPj4+OCx0aGlzLlNVQl9NSVhbMV1baV09bjw8MTZ8bj4+PjE2LHRoaXMuU1VCX01JWFsyXVtpXT1uPDw4fG4+Pj4yNCx0aGlzLlNVQl9NSVhbM11baV09bixuPTE2ODQzMDA5KmZeNjU1MzcqYV4yNTcqb14xNjg0MzAwOCppLHRoaXMuSU5WX1NVQl9NSVhbMF1bcl09bjw8MjR8bj4+PjgsdGhpcy5JTlZfU1VCX01JWFsxXVtyXT1uPDwxNnxuPj4+MTYsdGhpcy5JTlZfU1VCX01JWFsyXVtyXT1uPDw4fG4+Pj4yNCx0aGlzLklOVl9TVUJfTUlYWzNdW3JdPW4sMD09PWk/aT1zPTE6KGk9b150W3RbdFtmXm9dXV0sc149dFt0W3NdXSk7cmV0dXJuITB9O3ZhciBzPW5ldyBpO2EuYmxvY2tTaXplPTE2LGEucHJvdG90eXBlLmJsb2NrU2l6ZT1hLmJsb2NrU2l6ZSxhLmtleVNpemU9MzIsYS5wcm90b3R5cGUua2V5U2l6ZT1hLmtleVNpemUsYS5wcm90b3R5cGUuX2RvUmVzZXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG87Zm9yKHI9dGhpcy5fa2V5LGU9ci5sZW5ndGgsdGhpcy5fblJvdW5kcz1lKzYsaT00Kih0aGlzLl9uUm91bmRzKzEpLHRoaXMuX2tleVNjaGVkdWxlPVtdLG49MDtuPGk7bisrKXRoaXMuX2tleVNjaGVkdWxlW25dPW48ZT9yW25dOihvPXRoaXMuX2tleVNjaGVkdWxlW24tMV0sbiVlPT09MD8obz1vPDw4fG8+Pj4yNCxvPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb10sb149cy5SQ09OW24vZXwwXTw8MjQpOmU+NiYmbiVlPT09ND9vPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb106dm9pZCAwLHRoaXMuX2tleVNjaGVkdWxlW24tZV1ebyk7Zm9yKHRoaXMuX2ludktleVNjaGVkdWxlPVtdLHQ9MDt0PGk7dCsrKW49aS10LG89dGhpcy5fa2V5U2NoZWR1bGVbbi0odCU0PzA6NCldLHRoaXMuX2ludktleVNjaGVkdWxlW3RdPXQ8NHx8bjw9ND9vOnMuSU5WX1NVQl9NSVhbMF1bcy5TQk9YW28+Pj4yNF1dXnMuSU5WX1NVQl9NSVhbMV1bcy5TQk9YW28+Pj4xNiYyNTVdXV5zLklOVl9TVUJfTUlYWzJdW3MuU0JPWFtvPj4+OCYyNTVdXV5zLklOVl9TVUJfTUlYWzNdW3MuU0JPWFsyNTUmb11dO3JldHVybiEwfSxhLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oZSl7ZT1vKG5ldyB0KGUpKTt2YXIgcj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9rZXlTY2hlZHVsZSxzLlNVQl9NSVgscy5TQk9YKSxuPW5ldyB0KDE2KTtyZXR1cm4gbi53cml0ZVVJbnQzMkJFKHJbMF0sMCksbi53cml0ZVVJbnQzMkJFKHJbMV0sNCksbi53cml0ZVVJbnQzMkJFKHJbMl0sOCksbi53cml0ZVVJbnQzMkJFKHJbM10sMTIpLG59LGEucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPVtlWzNdLGVbMV1dO2VbMV09clswXSxlWzNdPXJbMV07dmFyIG49dGhpcy5fZG9DcnlwdEJsb2NrKGUsdGhpcy5faW52S2V5U2NoZWR1bGUscy5JTlZfU1VCX01JWCxzLklOVl9TQk9YKSxpPW5ldyB0KDE2KTtyZXR1cm4gaS53cml0ZVVJbnQzMkJFKG5bMF0sMCksaS53cml0ZVVJbnQzMkJFKG5bM10sNCksaS53cml0ZVVJbnQzMkJFKG5bMl0sOCksaS53cml0ZVVJbnQzMkJFKG5bMV0sMTIpLGl9LGEucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7bih0aGlzLl9rZXlTY2hlZHVsZSksbih0aGlzLl9pbnZLZXlTY2hlZHVsZSksbih0aGlzLl9rZXkpfSxhLnByb3RvdHlwZS5fZG9DcnlwdEJsb2NrPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvLGEsZixzLHUsaCxjLGQsbDthPXRbMF1eZVswXSxmPXRbMV1eZVsxXSxzPXRbMl1eZVsyXSx1PXRbM11eZVszXSxvPTQ7Zm9yKHZhciBwPTE7cDx0aGlzLl9uUm91bmRzO3ArKyloPW5bMF1bYT4+PjI0XV5uWzFdW2Y+Pj4xNiYyNTVdXm5bMl1bcz4+PjgmMjU1XV5uWzNdWzI1NSZ1XV5lW28rK10sYz1uWzBdW2Y+Pj4yNF1eblsxXVtzPj4+MTYmMjU1XV5uWzJdW3U+Pj44JjI1NV1eblszXVsyNTUmYV1eZVtvKytdLGQ9blswXVtzPj4+MjRdXm5bMV1bdT4+PjE2JjI1NV1eblsyXVthPj4+OCYyNTVdXm5bM11bMjU1JmZdXmVbbysrXSxsPW5bMF1bdT4+PjI0XV5uWzFdW2E+Pj4xNiYyNTVdXm5bMl1bZj4+PjgmMjU1XV5uWzNdWzI1NSZzXV5lW28rK10sYT1oLGY9YyxzPWQsdT1sO3JldHVybiBoPShpW2E+Pj4yNF08PDI0fGlbZj4+PjE2JjI1NV08PDE2fGlbcz4+PjgmMjU1XTw8OHxpWzI1NSZ1XSleZVtvKytdLGM9KGlbZj4+PjI0XTw8MjR8aVtzPj4+MTYmMjU1XTw8MTZ8aVt1Pj4+OCYyNTVdPDw4fGlbMjU1JmFdKV5lW28rK10sZD0oaVtzPj4+MjRdPDwyNHxpW3U+Pj4xNiYyNTVdPDwxNnxpW2E+Pj44JjI1NV08PDh8aVsyNTUmZl0pXmVbbysrXSxsPShpW3U+Pj4yNF08PDI0fGlbYT4+PjE2JjI1NV08PDE2fGlbZj4+PjgmMjU1XTw8OHxpWzI1NSZzXSleZVtvKytdLFtyKGgpLHIoYykscihkKSxyKGwpXX0sZS5BRVM9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aDtyLS07KXtpZihlPXQucmVhZFVJbnQ4KHIpLDI1NSE9PWUpe2UrKyx0LndyaXRlVUludDgoZSxyKTticmVha310LndyaXRlVUludDgoMCxyKX19ZnVuY3Rpb24gaSh0KXt2YXIgZT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpO3JldHVybiBuKHQuX3ByZXYpLGV9dmFyIG89cig2OSk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxpKGUpXSk7dmFyIG49ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxvKHIsbil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPVwic3RyaW5nXCI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH12YXIgaT1yKDMxKS5UcmFuc2Zvcm0sbz1yKDIpLGE9cig1MikuU3RyaW5nRGVjb2Rlcjt0LmV4cG9ydHM9bixvKG4saSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSk7dmFyIGk9dGhpcy5fdXBkYXRlKHQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KG4mJihpPXRoaXMuX3RvU3RyaW5nKGksbikpLGkpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG47dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHQpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodCkpfWNhdGNoKHQpe249dH1maW5hbGx5e3Iobil9fSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3RoaXMucHVzaCh0aGlzLl9maW5hbCgpKX1jYXRjaCh0KXtlPXR9ZmluYWxseXt0KGUpfX0sbi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZmluYWwoKXx8bmV3IGUoXCJcIik7cmV0dXJuIHQmJihyPXRoaXMuX3RvU3RyaW5nKHIsdCwhMCkpLHJ9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGEoZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5jb2RpbmchPT1lKXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWU7bi5iYXNlPXIoNTQ1KSxuLnNob3J0PXIoNTQ4KSxuLm1vbnQ9cig1NDcpLG4uZWR3YXJkcz1yKDU0Nil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dFtlPj41XXw9MTI4PDxlJTMyLHRbKGUrNjQ+Pj45PDw0KSsxNF09ZTtmb3IodmFyIHI9MTczMjU4NDE5MyxuPS0yNzE3MzM4NzksaT0tMTczMjU4NDE5NCxoPTI3MTczMzg3OCxjPTA7Yzx0Lmxlbmd0aDtjKz0xNil7dmFyIGQ9cixsPW4scD1pLGI9aDtyPW8ocixuLGksaCx0W2MrMF0sNywtNjgwODc2OTM2KSxoPW8oaCxyLG4saSx0W2MrMV0sMTIsLTM4OTU2NDU4NiksaT1vKGksaCxyLG4sdFtjKzJdLDE3LDYwNjEwNTgxOSksbj1vKG4saSxoLHIsdFtjKzNdLDIyLC0xMDQ0NTI1MzMwKSxyPW8ocixuLGksaCx0W2MrNF0sNywtMTc2NDE4ODk3KSxoPW8oaCxyLG4saSx0W2MrNV0sMTIsMTIwMDA4MDQyNiksaT1vKGksaCxyLG4sdFtjKzZdLDE3LC0xNDczMjMxMzQxKSxuPW8obixpLGgscix0W2MrN10sMjIsLTQ1NzA1OTgzKSxyPW8ocixuLGksaCx0W2MrOF0sNywxNzcwMDM1NDE2KSxoPW8oaCxyLG4saSx0W2MrOV0sMTIsLTE5NTg0MTQ0MTcpLGk9byhpLGgscixuLHRbYysxMF0sMTcsLTQyMDYzKSxuPW8obixpLGgscix0W2MrMTFdLDIyLC0xOTkwNDA0MTYyKSxyPW8ocixuLGksaCx0W2MrMTJdLDcsMTgwNDYwMzY4MiksaD1vKGgscixuLGksdFtjKzEzXSwxMiwtNDAzNDExMDEpLGk9byhpLGgscixuLHRbYysxNF0sMTcsLTE1MDIwMDIyOTApLG49byhuLGksaCxyLHRbYysxNV0sMjIsMTIzNjUzNTMyOSkscj1hKHIsbixpLGgsdFtjKzFdLDUsLTE2NTc5NjUxMCksaD1hKGgscixuLGksdFtjKzZdLDksLTEwNjk1MDE2MzIpLGk9YShpLGgscixuLHRbYysxMV0sMTQsNjQzNzE3NzEzKSxuPWEobixpLGgscix0W2MrMF0sMjAsLTM3Mzg5NzMwMikscj1hKHIsbixpLGgsdFtjKzVdLDUsLTcwMTU1ODY5MSksaD1hKGgscixuLGksdFtjKzEwXSw5LDM4MDE2MDgzKSxpPWEoaSxoLHIsbix0W2MrMTVdLDE0LC02NjA0NzgzMzUpLG49YShuLGksaCxyLHRbYys0XSwyMCwtNDA1NTM3ODQ4KSxyPWEocixuLGksaCx0W2MrOV0sNSw1Njg0NDY0MzgpLGg9YShoLHIsbixpLHRbYysxNF0sOSwtMTAxOTgwMzY5MCksaT1hKGksaCxyLG4sdFtjKzNdLDE0LC0xODczNjM5NjEpLG49YShuLGksaCxyLHRbYys4XSwyMCwxMTYzNTMxNTAxKSxyPWEocixuLGksaCx0W2MrMTNdLDUsLTE0NDQ2ODE0NjcpLGg9YShoLHIsbixpLHRbYysyXSw5LC01MTQwMzc4NCksaT1hKGksaCxyLG4sdFtjKzddLDE0LDE3MzUzMjg0NzMpLG49YShuLGksaCxyLHRbYysxMl0sMjAsLTE5MjY2MDc3MzQpLHI9ZihyLG4saSxoLHRbYys1XSw0LC0zNzg1NTgpLGg9ZihoLHIsbixpLHRbYys4XSwxMSwtMjAyMjU3NDQ2MyksaT1mKGksaCxyLG4sdFtjKzExXSwxNiwxODM5MDMwNTYyKSxuPWYobixpLGgscix0W2MrMTRdLDIzLC0zNTMwOTU1Nikscj1mKHIsbixpLGgsdFtjKzFdLDQsLTE1MzA5OTIwNjApLGg9ZihoLHIsbixpLHRbYys0XSwxMSwxMjcyODkzMzUzKSxpPWYoaSxoLHIsbix0W2MrN10sMTYsLTE1NTQ5NzYzMiksbj1mKG4saSxoLHIsdFtjKzEwXSwyMywtMTA5NDczMDY0MCkscj1mKHIsbixpLGgsdFtjKzEzXSw0LDY4MTI3OTE3NCksaD1mKGgscixuLGksdFtjKzBdLDExLC0zNTg1MzcyMjIpLGk9ZihpLGgscixuLHRbYyszXSwxNiwtNzIyNTIxOTc5KSxuPWYobixpLGgscix0W2MrNl0sMjMsNzYwMjkxODkpLHI9ZihyLG4saSxoLHRbYys5XSw0LC02NDAzNjQ0ODcpLGg9ZihoLHIsbixpLHRbYysxMl0sMTEsLTQyMTgxNTgzNSksaT1mKGksaCxyLG4sdFtjKzE1XSwxNiw1MzA3NDI1MjApLG49ZihuLGksaCxyLHRbYysyXSwyMywtOTk1MzM4NjUxKSxyPXMocixuLGksaCx0W2MrMF0sNiwtMTk4NjMwODQ0KSxoPXMoaCxyLG4saSx0W2MrN10sMTAsMTEyNjg5MTQxNSksaT1zKGksaCxyLG4sdFtjKzE0XSwxNSwtMTQxNjM1NDkwNSksbj1zKG4saSxoLHIsdFtjKzVdLDIxLC01NzQzNDA1NSkscj1zKHIsbixpLGgsdFtjKzEyXSw2LDE3MDA0ODU1NzEpLGg9cyhoLHIsbixpLHRbYyszXSwxMCwtMTg5NDk4NjYwNiksaT1zKGksaCxyLG4sdFtjKzEwXSwxNSwtMTA1MTUyMyksbj1zKG4saSxoLHIsdFtjKzFdLDIxLC0yMDU0OTIyNzk5KSxyPXMocixuLGksaCx0W2MrOF0sNiwxODczMzEzMzU5KSxoPXMoaCxyLG4saSx0W2MrMTVdLDEwLC0zMDYxMTc0NCksaT1zKGksaCxyLG4sdFtjKzZdLDE1LC0xNTYwMTk4MzgwKSxuPXMobixpLGgscix0W2MrMTNdLDIxLDEzMDkxNTE2NDkpLHI9cyhyLG4saSxoLHRbYys0XSw2LC0xNDU1MjMwNzApLGg9cyhoLHIsbixpLHRbYysxMV0sMTAsLTExMjAyMTAzNzkpLGk9cyhpLGgscixuLHRbYysyXSwxNSw3MTg3ODcyNTkpLG49cyhuLGksaCxyLHRbYys5XSwyMSwtMzQzNDg1NTUxKSxyPXUocixkKSxuPXUobixsKSxpPXUoaSxwKSxoPXUoaCxiKX1yZXR1cm4gQXJyYXkocixuLGksaCl9ZnVuY3Rpb24gaSh0LGUscixuLGksbyl7cmV0dXJuIHUoaCh1KHUoZSx0KSx1KG4sbykpLGkpLHIpfWZ1bmN0aW9uIG8odCxlLHIsbixvLGEsZil7cmV0dXJuIGkoZSZyfH5lJm4sdCxlLG8sYSxmKX1mdW5jdGlvbiBhKHQsZSxyLG4sbyxhLGYpe3JldHVybiBpKGUmbnxyJn5uLHQsZSxvLGEsZil9ZnVuY3Rpb24gZih0LGUscixuLG8sYSxmKXtyZXR1cm4gaShlXnJebix0LGUsbyxhLGYpfWZ1bmN0aW9uIHModCxlLHIsbixvLGEsZil7cmV0dXJuIGkocl4oZXx+biksdCxlLG8sYSxmKX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9KDY1NTM1JnQpKyg2NTUzNSZlKSxuPSh0Pj4xNikrKGU+PjE2KSsocj4+MTYpO3JldHVybiBuPDwxNnw2NTUzNSZyfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdDw8ZXx0Pj4+MzItZX12YXIgYz1yKDU2NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBjLmhhc2godCxuLDE2KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uYmlnbnVtPXIoNzApLG4uZGVmaW5lPXIoNTgwKS5kZWZpbmUsbi5iYXNlPXIoNzEpLG4uY29uc3RhbnRzPXIoMjM1KSxuLmRlY29kZXJzPXIoNTg0KSxuLmVuY29kZXJzPXIoNTg2KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQpe3ZhciBlLHI7cmV0dXJuIGU9dD5mfHx0PDA/KHI9TWF0aC5hYnModCklZix0PDA/Zi1yOnIpOnR9ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO3QrKyl0W2VdPTA7cmV0dXJuITF9ZnVuY3Rpb24gaSgpe3RoaXMuU0JPWD1bXSx0aGlzLklOVl9TQk9YPVtdLHRoaXMuU1VCX01JWD1bW10sW10sW10sW11dLHRoaXMuSU5WX1NVQl9NSVg9W1tdLFtdLFtdLFtdXSx0aGlzLmluaXQoKSx0aGlzLlJDT049WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzQscj1uZXcgQXJyYXkoZSksbj0tMTsrK248ZTspcltuXT10LnJlYWRVSW50MzJCRSg0Km4pO3JldHVybiByfWZ1bmN0aW9uIGEodCl7dGhpcy5fa2V5PW8odCksdGhpcy5fZG9SZXNldCgpfXZhciBmPU1hdGgucG93KDIsMzIpO2kucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG8sYSxmLHMsdTtmb3IodD1mdW5jdGlvbigpe3ZhciB0LHI7Zm9yKHI9W10sZT10PTA7dDwyNTY7ZT0rK3QpZTwxMjg/ci5wdXNoKGU8PDEpOnIucHVzaChlPDwxXjI4Myk7cmV0dXJuIHJ9KCksaT0wLHM9MCxlPXU9MDt1PDI1NjtlPSsrdSlyPXNeczw8MV5zPDwyXnM8PDNeczw8NCxyPXI+Pj44XjI1NSZyXjk5LHRoaXMuU0JPWFtpXT1yLHRoaXMuSU5WX1NCT1hbcl09aSxvPXRbaV0sYT10W29dLGY9dFthXSxuPTI1Nyp0W3JdXjE2ODQzMDA4KnIsdGhpcy5TVUJfTUlYWzBdW2ldPW48PDI0fG4+Pj44LHRoaXMuU1VCX01JWFsxXVtpXT1uPDwxNnxuPj4+MTYsdGhpcy5TVUJfTUlYWzJdW2ldPW48PDh8bj4+PjI0LHRoaXMuU1VCX01JWFszXVtpXT1uLG49MTY4NDMwMDkqZl42NTUzNyphXjI1NypvXjE2ODQzMDA4KmksdGhpcy5JTlZfU1VCX01JWFswXVtyXT1uPDwyNHxuPj4+OCx0aGlzLklOVl9TVUJfTUlYWzFdW3JdPW48PDE2fG4+Pj4xNix0aGlzLklOVl9TVUJfTUlYWzJdW3JdPW48PDh8bj4+PjI0LHRoaXMuSU5WX1NVQl9NSVhbM11bcl09biwwPT09aT9pPXM9MTooaT1vXnRbdFt0W2Zeb11dXSxzXj10W3Rbc11dKTtyZXR1cm4hMH07dmFyIHM9bmV3IGk7YS5ibG9ja1NpemU9MTYsYS5wcm90b3R5cGUuYmxvY2tTaXplPWEuYmxvY2tTaXplLGEua2V5U2l6ZT0zMixhLnByb3RvdHlwZS5rZXlTaXplPWEua2V5U2l6ZSxhLnByb3RvdHlwZS5fZG9SZXNldD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksbztmb3Iocj10aGlzLl9rZXksZT1yLmxlbmd0aCx0aGlzLl9uUm91bmRzPWUrNixpPTQqKHRoaXMuX25Sb3VuZHMrMSksdGhpcy5fa2V5U2NoZWR1bGU9W10sbj0wO248aTtuKyspdGhpcy5fa2V5U2NoZWR1bGVbbl09bjxlP3Jbbl06KG89dGhpcy5fa2V5U2NoZWR1bGVbbi0xXSxuJWU9PT0wPyhvPW88PDh8bz4+PjI0LG89cy5TQk9YW28+Pj4yNF08PDI0fHMuU0JPWFtvPj4+MTYmMjU1XTw8MTZ8cy5TQk9YW28+Pj44JjI1NV08PDh8cy5TQk9YWzI1NSZvXSxvXj1zLlJDT05bbi9lfDBdPDwyNCk6ZT42JiZuJWU9PT00P289cy5TQk9YW28+Pj4yNF08PDI0fHMuU0JPWFtvPj4+MTYmMjU1XTw8MTZ8cy5TQk9YW28+Pj44JjI1NV08PDh8cy5TQk9YWzI1NSZvXTp2b2lkIDAsdGhpcy5fa2V5U2NoZWR1bGVbbi1lXV5vKTtmb3IodGhpcy5faW52S2V5U2NoZWR1bGU9W10sdD0wO3Q8aTt0Kyspbj1pLXQsbz10aGlzLl9rZXlTY2hlZHVsZVtuLSh0JTQ/MDo0KV0sdGhpcy5faW52S2V5U2NoZWR1bGVbdF09dDw0fHxuPD00P286cy5JTlZfU1VCX01JWFswXVtzLlNCT1hbbz4+PjI0XV1ecy5JTlZfU1VCX01JWFsxXVtzLlNCT1hbbz4+PjE2JjI1NV1dXnMuSU5WX1NVQl9NSVhbMl1bcy5TQk9YW28+Pj44JjI1NV1dXnMuSU5WX1NVQl9NSVhbM11bcy5TQk9YWzI1NSZvXV07cmV0dXJuITB9LGEucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPXRoaXMuX2RvQ3J5cHRCbG9jayhlLHRoaXMuX2tleVNjaGVkdWxlLHMuU1VCX01JWCxzLlNCT1gpLG49bmV3IHQoMTYpO3JldHVybiBuLndyaXRlVUludDMyQkUoclswXSwwKSxuLndyaXRlVUludDMyQkUoclsxXSw0KSxuLndyaXRlVUludDMyQkUoclsyXSw4KSxuLndyaXRlVUludDMyQkUoclszXSwxMiksbn0sYS5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKGUpe2U9byhuZXcgdChlKSk7dmFyIHI9W2VbM10sZVsxXV07ZVsxXT1yWzBdLGVbM109clsxXTt2YXIgbj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9pbnZLZXlTY2hlZHVsZSxzLklOVl9TVUJfTUlYLHMuSU5WX1NCT1gpLGk9bmV3IHQoMTYpO3JldHVybiBpLndyaXRlVUludDMyQkUoblswXSwwKSxpLndyaXRlVUludDMyQkUoblszXSw0KSxpLndyaXRlVUludDMyQkUoblsyXSw4KSxpLndyaXRlVUludDMyQkUoblsxXSwxMiksaX0sYS5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtuKHRoaXMuX2tleVNjaGVkdWxlKSxuKHRoaXMuX2ludktleVNjaGVkdWxlKSxuKHRoaXMuX2tleSl9LGEucHJvdG90eXBlLl9kb0NyeXB0QmxvY2s9ZnVuY3Rpb24odCxlLG4saSl7dmFyIG8sYSxmLHMsdSxoLGMsZCxsO2E9dFswXV5lWzBdLGY9dFsxXV5lWzFdLHM9dFsyXV5lWzJdLHU9dFszXV5lWzNdLG89NDtmb3IodmFyIHA9MTtwPHRoaXMuX25Sb3VuZHM7cCsrKWg9blswXVthPj4+MjRdXm5bMV1bZj4+PjE2JjI1NV1eblsyXVtzPj4+OCYyNTVdXm5bM11bMjU1JnVdXmVbbysrXSxjPW5bMF1bZj4+PjI0XV5uWzFdW3M+Pj4xNiYyNTVdXm5bMl1bdT4+PjgmMjU1XV5uWzNdWzI1NSZhXV5lW28rK10sZD1uWzBdW3M+Pj4yNF1eblsxXVt1Pj4+MTYmMjU1XV5uWzJdW2E+Pj44JjI1NV1eblszXVsyNTUmZl1eZVtvKytdLGw9blswXVt1Pj4+MjRdXm5bMV1bYT4+PjE2JjI1NV1eblsyXVtmPj4+OCYyNTVdXm5bM11bMjU1JnNdXmVbbysrXSxhPWgsZj1jLHM9ZCx1PWw7cmV0dXJuIGg9KGlbYT4+PjI0XTw8MjR8aVtmPj4+MTYmMjU1XTw8MTZ8aVtzPj4+OCYyNTVdPDw4fGlbMjU1JnVdKV5lW28rK10sYz0oaVtmPj4+MjRdPDwyNHxpW3M+Pj4xNiYyNTVdPDwxNnxpW3U+Pj44JjI1NV08PDh8aVsyNTUmYV0pXmVbbysrXSxkPShpW3M+Pj4yNF08PDI0fGlbdT4+PjE2JjI1NV08PDE2fGlbYT4+PjgmMjU1XTw8OHxpWzI1NSZmXSleZVtvKytdLGw9KGlbdT4+PjI0XTw8MjR8aVthPj4+MTYmMjU1XTw8MTZ8aVtmPj4+OCYyNTVdPDw4fGlbMjU1JnNdKV5lW28rK10sW3IoaCkscihjKSxyKGQpLHIobCldfSxlLkFFUz1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoO3ItLTspe2lmKGU9dC5yZWFkVUludDgociksMjU1IT09ZSl7ZSsrLHQud3JpdGVVSW50OChlLHIpO2JyZWFrfXQud3JpdGVVSW50OCgwLHIpfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldik7cmV0dXJuIG4odC5fcHJldiksZX12YXIgbz1yKDcyKTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLGkoZSldKTt2YXIgbj1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLG8ocixuKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9XCJzdHJpbmdcIj09dHlwZW9mIHQsdGhpcy5oYXNoTW9kZT90aGlzW3RdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXZhciBpPXIoMzEpLlRyYW5zZm9ybSxvPXIoMiksYT1yKDUyKS5TdHJpbmdEZWNvZGVyO3QuZXhwb3J0cz1uLG8obixpKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKTt2YXIgaT10aGlzLl91cGRhdGUodCk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoobiYmKGk9dGhpcy5fdG9TdHJpbmcoaSxuKSksaSl9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodCk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh0KSl9Y2F0Y2godCl7bj10fWZpbmFsbHl7cihuKX19LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dGhpcy5wdXNoKHRoaXMuX2ZpbmFsKCkpfWNhdGNoKHQpe2U9dH1maW5hbGx5e3QoZSl9fSxuLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9maW5hbCgpfHxuZXcgZShcIlwiKTtyZXR1cm4gdCYmKHI9dGhpcy5fdG9TdHJpbmcocix0LCEwKSkscn0sbi5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgYShlKSx0aGlzLl9lbmNvZGluZz1lKSx0aGlzLl9lbmNvZGluZyE9PWUpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc3dpdGNoIGVuY29kaW5nc1wiKTt2YXIgbj10aGlzLl9kZWNvZGVyLndyaXRlKHQpO3JldHVybiByJiYobis9dGhpcy5fZGVjb2Rlci5lbmQoKSksbn19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9ZnVuY3Rpb24gbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGkodCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHR9ZnVuY3Rpb24gbyh0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmbnVsbCE9PXR9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdm9pZCAwPT09dH10LmV4cG9ydHM9cixyLkV2ZW50RW1pdHRlcj1yLHIucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLHIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwLHIuZGVmYXVsdE1heExpc3RlbmVycz0xMCxyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7aWYoIWkodCl8fHQ8MHx8aXNOYU4odCkpdGhyb3cgVHlwZUVycm9yKFwibiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxyLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxmLHMsdTtpZih0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pLFwiZXJyb3JcIj09PXQmJighdGhpcy5fZXZlbnRzLmVycm9yfHxvKHRoaXMuX2V2ZW50cy5lcnJvcikmJiF0aGlzLl9ldmVudHMuZXJyb3IubGVuZ3RoKSl7aWYoZT1hcmd1bWVudHNbMV0sZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGU7dmFyIGg9bmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LiAoJytlK1wiKVwiKTt0aHJvdyBoLmNvbnRleHQ9ZSxofWlmKHI9dGhpcy5fZXZlbnRzW3RdLGEocikpcmV0dXJuITE7aWYobihyKSlzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnIuY2FsbCh0aGlzKTticmVhaztjYXNlIDI6ci5jYWxsKHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6ci5jYWxsKHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7YnJlYWs7ZGVmYXVsdDpmPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxyLmFwcGx5KHRoaXMsZil9ZWxzZSBpZihvKHIpKWZvcihmPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx1PXIuc2xpY2UoKSxpPXUubGVuZ3RoLHM9MDtzPGk7cysrKXVbc10uYXBwbHkodGhpcyxmKTtyZXR1cm4hMH0sci5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt2YXIgaTtpZighbihlKSl0aHJvdyBUeXBlRXJyb3IoXCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7cmV0dXJuIHRoaXMuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz17fSksdGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyJiZ0aGlzLmVtaXQoXCJuZXdMaXN0ZW5lclwiLHQsbihlLmxpc3RlbmVyKT9lLmxpc3RlbmVyOmUpLHRoaXMuX2V2ZW50c1t0XT9vKHRoaXMuX2V2ZW50c1t0XSk/dGhpcy5fZXZlbnRzW3RdLnB1c2goZSk6dGhpcy5fZXZlbnRzW3RdPVt0aGlzLl9ldmVudHNbdF0sZV06dGhpcy5fZXZlbnRzW3RdPWUsbyh0aGlzLl9ldmVudHNbdF0pJiYhdGhpcy5fZXZlbnRzW3RdLndhcm5lZCYmKGk9YSh0aGlzLl9tYXhMaXN0ZW5lcnMpP3IuZGVmYXVsdE1heExpc3RlbmVyczp0aGlzLl9tYXhMaXN0ZW5lcnMsaSYmaT4wJiZ0aGlzLl9ldmVudHNbdF0ubGVuZ3RoPmkmJih0aGlzLl9ldmVudHNbdF0ud2FybmVkPSEwLGNvbnNvbGUuZXJyb3IoXCIobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LlwiLHRoaXMuX2V2ZW50c1t0XS5sZW5ndGgpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGNvbnNvbGUudHJhY2UmJmNvbnNvbGUudHJhY2UoKSkpLHRoaXN9LHIucHJvdG90eXBlLm9uPXIucHJvdG90eXBlLmFkZExpc3RlbmVyLHIucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVMaXN0ZW5lcih0LHIpLGl8fChpPSEwLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1pZighbihlKSl0aHJvdyBUeXBlRXJyb3IoXCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7dmFyIGk9ITE7cmV0dXJuIHIubGlzdGVuZXI9ZSx0aGlzLm9uKHQsciksdGhpc30sci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsZjtpZighbihlKSl0aHJvdyBUeXBlRXJyb3IoXCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7aWYoIXRoaXMuX2V2ZW50c3x8IXRoaXMuX2V2ZW50c1t0XSlyZXR1cm4gdGhpcztpZihyPXRoaXMuX2V2ZW50c1t0XSxhPXIubGVuZ3RoLGk9LTEscj09PWV8fG4oci5saXN0ZW5lcikmJnIubGlzdGVuZXI9PT1lKWRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lclwiLHQsZSk7ZWxzZSBpZihvKHIpKXtmb3IoZj1hO2YtLSA+MDspaWYocltmXT09PWV8fHJbZl0ubGlzdGVuZXImJnJbZl0ubGlzdGVuZXI9PT1lKXtpPWY7YnJlYWt9aWYoaTwwKXJldHVybiB0aGlzOzE9PT1yLmxlbmd0aD8oci5sZW5ndGg9MCxkZWxldGUgdGhpcy5fZXZlbnRzW3RdKTpyLnNwbGljZShpLDEpLHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LGUpfXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGUscjtpZighdGhpcy5fZXZlbnRzKXJldHVybiB0aGlzO2lmKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2V2ZW50cz17fTp0aGlzLl9ldmVudHNbdF0mJmRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKGUgaW4gdGhpcy5fZXZlbnRzKVwicmVtb3ZlTGlzdGVuZXJcIiE9PWUmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGUpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhcInJlbW92ZUxpc3RlbmVyXCIpLHRoaXMuX2V2ZW50cz17fSx0aGlzfWlmKHI9dGhpcy5fZXZlbnRzW3RdLG4ocikpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LHIpO2Vsc2UgaWYocilmb3IoO3IubGVuZ3RoOyl0aGlzLnJlbW92ZUxpc3RlbmVyKHQscltyLmxlbmd0aC0xXSk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpc30sci5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBlPXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzW3RdP24odGhpcy5fZXZlbnRzW3RdKT9bdGhpcy5fZXZlbnRzW3RdXTp0aGlzLl9ldmVudHNbdF0uc2xpY2UoKTpbXX0sci5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0KXtpZih0aGlzLl9ldmVudHMpe3ZhciBlPXRoaXMuX2V2ZW50c1t0XTtpZihuKGUpKXJldHVybiAxO2lmKGUpcmV0dXJuIGUubGVuZ3RofXJldHVybiAwfSxyLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saXN0ZW5lckNvdW50KGUpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e25ld0ludmFsaWRBc24xRXJyb3I6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEVycm9yO3JldHVybiBlLm5hbWU9XCJJbnZhbGlkQXNuMUVycm9yXCIsZS5tZXNzYWdlPXR8fFwiXCIsZX19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17RU9DOjAsQm9vbGVhbjoxLEludGVnZXI6MixCaXRTdHJpbmc6MyxPY3RldFN0cmluZzo0LE51bGw6NSxPSUQ6NixPYmplY3REZXNjcmlwdG9yOjcsRXh0ZXJuYWw6OCxSZWFsOjksRW51bWVyYXRpb246MTAsUERWOjExLFV0ZjhTdHJpbmc6MTIsUmVsYXRpdmVPSUQ6MTMsU2VxdWVuY2U6MTYsU2V0OjE3LE51bWVyaWNTdHJpbmc6MTgsUHJpbnRhYmxlU3RyaW5nOjE5LFQ2MVN0cmluZzoyMCxWaWRlb3RleFN0cmluZzoyMSxJQTVTdHJpbmc6MjIsVVRDVGltZToyMyxHZW5lcmFsaXplZFRpbWU6MjQsR3JhcGhpY1N0cmluZzoyNSxWaXNpYmxlU3RyaW5nOjI2LEdlbmVyYWxTdHJpbmc6MjgsVW5pdmVyc2FsU3RyaW5nOjI5LENoYXJhY3RlclN0cmluZzozMCxCTVBTdHJpbmc6MzEsQ29uc3RydWN0b3I6MzIsQ29udGV4dDoxMjh9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDYyKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9cig5Mykscz1yKDkxKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7bih0aGlzLGUpO3ZhciByPWkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHIuaGFzaD1mLmNyZWF0ZUhhc2godCkscn1yZXR1cm4gbyhlLHQpLGEoZSxbe2tleTpcIndyaXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5oYXNoLnVwZGF0ZSh0KX19LHtrZXk6XCJnZXREaWdlc3RcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2guZGlnZXN0KCl9fV0sW3trZXk6XCJnZXRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZi5jcmVhdGVIYXNoKHQpLmRpZ2VzdCgpLmxlbmd0aH19XSksZX0ocyk7dC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cigyNjEpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpfXJldHVybiBpKHQsbnVsbCxbe2tleTpcImdldENsYXNzRnJvbVR5cGVJZFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGU+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpdGhyb3cgbmV3IG8oXCJUeXBlIFwiK2UrXCIgaXMgbm90IHN1cHBvcnRlZFwiKTt2YXIgcj0hMCxuPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIGEsZj10LnJlZ2lzdGVyZWRUeXBlc1tTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShhPWYubmV4dCgpKS5kb25lKTtyPSEwKXt2YXIgcz1hLnZhbHVlO2lmKGU9PT1zLnR5cGVJZClyZXR1cm4gcy5DbGFzc319Y2F0Y2godCl7bj0hMCxpPXR9ZmluYWxseXt0cnl7IXImJmYucmV0dXJuJiZmLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX10aHJvdyBuZXcgbyhcIlR5cGUgXCIrZStcIiBpcyBub3Qgc3VwcG9ydGVkXCIpfX0se2tleTpcInJlZ2lzdGVyVHlwZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3QucmVnaXN0ZXJlZFR5cGVzLnB1c2goe3R5cGVJZDplLlRZUEVfSUQsQ2xhc3M6ZX0pfX1dKSx0fSgpO2EucmVnaXN0ZXJlZFR5cGVzPVtdLHQuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyKHRoaXMsdCl9cmV0dXJuIG4odCxudWxsLFt7a2V5OlwiZGVjb2RlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5yZXBsYWNlKC9cXC0vZyxcIitcIikucmVwbGFjZSgvXy9nLFwiL1wiKTtyZXR1cm4gbmV3IGUocixcImJhc2U2NFwiKX19LHtrZXk6XCJlbmNvZGVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZyhcImJhc2U2NFwiKS5yZXBsYWNlKC89L2csXCJcIikucmVwbGFjZSgvXFwrL2csXCItXCIpLnJlcGxhY2UoL1xcLy9nLFwiX1wiKX19XSksdH0oKTt0LmV4cG9ydHM9aX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoMTY0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTEpLGk9cig0Nyksbz1yKDEwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4odGhpcykscj1vKGUubGVuZ3RoKSxhPWFyZ3VtZW50cy5sZW5ndGgsZj1pKGE+MT9hcmd1bWVudHNbMV06dm9pZCAwLHIpLHM9YT4yP2FyZ3VtZW50c1syXTp2b2lkIDAsdT12b2lkIDA9PT1zP3I6aShzLHIpO3U+ZjspZVtmKytdPXQ7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig5KSxpPXIoMzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZSBpbiB0P24uZih0LGUsaSgwLHIpKTp0W2VdPXJ9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoNCkuZG9jdW1lbnQsbz1uKGkpJiZuKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPVwiY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mXCIuc3BsaXQoXCIsXCIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0vLi87dHJ5e1wiLy4vXCJbdF0oZSl9Y2F0Y2gocil7dHJ5e3JldHVybiBlW25dPSExLCFcIi8uL1wiW3RdKGUpfWNhdGNoKHQpe319cmV0dXJuITB9fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoNCkuZG9jdW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDEzMikuc2V0O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8sYT1lLmNvbnN0cnVjdG9yO3JldHVybiBhIT09ciYmXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKG89YS5wcm90b3R5cGUpIT09ci5wcm90b3R5cGUmJm4obykmJmkmJmkodCxvKSx0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNTYpLGk9cig3KShcIml0ZXJhdG9yXCIpLG89QXJyYXkucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dCYmKG4uQXJyYXk9PT10fHxvW2ldPT09dCl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMyk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiQXJyYXlcIj09bih0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQyKSxpPXIoMzcpLG89cig1NyksYT17fTtyKDE0KShhLHIoNykoXCJpdGVyYXRvclwiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksdC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt0LnByb3RvdHlwZT1uKGEse25leHQ6aSgxLHIpfSksbyh0LGUrXCIgSXRlcmF0b3JcIil9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0MSksaT1yKDApLG89cigxNSksYT1yKDE0KSxmPXIoMTIpLHM9cig1NiksdT1yKDEyNyksaD1yKDU3KSxjPXIoMjEpLGQ9cig3KShcIml0ZXJhdG9yXCIpLGw9IShbXS5rZXlzJiZcIm5leHRcImluW10ua2V5cygpKSxwPVwiQEBpdGVyYXRvclwiLGI9XCJrZXlzXCIsdj1cInZhbHVlc1wiLHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG0sZyx3LF8pe3UocixlLG0pO3ZhciBNLFMsRSxBPWZ1bmN0aW9uKHQpe2lmKCFsJiZ0IGluIEIpcmV0dXJuIEJbdF07c3dpdGNoKHQpe2Nhc2UgYjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyx0KX07Y2FzZSB2OnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyx0KX19LGs9ZStcIiBJdGVyYXRvclwiLHg9Zz09dixJPSExLEI9dC5wcm90b3R5cGUsTz1CW2RdfHxCW3BdfHxnJiZCW2ddLFI9T3x8QShnKSxQPWc/eD9BKFwiZW50cmllc1wiKTpSOnZvaWQgMCxUPVwiQXJyYXlcIj09ZT9CLmVudHJpZXN8fE86TztpZihUJiYoRT1jKFQuY2FsbChuZXcgdCkpLEUhPT1PYmplY3QucHJvdG90eXBlJiYoaChFLGssITApLG58fGYoRSxkKXx8YShFLGQseSkpKSx4JiZPJiZPLm5hbWUhPT12JiYoST0hMCxSPWZ1bmN0aW9uKCl7cmV0dXJuIE8uY2FsbCh0aGlzKX0pLG4mJiFffHwhbCYmIUkmJkJbZF18fGEoQixkLFIpLHNbZV09UixzW2tdPXksZylpZihNPXt2YWx1ZXM6eD9SOkEodiksa2V5czp3P1I6QShiKSxlbnRyaWVzOlB9LF8pZm9yKFMgaW4gTSlTIGluIEJ8fG8oQixTLE1bU10pO2Vsc2UgaShpLlAraS5GKihsfHxJKSxlLE0pO3JldHVybiBNfX0sZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmV4cG0xO3QuZXhwb3J0cz0hcnx8cigxMCk+MjIwMjUuNDY1Nzk0ODA2NzE4fHxyKDEwKTwyMjAyNS40NjU3OTQ4MDY3MTh8fHIoLTJlLTE3KSE9LTJlLTE3P2Z1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCk/dDp0Pi0xZS02JiZ0PDFlLTY/dCt0KnQvMjpNYXRoLmV4cCh0KS0xfTpyfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCl8fHQhPXQ/dDp0PDA/LTE6MX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigxMzkpLnNldCxvPW4uTXV0YXRpb25PYnNlcnZlcnx8bi5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGE9bi5wcm9jZXNzLGY9bi5Qcm9taXNlLHM9XCJwcm9jZXNzXCI9PXIoMjMpKGEpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUscix1PWZ1bmN0aW9uKCl7dmFyIG4saTtmb3IocyYmKG49YS5kb21haW4pJiZuLmV4aXQoKTt0Oyl7aT10LmZuLHQ9dC5uZXh0O3RyeXtpKCl9Y2F0Y2gobil7dGhyb3cgdD9yKCk6ZT12b2lkIDAsbn19ZT12b2lkIDAsbiYmbi5lbnRlcigpfTtpZihzKXI9ZnVuY3Rpb24oKXthLm5leHRUaWNrKHUpfTtlbHNlIGlmKG8pe3ZhciBoPSEwLGM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7bmV3IG8odSkub2JzZXJ2ZShjLHtjaGFyYWN0ZXJEYXRhOiEwfSkscj1mdW5jdGlvbigpe2MuZGF0YT1oPSFofX1lbHNlIGlmKGYmJmYucmVzb2x2ZSl7dmFyIGQ9Zi5yZXNvbHZlKCk7cj1mdW5jdGlvbigpe2QudGhlbih1KX19ZWxzZSByPWZ1bmN0aW9uKCl7aS5jYWxsKG4sdSl9O3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT17Zm46bixuZXh0OnZvaWQgMH07ZSYmKGUubmV4dD1pKSx0fHwodD1pLHIoKSksZT1pfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigzKSxvPWZ1bmN0aW9uKHQsZSl7aWYoaSh0KSwhbihlKSYmbnVsbCE9PWUpdGhyb3cgVHlwZUVycm9yKGUrXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpfTt0LmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fChcIl9fcHJvdG9fX1wiaW57fT9mdW5jdGlvbih0LGUsbil7dHJ5e249cigzMykoRnVuY3Rpb24uY2FsbCxyKDIwKS5mKE9iamVjdC5wcm90b3R5cGUsXCJfX3Byb3RvX19cIikuc2V0LDIpLG4odCxbXSksZT0hKHQgaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2godCl7ZT0hMH1yZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gbyh0LHIpLGU/dC5fX3Byb3RvX189cjpuKHQsciksdH19KHt9LCExKTp2b2lkIDApLGNoZWNrOm99fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4NykoXCJrZXlzXCIpLGk9cig0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfHwoblt0XT1pKHQpKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMpLGk9cigxMyksbz1yKDcpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhPW4odCkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWF8fHZvaWQgMD09KHI9bihhKVtvXSk/ZTppKHIpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzgpLGk9cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvLGEsZj1TdHJpbmcoaShlKSkscz1uKHIpLHU9Zi5sZW5ndGg7cmV0dXJuIHM8MHx8cz49dT90P1wiXCI6dm9pZCAwOihvPWYuY2hhckNvZGVBdChzKSxvPDU1Mjk2fHxvPjU2MzE5fHxzKzE9PT11fHwoYT1mLmNoYXJDb2RlQXQocysxKSk8NTYzMjB8fGE+NTczNDM/dD9mLmNoYXJBdChzKTpvOnQ/Zi5zbGljZShzLHMrMik6KG8tNTUyOTY8PDEwKSsoYS01NjMyMCkrNjU1MzYpfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDgzKSxpPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYobihlKSl0aHJvdyBUeXBlRXJyb3IoXCJTdHJpbmcjXCIrcitcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7cmV0dXJuIFN0cmluZyhpKHQpKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDM4KSxpPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcoaSh0aGlzKSkscj1cIlwiLG89bih0KTtpZihvPDB8fG89PTEvMCl0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7Zm9yKDtvPjA7KG8+Pj49MSkmJihlKz1lKSkxJm8mJihyKz1lKTtyZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPVwiXFx0XFxuXFx2XFxmXFxyIMKg4ZqA4aCO4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXFx1MjAyOFxcdTIwMjlcXHVmZWZmXCJ9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sYT1yKDMzKSxmPXIoODIpLHM9cigxMjMpLHU9cigxMjApLGg9cig0KSxjPWgucHJvY2VzcyxkPWguc2V0SW1tZWRpYXRlLGw9aC5jbGVhckltbWVkaWF0ZSxwPWguTWVzc2FnZUNoYW5uZWwsYj0wLHY9e30seT1cIm9ucmVhZHlzdGF0ZWNoYW5nZVwiLG09ZnVuY3Rpb24oKXt2YXIgdD0rdGhpcztpZih2Lmhhc093blByb3BlcnR5KHQpKXt2YXIgZT12W3RdO2RlbGV0ZSB2W3RdLGUoKX19LGc9ZnVuY3Rpb24odCl7bS5jYWxsKHQuZGF0YSl9O2QmJmx8fChkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTE7YXJndW1lbnRzLmxlbmd0aD5yOyllLnB1c2goYXJndW1lbnRzW3IrK10pO3JldHVybiB2WysrYl09ZnVuY3Rpb24oKXtmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSxlKX0sbihiKSxifSxsPWZ1bmN0aW9uKHQpe2RlbGV0ZSB2W3RdfSxcInByb2Nlc3NcIj09cigyMykoYyk/bj1mdW5jdGlvbih0KXtjLm5leHRUaWNrKGEobSx0LDEpKX06cD8oaT1uZXcgcCxvPWkucG9ydDIsaS5wb3J0MS5vbm1lc3NhZ2U9ZyxuPWEoby5wb3N0TWVzc2FnZSxvLDEpKTpoLmFkZEV2ZW50TGlzdGVuZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHBvc3RNZXNzYWdlJiYhaC5pbXBvcnRTY3JpcHRzPyhuPWZ1bmN0aW9uKHQpe2gucG9zdE1lc3NhZ2UodCtcIlwiLFwiKlwiKX0saC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGcsITEpKTpuPXkgaW4gdShcInNjcmlwdFwiKT9mdW5jdGlvbih0KXtzLmFwcGVuZENoaWxkKHUoXCJzY3JpcHRcIikpW3ldPWZ1bmN0aW9uKCl7cy5yZW1vdmVDaGlsZCh0aGlzKSxtLmNhbGwodCl9fTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KGEobSx0LDEpLDApfSksdC5leHBvcnRzPXtzZXQ6ZCxjbGVhcjpsfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDgpLG89cig0MSksYT1yKDg4KSxmPXIoMTQpLHM9cig0NSksdT1yKDUpLGg9cig0MCksYz1yKDM4KSxkPXIoMTApLGw9cig0MykuZixwPXIoOSkuZixiPXIoMTE4KSx2PXIoNTcpLHk9XCJBcnJheUJ1ZmZlclwiLG09XCJEYXRhVmlld1wiLGc9XCJwcm90b3R5cGVcIix3PVwiV3JvbmcgbGVuZ3RoIVwiLF89XCJXcm9uZyBpbmRleCFcIixNPW5beV0sUz1uW21dLEU9bi5NYXRoLEE9bi5SYW5nZUVycm9yLGs9bi5JbmZpbml0eSx4PU0sST1FLmFicyxCPUUucG93LE89RS5mbG9vcixSPUUubG9nLFA9RS5MTjIsVD1cImJ1ZmZlclwiLGo9XCJieXRlTGVuZ3RoXCIsQz1cImJ5dGVPZmZzZXRcIixOPWk/XCJfYlwiOlQsTD1pP1wiX2xcIjpqLFU9aT9cIl9vXCI6Qyx6PWZ1bmN0aW9uKHQsZSxyKXtcbnZhciBuLGksbyxhPUFycmF5KHIpLGY9OCpyLWUtMSxzPSgxPDxmKS0xLHU9cz4+MSxoPTIzPT09ZT9CKDIsLTI0KS1CKDIsLTc3KTowLGM9MCxkPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1JKHQpLHQhPXR8fHQ9PT1rPyhpPXQhPXQ/MTowLG49cyk6KG49TyhSKHQpL1ApLHQqKG89QigyLC1uKSk8MSYmKG4tLSxvKj0yKSx0Kz1uK3U+PTE/aC9vOmgqQigyLDEtdSksdCpvPj0yJiYobisrLG8vPTIpLG4rdT49cz8oaT0wLG49cyk6bit1Pj0xPyhpPSh0Km8tMSkqQigyLGUpLG4rPXUpOihpPXQqQigyLHUtMSkqQigyLGUpLG49MCkpO2U+PTg7YVtjKytdPTI1NSZpLGkvPTI1NixlLT04KTtmb3Iobj1uPDxlfGksZis9ZTtmPjA7YVtjKytdPTI1NSZuLG4vPTI1NixmLT04KTtyZXR1cm4gYVstLWNdfD0xMjgqZCxhfSxEPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPTgqci1lLTEsbz0oMTw8aSktMSxhPW8+PjEsZj1pLTcscz1yLTEsdT10W3MtLV0saD0xMjcmdTtmb3IodT4+PTc7Zj4wO2g9MjU2KmgrdFtzXSxzLS0sZi09OCk7Zm9yKG49aCYoMTw8LWYpLTEsaD4+PS1mLGYrPWU7Zj4wO249MjU2Km4rdFtzXSxzLS0sZi09OCk7aWYoMD09PWgpaD0xLWE7ZWxzZXtpZihoPT09bylyZXR1cm4gbj9OYU46dT8tazprO24rPUIoMixlKSxoLT1hfXJldHVybih1Py0xOjEpKm4qQigyLGgtZSl9LHE9ZnVuY3Rpb24odCl7cmV0dXJuIHRbM108PDI0fHRbMl08PDE2fHRbMV08PDh8dFswXX0sRj1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnRdfSxLPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdCx0Pj44JjI1NV19LEc9ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1LHQ+PjE2JjI1NSx0Pj4yNCYyNTVdfSxWPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQsNTIsOCl9LEg9ZnVuY3Rpb24odCl7cmV0dXJuIHoodCwyMyw0KX0sWD1mdW5jdGlvbih0LGUscil7cCh0W2ddLGUse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW3JdfX0pfSxZPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPStyLG89YyhpKTtpZihpIT1vfHxvPDB8fG8rZT50W0xdKXRocm93IEEoXyk7dmFyIGE9dFtOXS5fYixmPW8rdFtVXSxzPWEuc2xpY2UoZixmK2UpO3JldHVybiBuP3M6cy5yZXZlcnNlKCl9LFc9ZnVuY3Rpb24odCxlLHIsbixpLG8pe3ZhciBhPStyLGY9YyhhKTtpZihhIT1mfHxmPDB8fGYrZT50W0xdKXRocm93IEEoXyk7Zm9yKHZhciBzPXRbTl0uX2IsdT1mK3RbVV0saD1uKCtpKSxkPTA7ZDxlO2QrKylzW3UrZF09aFtvP2Q6ZS1kLTFdfSxaPWZ1bmN0aW9uKHQsZSl7aCh0LE0seSk7dmFyIHI9K2Usbj1kKHIpO2lmKHIhPW4pdGhyb3cgQSh3KTtyZXR1cm4gbn07aWYoYS5BQlYpe2lmKCF1KGZ1bmN0aW9uKCl7bmV3IE19KXx8IXUoZnVuY3Rpb24oKXtuZXcgTSguNSl9KSl7TT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHgoWih0aGlzLHQpKX07Zm9yKHZhciBKLCQ9TVtnXT14W2ddLFE9bCh4KSx0dD0wO1EubGVuZ3RoPnR0OykoSj1RW3R0KytdKWluIE18fGYoTSxKLHhbSl0pO298fCgkLmNvbnN0cnVjdG9yPU0pfXZhciBldD1uZXcgUyhuZXcgTSgyKSkscnQ9U1tnXS5zZXRJbnQ4O2V0LnNldEludDgoMCwyMTQ3NDgzNjQ4KSxldC5zZXRJbnQ4KDEsMjE0NzQ4MzY0OSksIWV0LmdldEludDgoMCkmJmV0LmdldEludDgoMSl8fHMoU1tnXSx7c2V0SW50ODpmdW5jdGlvbih0LGUpe3J0LmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7cnQuY2FsbCh0aGlzLHQsZTw8MjQ+PjI0KX19LCEwKX1lbHNlIE09ZnVuY3Rpb24odCl7dmFyIGU9Wih0aGlzLHQpO3RoaXMuX2I9Yi5jYWxsKEFycmF5KGUpLDApLHRoaXNbTF09ZX0sUz1mdW5jdGlvbih0LGUscil7aCh0aGlzLFMsbSksaCh0LE0sbSk7dmFyIG49dFtMXSxpPWMoZSk7aWYoaTwwfHxpPm4pdGhyb3cgQShcIldyb25nIG9mZnNldCFcIik7aWYocj12b2lkIDA9PT1yP24taTpkKHIpLGkrcj5uKXRocm93IEEodyk7dGhpc1tOXT10LHRoaXNbVV09aSx0aGlzW0xdPXJ9LGkmJihYKE0saixcIl9sXCIpLFgoUyxULFwiX2JcIiksWChTLGosXCJfbFwiKSxYKFMsQyxcIl9vXCIpKSxzKFNbZ10se2dldEludDg6ZnVuY3Rpb24odCl7cmV0dXJuIFkodGhpcywxLHQpWzBdPDwyND4+MjR9LGdldFVpbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBZKHRoaXMsMSx0KVswXX0sZ2V0SW50MTY6ZnVuY3Rpb24odCl7dmFyIGU9WSh0aGlzLDIsdCxhcmd1bWVudHNbMV0pO3JldHVybihlWzFdPDw4fGVbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbih0KXt2YXIgZT1ZKHRoaXMsMix0LGFyZ3VtZW50c1sxXSk7cmV0dXJuIGVbMV08PDh8ZVswXX0sZ2V0SW50MzI6ZnVuY3Rpb24odCl7cmV0dXJuIHEoWSh0aGlzLDQsdCxhcmd1bWVudHNbMV0pKX0sZ2V0VWludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBxKFkodGhpcyw0LHQsYXJndW1lbnRzWzFdKSk+Pj4wfSxnZXRGbG9hdDMyOmZ1bmN0aW9uKHQpe3JldHVybiBEKFkodGhpcyw0LHQsYXJndW1lbnRzWzFdKSwyMyw0KX0sZ2V0RmxvYXQ2NDpmdW5jdGlvbih0KXtyZXR1cm4gRChZKHRoaXMsOCx0LGFyZ3VtZW50c1sxXSksNTIsOCl9LHNldEludDg6ZnVuY3Rpb24odCxlKXtXKHRoaXMsMSx0LEYsZSl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDEsdCxGLGUpfSxzZXRJbnQxNjpmdW5jdGlvbih0LGUpe1codGhpcywyLHQsSyxlLGFyZ3VtZW50c1syXSl9LHNldFVpbnQxNjpmdW5jdGlvbih0LGUpe1codGhpcywyLHQsSyxlLGFyZ3VtZW50c1syXSl9LHNldEludDMyOmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDQsdCxHLGUsYXJndW1lbnRzWzJdKX0sc2V0VWludDMyOmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDQsdCxHLGUsYXJndW1lbnRzWzJdKX0sc2V0RmxvYXQzMjpmdW5jdGlvbih0LGUpe1codGhpcyw0LHQsSCxlLGFyZ3VtZW50c1syXSl9LHNldEZsb2F0NjQ6ZnVuY3Rpb24odCxlKXtXKHRoaXMsOCx0LFYsZSxhcmd1bWVudHNbMl0pfX0pO3YoTSx5KSx2KFMsbSksZihTW2ddLGEuVklFVywhMCksZVt5XT1NLGVbbV09U30sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1yKDMyKSxvPXIoNDEpLGE9cigxODkpLGY9cig5KS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pLlN5bWJvbHx8KGkuU3ltYm9sPW8/e306bi5TeW1ib2x8fHt9KTtcIl9cIj09dC5jaGFyQXQoMCl8fHQgaW4gZXx8ZihlLHQse3ZhbHVlOmEuZih0KX0pfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNjQpLGk9cig3KShcIml0ZXJhdG9yXCIpLG89cig1Nik7dC5leHBvcnRzPXIoMzIpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9dClyZXR1cm4gdFtpXXx8dFtcIkBAaXRlcmF0b3JcIl18fG9bbih0KV19fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig1NCksaT1yKDE3Nyksbz1yKDU2KSxhPXIoMTcpO3QuZXhwb3J0cz1yKDEyOCkoQXJyYXksXCJBcnJheVwiLGZ1bmN0aW9uKHQsZSl7dGhpcy5fdD1hKHQpLHRoaXMuX2k9MCx0aGlzLl9rPWV9LGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdCxlPXRoaXMuX2sscj10aGlzLl9pKys7cmV0dXJuIXR8fHI+PXQubGVuZ3RoPyh0aGlzLl90PXZvaWQgMCxpKDEpKTpcImtleXNcIj09ZT9pKDAscik6XCJ2YWx1ZXNcIj09ZT9pKDAsdFtyXSk6aSgwLFtyLHRbcl1dKX0sXCJ2YWx1ZXNcIiksby5Bcmd1bWVudHM9by5BcnJheSxuKFwia2V5c1wiKSxuKFwidmFsdWVzXCIpLG4oXCJlbnRyaWVzXCIpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDE5OSkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLnV0aWxzPXIoNTA1KSxlLkNpcGhlcj1yKDUwMiksZS5ERVM9cig1MDMpLGUuQ0JDPXIoNTAxKSxlLkVERT1yKDUwNCl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsbixvKXtlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LFwiYmluYXJ5XCIpKSxyJiYhZS5pc0J1ZmZlcihyKSYmKHI9bmV3IGUocixcImJpbmFyeVwiKSksbi89OCxvPW98fDA7Zm9yKHZhciBhLGYscz0wLHU9MCxoPW5ldyBlKG4pLGM9bmV3IGUobyksZD0wLGw9W107Oyl7aWYoZCsrPjAmJmwucHVzaChhKSxsLnB1c2godCksciYmbC5wdXNoKHIpLGE9aShlLmNvbmNhdChsKSksbD1bXSxmPTAsbj4wKWZvcig7Oyl7aWYoMD09PW4pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2hbcysrXT1hW2ZdLG4tLSxmKyt9aWYobz4wJiZmIT09YS5sZW5ndGgpZm9yKDs7KXtpZigwPT09bylicmVhaztpZihmPT09YS5sZW5ndGgpYnJlYWs7Y1t1KytdPWFbZl0sby0tLGYrK31pZigwPT09biYmMD09PW8pYnJlYWt9Zm9yKGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdPTA7cmV0dXJue2tleTpoLGl2OmN9fXZhciBpPXIoMTA1KTt0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZVtcImFlcy0xMjgtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMjU2LWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xMjgtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xOTItY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZS5hZXMxMjg9ZVtcImFlcy0xMjgtY2JjXCJdLGUuYWVzMTkyPWVbXCJhZXMtMTkyLWNiY1wiXSxlLmFlczI1Nj1lW1wiYWVzLTI1Ni1jYmNcIl0sZVtcImFlcy0xMjgtY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxlW1wiYWVzLTE5Mi1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMjU2LWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsbixvKXtlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LFwiYmluYXJ5XCIpKSxyJiYhZS5pc0J1ZmZlcihyKSYmKHI9bmV3IGUocixcImJpbmFyeVwiKSksbi89OCxvPW98fDA7Zm9yKHZhciBhLGYscz0wLHU9MCxoPW5ldyBlKG4pLGM9bmV3IGUobyksZD0wLGw9W107Oyl7aWYoZCsrPjAmJmwucHVzaChhKSxsLnB1c2godCksciYmbC5wdXNoKHIpLGE9aShlLmNvbmNhdChsKSksbD1bXSxmPTAsbj4wKWZvcig7Oyl7aWYoMD09PW4pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2hbcysrXT1hW2ZdLG4tLSxmKyt9aWYobz4wJiZmIT09YS5sZW5ndGgpZm9yKDs7KXtpZigwPT09bylicmVhaztpZihmPT09YS5sZW5ndGgpYnJlYWs7Y1t1KytdPWFbZl0sby0tLGYrK31pZigwPT09biYmMD09PW8pYnJlYWt9Zm9yKGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdPTA7cmV0dXJue2tleTpoLGl2OmN9fXZhciBpPXIoMTA1KTt0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIpe2EuY2FsbCh0aGlzKSx0PXQudG9Mb3dlckNhc2UoKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IGUocikpO3ZhciBuPVwic2hhNTEyXCI9PT10fHxcInNoYTM4NFwiPT09dD8xMjg6NjQ7dGhpcy5fYWxnPXQsdGhpcy5fa2V5PXIsci5sZW5ndGg+bj9yPWkodCkudXBkYXRlKHIpLmRpZ2VzdCgpOnIubGVuZ3RoPG4mJihyPWUuY29uY2F0KFtyLGZdLG4pKTtmb3IodmFyIG89dGhpcy5faXBhZD1uZXcgZShuKSxzPXRoaXMuX29wYWQ9bmV3IGUobiksdT0wO3U8bjt1Kyspb1t1XT01NF5yW3VdLHNbdV09OTJeclt1XTt0aGlzLl9oYXNoPWkodCkudXBkYXRlKG8pfXZhciBpPXIoNTkpLG89cigyKSxhPXIoMzEpLlRyYW5zZm9ybSxmPW5ldyBlKDEyOCk7Zi5maWxsKDApLG8obixhKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUodCxlKSx0aGlzfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9oYXNoLnVwZGF0ZSh0KSxyKCl9LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSksdCgpfSxuLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gaSh0aGlzLl9hbGcpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoZSkuZGlnZXN0KHQpfSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4odCxlKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiBvLmlzQk4odCk/dDoodGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsdm9pZChudWxsIT09dCYmKFwibGVcIiE9PWUmJlwiYmVcIiE9PWV8fChyPWUsZT0xMCksdGhpcy5faW5pdCh0fHwwLGV8fDEwLHJ8fFwiYmVcIikpKSl9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxpO28rKyl7dmFyIGE9dC5jaGFyQ29kZUF0KG8pLTQ4O248PD00LG58PWE+PTQ5JiZhPD01ND9hLTQ5KzEwOmE+PTE3JiZhPD0yMj9hLTE3KzEwOjE1JmF9cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPG87YSsrKXt2YXIgZj10LmNoYXJDb2RlQXQoYSktNDg7aSo9bixpKz1mPj00OT9mLTQ5KzEwOmY+PTE3P2YtMTcrMTA6Zn1yZXR1cm4gaX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfWZ1bmN0aW9uIHUodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxvPTB8ZS53b3Jkc1swXSxhPWkqbyxmPTY3MTA4ODYzJmEscz1hLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1mO2Zvcih2YXIgdT0xO3U8bjt1Kyspe2Zvcih2YXIgaD1zPj4+MjYsYz02NzEwODg2MyZzLGQ9TWF0aC5taW4odSxlLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsdS10Lmxlbmd0aCsxKTtsPD1kO2wrKyl7dmFyIHA9dS1sfDA7aT0wfHQud29yZHNbcF0sbz0wfGUud29yZHNbbF0sYT1pKm8rYyxoKz1hLzY3MTA4ODY0fDAsYz02NzEwODg2MyZhfXIud29yZHNbdV09MHxjLHM9MHxofXJldHVybiAwIT09cz9yLndvcmRzW3VdPTB8czpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBoKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsbz0wO288ci5sZW5ndGgtMTtvKyspe3ZhciBhPWk7aT0wO2Zvcih2YXIgZj02NzEwODg2MyZuLHM9TWF0aC5taW4obyxlLmxlbmd0aC0xKSx1PU1hdGgubWF4KDAsby10Lmxlbmd0aCsxKTt1PD1zO3UrKyl7dmFyIGg9by11LGM9MHx0LndvcmRzW2hdLGQ9MHxlLndvcmRzW3VdLGw9YypkLHA9NjcxMDg4NjMmbDthPWErKGwvNjcxMDg4NjR8MCl8MCxwPXArZnwwLGY9NjcxMDg4NjMmcCxhPWErKHA+Pj4yNil8MCxpKz1hPj4+MjYsYSY9NjcxMDg4NjN9ci53b3Jkc1tvXT1mLG49YSxhPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbb109bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1uZXcgZDtyZXR1cm4gbi5tdWxwKHQsZSxyKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZnVuY3Rpb24gbCh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgbyhlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgbygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gcCgpe2wuY2FsbCh0aGlzLFwiazI1NlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIil9ZnVuY3Rpb24gYigpe2wuY2FsbCh0aGlzLFwicDIyNFwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIil9ZnVuY3Rpb24gdigpe2wuY2FsbCh0aGlzLFwicDE5MlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIil9ZnVuY3Rpb24geSgpe2wuY2FsbCh0aGlzLFwiMjU1MTlcIixcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIil9ZnVuY3Rpb24gbSh0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9by5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLFwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxXCIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBnKHQpe20uY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBvKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVwib2JqZWN0XCI9PXR5cGVvZiB0P3QuZXhwb3J0cz1vOmUuQk49byxvLkJOPW8sby53b3JkU2l6ZT0yNjt2YXIgdzt0cnl7dz1yKDEpLkJ1ZmZlcn1jYXRjaCh0KXt9by5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygb3x8bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09by53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sby5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LG8ubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpO1wiaGV4XCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KSx0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIik7dmFyIGk9MDtcIi1cIj09PXRbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLFwiLVwiPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIG8sYSxmPTA7aWYoXCJiZVwiPT09cilmb3IoaT10Lmxlbmd0aC0xLG89MDtpPj0wO2ktPTMpYT10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtlbHNlIGlmKFwibGVcIj09PXIpZm9yKGk9MCxvPTA7aTx0Lmxlbmd0aDtpKz0zKWE9dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksbz0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPWEodCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMsbys9MjQsbz49MjYmJihvLT0yNixuKyspO3IrNiE9PWUmJihpPWEodCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBvPXQubGVuZ3RoLXIsYT1vJW4scz1NYXRoLm1pbihvLG8tYSkrcix1PTAsaD1yO2g8cztoKz1uKXU9Zih0LGgsaCtuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PWEpe3ZhciBjPTE7Zm9yKHU9Zih0LGgsdC5sZW5ndGgsZSksaD0wO2g8YTtoKyspYyo9ZTt0aGlzLmltdWxuKGMpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0sby5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LG8ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sby5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIF89W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLE09WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sUz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe3Q9dHx8MTAsZT0wfGV8fDE7dmFyIHI7aWYoMTY9PT10fHxcImhleFwiPT09dCl7cj1cIlwiO2Zvcih2YXIgaT0wLG89MCxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPXRoaXMud29yZHNbYV0scz0oMTY3NzcyMTUmKGY8PGl8bykpLnRvU3RyaW5nKDE2KTtvPWY+Pj4yNC1pJjE2Nzc3MjE1LHI9MCE9PW98fGEhPT10aGlzLmxlbmd0aC0xP19bNi1zLmxlbmd0aF0rcytyOnMrcixpKz0yLGk+PTI2JiYoaS09MjYsYS0tKX1mb3IoMCE9PW8mJihyPW8udG9TdHJpbmcoMTYpK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciB1PU1bdF0saD1TW3RdO3I9XCJcIjt2YXIgYz10aGlzLmNsb25lKCk7Zm9yKGMubmVnYXRpdmU9MDshYy5pc1plcm8oKTspe3ZhciBkPWMubW9kbihoKS50b1N0cmluZyh0KTtjPWMuaWRpdm4oaCkscj1jLmlzWmVybygpP2QrcjpfW3UtZC5sZW5ndGhdK2Qrcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9bighMSxcIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzZcIil9LG8ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSxcIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0c1wiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LG8ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHcpLHRoaXMudG9BcnJheUxpa2Uodyx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sby5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLG89cnx8TWF0aC5tYXgoMSxpKTtuKGk8PW8sXCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoXCIpLG4obz4wLFwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwXCIpLHRoaXMuc3RyaXAoKTt2YXIgYSxmLHM9XCJsZVwiPT09ZSx1PW5ldyB0KG8pLGg9dGhpcy5jbG9uZSgpO2lmKHMpe2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbZl09YTtmb3IoO2Y8bztmKyspdVtmXT0wfWVsc2V7Zm9yKGY9MDtmPG8taTtmKyspdVtmXT0wO2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbby1mLTFdPWF9cmV0dXJuIHV9LE1hdGguY2x6MzI/by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LG8ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PT0oMSZlKSYmcisrLHJ9LG8ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxvLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sby5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sby5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LG8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxvLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxvLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LG8ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LG8ucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LG8ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1YW5kKHQpfSxvLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxvLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodCk6dC5jbG9uZSgpLml1YW5kKHRoaXMpfSxvLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LG8ucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LG8ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LG8ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sby5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLGU/dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt2YXIgcixuO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsbz0wO288bi5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkrKDB8bi53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmbzxyLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LG8ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByPXRoaXMuY21wKHQpO2lmKDA9PT1yKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt2YXIgbixpO3I+MD8obj10aGlzLGk9dCk6KG49dCxpPXRoaXMpO2Zvcih2YXIgbz0wLGE9MDthPGkubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pLSgwfGkud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7Zm9yKDswIT09byYmYTxuLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2lmKDA9PT1vJiZhPG4ubGVuZ3RoJiZuIT09dGhpcylmb3IoO2E8bi5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09bi53b3Jkc1thXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYSksbiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxhPXQud29yZHMsZj1lLndvcmRzLHM9ci53b3Jkcyx1PTAsaD0wfGFbMF0sYz04MTkxJmgsZD1oPj4+MTMsbD0wfGFbMV0scD04MTkxJmwsYj1sPj4+MTMsdj0wfGFbMl0seT04MTkxJnYsbT12Pj4+MTMsZz0wfGFbM10sdz04MTkxJmcsXz1nPj4+MTMsTT0wfGFbNF0sUz04MTkxJk0sRT1NPj4+MTMsQT0wfGFbNV0saz04MTkxJkEseD1BPj4+MTMsST0wfGFbNl0sQj04MTkxJkksTz1JPj4+MTMsUj0wfGFbN10sUD04MTkxJlIsVD1SPj4+MTMsaj0wfGFbOF0sQz04MTkxJmosTj1qPj4+MTMsTD0wfGFbOV0sVT04MTkxJkwsej1MPj4+MTMsRD0wfGZbMF0scT04MTkxJkQsRj1EPj4+MTMsSz0wfGZbMV0sRz04MTkxJkssVj1LPj4+MTMsSD0wfGZbMl0sWD04MTkxJkgsWT1IPj4+MTMsVz0wfGZbM10sWj04MTkxJlcsSj1XPj4+MTMsJD0wfGZbNF0sUT04MTkxJiQsdHQ9JD4+PjEzLGV0PTB8Zls1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxmWzZdLG90PTgxOTEmaXQsYXQ9aXQ+Pj4xMyxmdD0wfGZbN10sc3Q9ODE5MSZmdCx1dD1mdD4+PjEzLGh0PTB8Zls4XSxjdD04MTkxJmh0LGR0PWh0Pj4+MTMsbHQ9MHxmWzldLHB0PTgxOTEmbHQsYnQ9bHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOSxuPU1hdGguaW11bChjLHEpLGk9TWF0aC5pbXVsKGMsRiksaT1pK01hdGguaW11bChkLHEpfDAsbz1NYXRoLmltdWwoZCxGKTt2YXIgdnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHZ0Pj4+MjYpfDAsdnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHAscSksaT1NYXRoLmltdWwocCxGKSxpPWkrTWF0aC5pbXVsKGIscSl8MCxvPU1hdGguaW11bChiLEYpLG49bitNYXRoLmltdWwoYyxHKXwwLGk9aStNYXRoLmltdWwoYyxWKXwwLGk9aStNYXRoLmltdWwoZCxHKXwwLG89bytNYXRoLmltdWwoZCxWKXwwO3ZhciB5dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeSxxKSxpPU1hdGguaW11bCh5LEYpLGk9aStNYXRoLmltdWwobSxxKXwwLG89TWF0aC5pbXVsKG0sRiksbj1uK01hdGguaW11bChwLEcpfDAsaT1pK01hdGguaW11bChwLFYpfDAsaT1pK01hdGguaW11bChiLEcpfDAsbz1vK01hdGguaW11bChiLFYpfDAsbj1uK01hdGguaW11bChjLFgpfDAsaT1pK01hdGguaW11bChjLFkpfDAsaT1pK01hdGguaW11bChkLFgpfDAsbz1vK01hdGguaW11bChkLFkpfDA7dmFyIG10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhtdD4+PjI2KXwwLG10Jj02NzEwODg2MyxuPU1hdGguaW11bCh3LHEpLGk9TWF0aC5pbXVsKHcsRiksaT1pK01hdGguaW11bChfLHEpfDAsbz1NYXRoLmltdWwoXyxGKSxuPW4rTWF0aC5pbXVsKHksRyl8MCxpPWkrTWF0aC5pbXVsKHksVil8MCxpPWkrTWF0aC5pbXVsKG0sRyl8MCxvPW8rTWF0aC5pbXVsKG0sVil8MCxuPW4rTWF0aC5pbXVsKHAsWCl8MCxpPWkrTWF0aC5pbXVsKHAsWSl8MCxpPWkrTWF0aC5pbXVsKGIsWCl8MCxvPW8rTWF0aC5pbXVsKGIsWSl8MCxuPW4rTWF0aC5pbXVsKGMsWil8MCxpPWkrTWF0aC5pbXVsKGMsSil8MCxpPWkrTWF0aC5pbXVsKGQsWil8MCxvPW8rTWF0aC5pbXVsKGQsSil8MDt2YXIgZ3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGd0Pj4+MjYpfDAsZ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFMscSksaT1NYXRoLmltdWwoUyxGKSxpPWkrTWF0aC5pbXVsKEUscSl8MCxvPU1hdGguaW11bChFLEYpLG49bitNYXRoLmltdWwodyxHKXwwLGk9aStNYXRoLmltdWwodyxWKXwwLGk9aStNYXRoLmltdWwoXyxHKXwwLG89bytNYXRoLmltdWwoXyxWKXwwLG49bitNYXRoLmltdWwoeSxYKXwwLGk9aStNYXRoLmltdWwoeSxZKXwwLGk9aStNYXRoLmltdWwobSxYKXwwLG89bytNYXRoLmltdWwobSxZKXwwLG49bitNYXRoLmltdWwocCxaKXwwLGk9aStNYXRoLmltdWwocCxKKXwwLGk9aStNYXRoLmltdWwoYixaKXwwLG89bytNYXRoLmltdWwoYixKKXwwLG49bitNYXRoLmltdWwoYyxRKXwwLGk9aStNYXRoLmltdWwoYyx0dCl8MCxpPWkrTWF0aC5pbXVsKGQsUSl8MCxvPW8rTWF0aC5pbXVsKGQsdHQpfDA7dmFyIHd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChrLHEpLGk9TWF0aC5pbXVsKGssRiksaT1pK01hdGguaW11bCh4LHEpfDAsbz1NYXRoLmltdWwoeCxGKSxuPW4rTWF0aC5pbXVsKFMsRyl8MCxpPWkrTWF0aC5pbXVsKFMsVil8MCxpPWkrTWF0aC5pbXVsKEUsRyl8MCxvPW8rTWF0aC5pbXVsKEUsVil8MCxuPW4rTWF0aC5pbXVsKHcsWCl8MCxpPWkrTWF0aC5pbXVsKHcsWSl8MCxpPWkrTWF0aC5pbXVsKF8sWCl8MCxvPW8rTWF0aC5pbXVsKF8sWSl8MCxuPW4rTWF0aC5pbXVsKHksWil8MCxpPWkrTWF0aC5pbXVsKHksSil8MCxpPWkrTWF0aC5pbXVsKG0sWil8MCxvPW8rTWF0aC5pbXVsKG0sSil8MCxuPW4rTWF0aC5pbXVsKHAsUSl8MCxpPWkrTWF0aC5pbXVsKHAsdHQpfDAsaT1pK01hdGguaW11bChiLFEpfDAsbz1vK01hdGguaW11bChiLHR0KXwwLG49bitNYXRoLmltdWwoYyxydCl8MCxpPWkrTWF0aC5pbXVsKGMsbnQpfDAsaT1pK01hdGguaW11bChkLHJ0KXwwLG89bytNYXRoLmltdWwoZCxudCl8MDt2YXIgX3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscSksaT1NYXRoLmltdWwoQixGKSxpPWkrTWF0aC5pbXVsKE8scSl8MCxvPU1hdGguaW11bChPLEYpLG49bitNYXRoLmltdWwoayxHKXwwLGk9aStNYXRoLmltdWwoayxWKXwwLGk9aStNYXRoLmltdWwoeCxHKXwwLG89bytNYXRoLmltdWwoeCxWKXwwLG49bitNYXRoLmltdWwoUyxYKXwwLGk9aStNYXRoLmltdWwoUyxZKXwwLGk9aStNYXRoLmltdWwoRSxYKXwwLG89bytNYXRoLmltdWwoRSxZKXwwLG49bitNYXRoLmltdWwodyxaKXwwLGk9aStNYXRoLmltdWwodyxKKXwwLGk9aStNYXRoLmltdWwoXyxaKXwwLG89bytNYXRoLmltdWwoXyxKKXwwLG49bitNYXRoLmltdWwoeSxRKXwwLGk9aStNYXRoLmltdWwoeSx0dCl8MCxpPWkrTWF0aC5pbXVsKG0sUSl8MCxvPW8rTWF0aC5pbXVsKG0sdHQpfDAsbj1uK01hdGguaW11bChwLHJ0KXwwLGk9aStNYXRoLmltdWwocCxudCl8MCxpPWkrTWF0aC5pbXVsKGIscnQpfDAsbz1vK01hdGguaW11bChiLG50KXwwLG49bitNYXRoLmltdWwoYyxvdCl8MCxpPWkrTWF0aC5pbXVsKGMsYXQpfDAsaT1pK01hdGguaW11bChkLG90KXwwLG89bytNYXRoLmltdWwoZCxhdCl8MDt2YXIgTXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFAscSksaT1NYXRoLmltdWwoUCxGKSxpPWkrTWF0aC5pbXVsKFQscSl8MCxvPU1hdGguaW11bChULEYpLG49bitNYXRoLmltdWwoQixHKXwwLGk9aStNYXRoLmltdWwoQixWKXwwLGk9aStNYXRoLmltdWwoTyxHKXwwLG89bytNYXRoLmltdWwoTyxWKXwwLG49bitNYXRoLmltdWwoayxYKXwwLGk9aStNYXRoLmltdWwoayxZKXwwLGk9aStNYXRoLmltdWwoeCxYKXwwLG89bytNYXRoLmltdWwoeCxZKXwwLG49bitNYXRoLmltdWwoUyxaKXwwLGk9aStNYXRoLmltdWwoUyxKKXwwLGk9aStNYXRoLmltdWwoRSxaKXwwLG89bytNYXRoLmltdWwoRSxKKXwwLG49bitNYXRoLmltdWwodyxRKXwwLGk9aStNYXRoLmltdWwodyx0dCl8MCxpPWkrTWF0aC5pbXVsKF8sUSl8MCxvPW8rTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bCh5LHJ0KXwwLGk9aStNYXRoLmltdWwoeSxudCl8MCxpPWkrTWF0aC5pbXVsKG0scnQpfDAsbz1vK01hdGguaW11bChtLG50KXwwLG49bitNYXRoLmltdWwocCxvdCl8MCxpPWkrTWF0aC5pbXVsKHAsYXQpfDAsaT1pK01hdGguaW11bChiLG90KXwwLG89bytNYXRoLmltdWwoYixhdCl8MCxuPW4rTWF0aC5pbXVsKGMsc3QpfDAsaT1pK01hdGguaW11bChjLHV0KXwwLGk9aStNYXRoLmltdWwoZCxzdCl8MCxvPW8rTWF0aC5pbXVsKGQsdXQpfDA7dmFyIFN0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChDLHEpLGk9TWF0aC5pbXVsKEMsRiksaT1pK01hdGguaW11bChOLHEpfDAsbz1NYXRoLmltdWwoTixGKSxuPW4rTWF0aC5pbXVsKFAsRyl8MCxpPWkrTWF0aC5pbXVsKFAsVil8MCxpPWkrTWF0aC5pbXVsKFQsRyl8MCxvPW8rTWF0aC5pbXVsKFQsVil8MCxuPW4rTWF0aC5pbXVsKEIsWCl8MCxpPWkrTWF0aC5pbXVsKEIsWSl8MCxpPWkrTWF0aC5pbXVsKE8sWCl8MCxvPW8rTWF0aC5pbXVsKE8sWSl8MCxuPW4rTWF0aC5pbXVsKGssWil8MCxpPWkrTWF0aC5pbXVsKGssSil8MCxpPWkrTWF0aC5pbXVsKHgsWil8MCxvPW8rTWF0aC5pbXVsKHgsSil8MCxuPW4rTWF0aC5pbXVsKFMsUSl8MCxpPWkrTWF0aC5pbXVsKFMsdHQpfDAsaT1pK01hdGguaW11bChFLFEpfDAsbz1vK01hdGguaW11bChFLHR0KXwwLG49bitNYXRoLmltdWwodyxydCl8MCxpPWkrTWF0aC5pbXVsKHcsbnQpfDAsaT1pK01hdGguaW11bChfLHJ0KXwwLG89bytNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKHksb3QpfDAsaT1pK01hdGguaW11bCh5LGF0KXwwLGk9aStNYXRoLmltdWwobSxvdCl8MCxvPW8rTWF0aC5pbXVsKG0sYXQpfDAsbj1uK01hdGguaW11bChwLHN0KXwwLGk9aStNYXRoLmltdWwocCx1dCl8MCxpPWkrTWF0aC5pbXVsKGIsc3QpfDAsbz1vK01hdGguaW11bChiLHV0KXwwLG49bitNYXRoLmltdWwoYyxjdCl8MCxpPWkrTWF0aC5pbXVsKGMsZHQpfDAsaT1pK01hdGguaW11bChkLGN0KXwwLG89bytNYXRoLmltdWwoZCxkdCl8MDt2YXIgRXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscSksaT1NYXRoLmltdWwoVSxGKSxpPWkrTWF0aC5pbXVsKHoscSl8MCxvPU1hdGguaW11bCh6LEYpLG49bitNYXRoLmltdWwoQyxHKXwwLGk9aStNYXRoLmltdWwoQyxWKXwwLGk9aStNYXRoLmltdWwoTixHKXwwLG89bytNYXRoLmltdWwoTixWKXwwLG49bitNYXRoLmltdWwoUCxYKXwwLGk9aStNYXRoLmltdWwoUCxZKXwwLGk9aStNYXRoLmltdWwoVCxYKXwwLG89bytNYXRoLmltdWwoVCxZKXwwLG49bitNYXRoLmltdWwoQixaKXwwLGk9aStNYXRoLmltdWwoQixKKXwwLGk9aStNYXRoLmltdWwoTyxaKXwwLG89bytNYXRoLmltdWwoTyxKKXwwLG49bitNYXRoLmltdWwoayxRKXwwLGk9aStNYXRoLmltdWwoayx0dCl8MCxpPWkrTWF0aC5pbXVsKHgsUSl8MCxvPW8rTWF0aC5pbXVsKHgsdHQpfDAsbj1uK01hdGguaW11bChTLHJ0KXwwLGk9aStNYXRoLmltdWwoUyxudCl8MCxpPWkrTWF0aC5pbXVsKEUscnQpfDAsbz1vK01hdGguaW11bChFLG50KXwwLG49bitNYXRoLmltdWwodyxvdCl8MCxpPWkrTWF0aC5pbXVsKHcsYXQpfDAsaT1pK01hdGguaW11bChfLG90KXwwLG89bytNYXRoLmltdWwoXyxhdCl8MCxuPW4rTWF0aC5pbXVsKHksc3QpfDAsaT1pK01hdGguaW11bCh5LHV0KXwwLGk9aStNYXRoLmltdWwobSxzdCl8MCxvPW8rTWF0aC5pbXVsKG0sdXQpfDAsbj1uK01hdGguaW11bChwLGN0KXwwLGk9aStNYXRoLmltdWwocCxkdCl8MCxpPWkrTWF0aC5pbXVsKGIsY3QpfDAsbz1vK01hdGguaW11bChiLGR0KXwwLG49bitNYXRoLmltdWwoYyxwdCl8MCxpPWkrTWF0aC5pbXVsKGMsYnQpfDAsaT1pK01hdGguaW11bChkLHB0KXwwLG89bytNYXRoLmltdWwoZCxidCl8MDt2YXIgQXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsRyksaT1NYXRoLmltdWwoVSxWKSxpPWkrTWF0aC5pbXVsKHosRyl8MCxvPU1hdGguaW11bCh6LFYpLG49bitNYXRoLmltdWwoQyxYKXwwLGk9aStNYXRoLmltdWwoQyxZKXwwLGk9aStNYXRoLmltdWwoTixYKXwwLG89bytNYXRoLmltdWwoTixZKXwwLG49bitNYXRoLmltdWwoUCxaKXwwLGk9aStNYXRoLmltdWwoUCxKKXwwLGk9aStNYXRoLmltdWwoVCxaKXwwLG89bytNYXRoLmltdWwoVCxKKXwwLG49bitNYXRoLmltdWwoQixRKXwwLGk9aStNYXRoLmltdWwoQix0dCl8MCxpPWkrTWF0aC5pbXVsKE8sUSl8MCxvPW8rTWF0aC5pbXVsKE8sdHQpfDAsbj1uK01hdGguaW11bChrLHJ0KXwwLGk9aStNYXRoLmltdWwoayxudCl8MCxpPWkrTWF0aC5pbXVsKHgscnQpfDAsbz1vK01hdGguaW11bCh4LG50KXwwLG49bitNYXRoLmltdWwoUyxvdCl8MCxpPWkrTWF0aC5pbXVsKFMsYXQpfDAsaT1pK01hdGguaW11bChFLG90KXwwLG89bytNYXRoLmltdWwoRSxhdCl8MCxuPW4rTWF0aC5pbXVsKHcsc3QpfDAsaT1pK01hdGguaW11bCh3LHV0KXwwLGk9aStNYXRoLmltdWwoXyxzdCl8MCxvPW8rTWF0aC5pbXVsKF8sdXQpfDAsbj1uK01hdGguaW11bCh5LGN0KXwwLGk9aStNYXRoLmltdWwoeSxkdCl8MCxpPWkrTWF0aC5pbXVsKG0sY3QpfDAsbz1vK01hdGguaW11bChtLGR0KXwwLG49bitNYXRoLmltdWwocCxwdCl8MCxpPWkrTWF0aC5pbXVsKHAsYnQpfDAsaT1pK01hdGguaW11bChiLHB0KXwwLG89bytNYXRoLmltdWwoYixidCl8MDt2YXIga3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWCksaT1NYXRoLmltdWwoVSxZKSxpPWkrTWF0aC5pbXVsKHosWCl8MCxvPU1hdGguaW11bCh6LFkpLG49bitNYXRoLmltdWwoQyxaKXwwLGk9aStNYXRoLmltdWwoQyxKKXwwLGk9aStNYXRoLmltdWwoTixaKXwwLG89bytNYXRoLmltdWwoTixKKXwwLG49bitNYXRoLmltdWwoUCxRKXwwLGk9aStNYXRoLmltdWwoUCx0dCl8MCxpPWkrTWF0aC5pbXVsKFQsUSl8MCxvPW8rTWF0aC5pbXVsKFQsdHQpfDAsbj1uK01hdGguaW11bChCLHJ0KXwwLGk9aStNYXRoLmltdWwoQixudCl8MCxpPWkrTWF0aC5pbXVsKE8scnQpfDAsbz1vK01hdGguaW11bChPLG50KXwwLG49bitNYXRoLmltdWwoayxvdCl8MCxpPWkrTWF0aC5pbXVsKGssYXQpfDAsaT1pK01hdGguaW11bCh4LG90KXwwLG89bytNYXRoLmltdWwoeCxhdCl8MCxuPW4rTWF0aC5pbXVsKFMsc3QpfDAsaT1pK01hdGguaW11bChTLHV0KXwwLGk9aStNYXRoLmltdWwoRSxzdCl8MCxvPW8rTWF0aC5pbXVsKEUsdXQpfDAsbj1uK01hdGguaW11bCh3LGN0KXwwLGk9aStNYXRoLmltdWwodyxkdCl8MCxpPWkrTWF0aC5pbXVsKF8sY3QpfDAsbz1vK01hdGguaW11bChfLGR0KXwwLG49bitNYXRoLmltdWwoeSxwdCl8MCxpPWkrTWF0aC5pbXVsKHksYnQpfDAsaT1pK01hdGguaW11bChtLHB0KXwwLG89bytNYXRoLmltdWwobSxidCl8MDt2YXIgeHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWiksaT1NYXRoLmltdWwoVSxKKSxpPWkrTWF0aC5pbXVsKHosWil8MCxvPU1hdGguaW11bCh6LEopLG49bitNYXRoLmltdWwoQyxRKXwwLGk9aStNYXRoLmltdWwoQyx0dCl8MCxpPWkrTWF0aC5pbXVsKE4sUSl8MCxvPW8rTWF0aC5pbXVsKE4sdHQpfDAsbj1uK01hdGguaW11bChQLHJ0KXwwLGk9aStNYXRoLmltdWwoUCxudCl8MCxpPWkrTWF0aC5pbXVsKFQscnQpfDAsbz1vK01hdGguaW11bChULG50KXwwLG49bitNYXRoLmltdWwoQixvdCl8MCxpPWkrTWF0aC5pbXVsKEIsYXQpfDAsaT1pK01hdGguaW11bChPLG90KXwwLG89bytNYXRoLmltdWwoTyxhdCl8MCxuPW4rTWF0aC5pbXVsKGssc3QpfDAsaT1pK01hdGguaW11bChrLHV0KXwwLGk9aStNYXRoLmltdWwoeCxzdCl8MCxvPW8rTWF0aC5pbXVsKHgsdXQpfDAsbj1uK01hdGguaW11bChTLGN0KXwwLGk9aStNYXRoLmltdWwoUyxkdCl8MCxpPWkrTWF0aC5pbXVsKEUsY3QpfDAsbz1vK01hdGguaW11bChFLGR0KXwwLG49bitNYXRoLmltdWwodyxwdCl8MCxpPWkrTWF0aC5pbXVsKHcsYnQpfDAsaT1pK01hdGguaW11bChfLHB0KXwwLG89bytNYXRoLmltdWwoXyxidCl8MDt2YXIgSXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsUSksaT1NYXRoLmltdWwoVSx0dCksaT1pK01hdGguaW11bCh6LFEpfDAsbz1NYXRoLmltdWwoeix0dCksbj1uK01hdGguaW11bChDLHJ0KXwwLGk9aStNYXRoLmltdWwoQyxudCl8MCxpPWkrTWF0aC5pbXVsKE4scnQpfDAsbz1vK01hdGguaW11bChOLG50KXwwLG49bitNYXRoLmltdWwoUCxvdCl8MCxpPWkrTWF0aC5pbXVsKFAsYXQpfDAsaT1pK01hdGguaW11bChULG90KXwwLG89bytNYXRoLmltdWwoVCxhdCl8MCxuPW4rTWF0aC5pbXVsKEIsc3QpfDAsaT1pK01hdGguaW11bChCLHV0KXwwLGk9aStNYXRoLmltdWwoTyxzdCl8MCxvPW8rTWF0aC5pbXVsKE8sdXQpfDAsbj1uK01hdGguaW11bChrLGN0KXwwLGk9aStNYXRoLmltdWwoayxkdCl8MCxpPWkrTWF0aC5pbXVsKHgsY3QpfDAsbz1vK01hdGguaW11bCh4LGR0KXwwLG49bitNYXRoLmltdWwoUyxwdCl8MCxpPWkrTWF0aC5pbXVsKFMsYnQpfDAsaT1pK01hdGguaW11bChFLHB0KXwwLG89bytNYXRoLmltdWwoRSxidCl8MDt2YXIgQnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEJ0Pj4+MjYpfDAsQnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscnQpLGk9TWF0aC5pbXVsKFUsbnQpLGk9aStNYXRoLmltdWwoeixydCl8MCxvPU1hdGguaW11bCh6LG50KSxuPW4rTWF0aC5pbXVsKEMsb3QpfDAsaT1pK01hdGguaW11bChDLGF0KXwwLGk9aStNYXRoLmltdWwoTixvdCl8MCxvPW8rTWF0aC5pbXVsKE4sYXQpfDAsbj1uK01hdGguaW11bChQLHN0KXwwLGk9aStNYXRoLmltdWwoUCx1dCl8MCxpPWkrTWF0aC5pbXVsKFQsc3QpfDAsbz1vK01hdGguaW11bChULHV0KXwwLG49bitNYXRoLmltdWwoQixjdCl8MCxpPWkrTWF0aC5pbXVsKEIsZHQpfDAsaT1pK01hdGguaW11bChPLGN0KXwwLG89bytNYXRoLmltdWwoTyxkdCl8MCxuPW4rTWF0aC5pbXVsKGsscHQpfDAsaT1pK01hdGguaW11bChrLGJ0KXwwLGk9aStNYXRoLmltdWwoeCxwdCl8MCxvPW8rTWF0aC5pbXVsKHgsYnQpfDA7dmFyIE90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxuPU1hdGguaW11bChVLG90KSxpPU1hdGguaW11bChVLGF0KSxpPWkrTWF0aC5pbXVsKHosb3QpfDAsbz1NYXRoLmltdWwoeixhdCksbj1uK01hdGguaW11bChDLHN0KXwwLGk9aStNYXRoLmltdWwoQyx1dCl8MCxpPWkrTWF0aC5pbXVsKE4sc3QpfDAsbz1vK01hdGguaW11bChOLHV0KXwwLG49bitNYXRoLmltdWwoUCxjdCl8MCxpPWkrTWF0aC5pbXVsKFAsZHQpfDAsaT1pK01hdGguaW11bChULGN0KXwwLG89bytNYXRoLmltdWwoVCxkdCl8MCxuPW4rTWF0aC5pbXVsKEIscHQpfDAsaT1pK01hdGguaW11bChCLGJ0KXwwLGk9aStNYXRoLmltdWwoTyxwdCl8MCxvPW8rTWF0aC5pbXVsKE8sYnQpfDA7dmFyIFJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhSdD4+PjI2KXwwLFJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHN0KSxpPU1hdGguaW11bChVLHV0KSxpPWkrTWF0aC5pbXVsKHosc3QpfDAsbz1NYXRoLmltdWwoeix1dCksbj1uK01hdGguaW11bChDLGN0KXwwLGk9aStNYXRoLmltdWwoQyxkdCl8MCxpPWkrTWF0aC5pbXVsKE4sY3QpfDAsbz1vK01hdGguaW11bChOLGR0KXwwLG49bitNYXRoLmltdWwoUCxwdCl8MCxpPWkrTWF0aC5pbXVsKFAsYnQpfDAsaT1pK01hdGguaW11bChULHB0KXwwLG89bytNYXRoLmltdWwoVCxidCl8MDt2YXIgUHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsY3QpLGk9TWF0aC5pbXVsKFUsZHQpLGk9aStNYXRoLmltdWwoeixjdCl8MCxvPU1hdGguaW11bCh6LGR0KSxuPW4rTWF0aC5pbXVsKEMscHQpfDAsaT1pK01hdGguaW11bChDLGJ0KXwwLGk9aStNYXRoLmltdWwoTixwdCl8MCxvPW8rTWF0aC5pbXVsKE4sYnQpfDA7dmFyIFR0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHB0KSxpPU1hdGguaW11bChVLGJ0KSxpPWkrTWF0aC5pbXVsKHoscHQpfDAsbz1NYXRoLmltdWwoeixidCk7dmFyIGp0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDtyZXR1cm4gdT0obysoaT4+PjEzKXwwKSsoanQ+Pj4yNil8MCxqdCY9NjcxMDg4NjMsc1swXT12dCxzWzFdPXl0LHNbMl09bXQsc1szXT1ndCxzWzRdPXd0LHNbNV09X3Qsc1s2XT1NdCxzWzddPVN0LHNbOF09RXQsc1s5XT1BdCxzWzEwXT1rdCxzWzExXT14dCxzWzEyXT1JdCxzWzEzXT1CdCxzWzE0XT1PdCxzWzE1XT1SdCxzWzE2XT1QdCxzWzE3XT1UdCxzWzE4XT1qdCwwIT09dSYmKHNbMTldPXUsci5sZW5ndGgrKykscn07TWF0aC5pbXVsfHwoRT11KSxvLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIHI9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT10Lmxlbmd0aD9FKHRoaXMsdCxlKTpuPDYzP3UodGhpcyx0LGUpOm48MTAyND9oKHRoaXMsdCxlKTpjKHRoaXMsdCxlKX0sZC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9by5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxkLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZC5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksbyl7Zm9yKHZhciBhPTA7YTxvO2ErKyluW2FdPWVbdFthXV0saVthXT1yW3RbYV1dfSxkLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLG8pe3RoaXMucGVybXV0ZShvLHQsZSxyLG4saSk7Zm9yKHZhciBhPTE7YTxpO2E8PD0xKWZvcih2YXIgZj1hPDwxLHM9TWF0aC5jb3MoMipNYXRoLlBJL2YpLHU9TWF0aC5zaW4oMipNYXRoLlBJL2YpLGg9MDtoPGk7aCs9Zilmb3IodmFyIGM9cyxkPXUsbD0wO2w8YTtsKyspe3ZhciBwPXJbaCtsXSxiPW5baCtsXSx2PXJbaCtsK2FdLHk9bltoK2wrYV0sbT1jKnYtZCp5O3k9Yyp5K2Qqdix2PW0scltoK2xdPXArdixuW2grbF09Yit5LHJbaCtsK2FdPXAtdixuW2grbCthXT1iLXksXG5sIT09ZiYmKG09cypjLXUqZCxkPXMqZCt1KmMsYz1tKX19LGQucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MXxNYXRoLm1heChlLHQpLG49MSZyLGk9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStufSxkLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgaT10W25dO3Rbbl09dFtyLW4tMV0sdFtyLW4tMV09aSxpPWVbbl0sZVtuXT0tZVtyLW4tMV0sZVtyLW4tMV09LWl9fSxkLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTA7bjxlLzI7bisrKXt2YXIgaT04MTkyKk1hdGgucm91bmQodFsyKm4rMV0vZSkrTWF0aC5yb3VuZCh0WzIqbl0vZSkrcjt0W25dPTY3MTA4ODYzJmkscj1pPDY3MTA4ODY0PzA6aS82NzEwODg2NHwwfXJldHVybiB0fSxkLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgbz0wLGE9MDthPGU7YSsrKW8rPTB8dFthXSxyWzIqYV09ODE5MSZvLG8+Pj49MTMsclsyKmErMV09ODE5MSZvLG8+Pj49MTM7Zm9yKGE9MiplO2E8aTsrK2EpclthXT0wO24oMD09PW8pLG4oMD09PShvJi04MTkyKSl9LGQucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGQucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksbz10aGlzLnN0dWIobiksYT1uZXcgQXJyYXkobiksZj1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksaD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksZD1yLndvcmRzO2QubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsYSxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCx1LG4pLHRoaXMudHJhbnNmb3JtKGEsbyxmLHMsbixpKSx0aGlzLnRyYW5zZm9ybSh1LG8saCxjLG4saSk7Zm9yKHZhciBsPTA7bDxuO2wrKyl7dmFyIHA9ZltsXSpoW2xdLXNbbF0qY1tsXTtzW2xdPWZbbF0qY1tsXStzW2xdKmhbbF0sZltsXT1wfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShmLHMsbiksdGhpcy50cmFuc2Zvcm0oZixzLGQsbyxuLGkpLHRoaXMuY29uanVnYXRlKGQsbyxuKSx0aGlzLm5vcm1hbGl6ZTEzYihkLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sby5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxvLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksYyh0aGlzLHQsZSl9LG8ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxvLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxvPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1vPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZvfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LG8ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sby5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sby5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPXModCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgbygxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxvLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsbz02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBhPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy53b3Jkc1tlXSZvLHM9KDB8dGhpcy53b3Jkc1tlXSktZjw8cjt0aGlzLndvcmRzW2VdPXN8YSxhPWY+Pj4yNi1yfWEmJih0aGlzLndvcmRzW2VdPWEsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LG8ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGk7aT1lPyhlLWUlMjYpLzI2OjA7dmFyIG89dCUyNixhPU1hdGgubWluKCh0LW8pLzI2LHRoaXMubGVuZ3RoKSxmPTY3MTA4ODYzXjY3MTA4ODYzPj4+bzw8byxzPXI7aWYoaS09YSxpPU1hdGgubWF4KDAsaSkscyl7Zm9yKHZhciB1PTA7dTxhO3UrKylzLndvcmRzW3VdPXRoaXMud29yZHNbdV07cy5sZW5ndGg9YX1pZigwPT09YSk7ZWxzZSBpZih0aGlzLmxlbmd0aD5hKWZvcih0aGlzLmxlbmd0aC09YSx1PTA7dTx0aGlzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3UrYV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgaD0wO2Zvcih1PXRoaXMubGVuZ3RoLTE7dT49MCYmKDAhPT1ofHx1Pj1pKTt1LS0pe3ZhciBjPTB8dGhpcy53b3Jkc1t1XTt0aGlzLndvcmRzW3VdPWg8PDI2LW98Yz4+Pm8saD1jJmZ9cmV0dXJuIHMmJjAhPT1oJiYocy53b3Jkc1tzLmxlbmd0aCsrXT1oKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sby5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxvLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sby5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxvLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sby5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4hMTt2YXIgbz10aGlzLndvcmRzW3JdO3JldHVybiEhKG8maSl9LG8ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSxcImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVyc1wiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sby5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwP3RoaXMuaXN1Ym4oLXQpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8dD8odGhpcy53b3Jkc1swXT10LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxvLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30sby5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYobihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxvLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LG8ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LG8ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxvLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIGEsZj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStmO3ZhciBzPSgwfHQud29yZHNbaV0pKmU7YS09NjcxMDg4NjMmcyxmPShhPj4yNiktKHMvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKWE9KDB8dGhpcy53b3Jkc1tpK3JdKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PWYpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobihmPT09LTEpLGY9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspYT0tKDB8dGhpcy53b3Jkc1tpXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aC10Lmxlbmd0aCxuPXRoaXMuY2xvbmUoKSxpPXQsYT0wfGkud29yZHNbaS5sZW5ndGgtMV0sZj10aGlzLl9jb3VudEJpdHMoYSk7cj0yNi1mLDAhPT1yJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyx1PW4ubGVuZ3RoLWkubGVuZ3RoO2lmKFwibW9kXCIhPT1lKXtzPW5ldyBvKG51bGwpLHMubGVuZ3RoPXUrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspcy53b3Jkc1toXT0wfXZhciBjPW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLHUpOzA9PT1jLm5lZ2F0aXZlJiYobj1jLHMmJihzLndvcmRzW3VdPTEpKTtmb3IodmFyIGQ9dS0xO2Q+PTA7ZC0tKXt2YXIgbD02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2RdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2QtMV0pO2ZvcihsPU1hdGgubWluKGwvYXwwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGwsZCk7MCE9PW4ubmVnYXRpdmU7KWwtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGQpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1tkXT1sKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSxcImRpdlwiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LG8ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7aWYobighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKSlyZXR1cm57ZGl2Om5ldyBvKDApLG1vZDpuZXcgbygwKX07dmFyIGksYSxmO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KGY9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pYWRkKHQpKSx7ZGl2OmksbW9kOmF9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmU/KGY9dGhpcy5kaXZtb2QodC5uZWcoKSxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6Zi5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KGY9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaXN1Yih0KSkse2RpdjpmLmRpdixtb2Q6YX0pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IG8oMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD9cImRpdlwiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06XCJtb2RcIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpfSxvLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJkaXZcIiwhMSkuZGl2fSxvLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMSkubW9kfSxvLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITApLm1vZH0sby5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaXZtb2QodCk7aWYoZS5tb2QuaXNaZXJvKCkpcmV0dXJuIGUuZGl2O3ZhciByPTAhPT1lLmRpdi5uZWdhdGl2ZT9lLm1vZC5pc3ViKHQpOmUubW9kLG49dC51c2hybigxKSxpPXQuYW5kbG4oMSksbz1yLmNtcChuKTtyZXR1cm4gbzwwfHwxPT09aSYmMD09PW8/ZS5kaXY6MCE9PWUuZGl2Lm5lZ2F0aXZlP2UuZGl2LmlzdWJuKDEpOmUuZGl2LmlhZGRuKDEpfSxvLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0oMTw8MjYpJXQscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPShlKnIrKDB8dGhpcy53b3Jkc1tpXSkpJXQ7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqZTt0aGlzLndvcmRzW3JdPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0sby5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPW5ldyBvKDApLHM9bmV3IG8oMSksdT0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrdTtmb3IodmFyIGg9ci5jbG9uZSgpLGM9ZS5jbG9uZSgpOyFlLmlzWmVybygpOyl7Zm9yKHZhciBkPTAsbD0xOzA9PT0oZS53b3Jkc1swXSZsKSYmZDwyNjsrK2QsbDw8PTEpO2lmKGQ+MClmb3IoZS5pdXNocm4oZCk7ZC0tID4wOykoaS5pc09kZCgpfHxhLmlzT2RkKCkpJiYoaS5pYWRkKGgpLGEuaXN1YihjKSksaS5pdXNocm4oMSksYS5pdXNocm4oMSk7Zm9yKHZhciBwPTAsYj0xOzA9PT0oci53b3Jkc1swXSZiKSYmcDwyNjsrK3AsYjw8PTEpO2lmKHA+MClmb3Ioci5pdXNocm4ocCk7cC0tID4wOykoZi5pc09kZCgpfHxzLmlzT2RkKCkpJiYoZi5pYWRkKGgpLHMuaXN1YihjKSksZi5pdXNocm4oMSkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoZiksYS5pc3ViKHMpKTooci5pc3ViKGUpLGYuaXN1YihpKSxzLmlzdWIoYSkpfXJldHVybnthOmYsYjpzLGdjZDpyLml1c2hsbih1KX19LG8ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIHM9MCx1PTE7MD09PShlLndvcmRzWzBdJnUpJiZzPDI2Oysrcyx1PDw9MSk7aWYocz4wKWZvcihlLml1c2hybihzKTtzLS0gPjA7KWkuaXNPZGQoKSYmaS5pYWRkKGYpLGkuaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGM9MTswPT09KHIud29yZHNbMF0mYykmJmg8MjY7KytoLGM8PD0xKTtpZihoPjApZm9yKHIuaXVzaHJuKGgpO2gtLSA+MDspYS5pc09kZCgpJiZhLmlhZGQoZiksYS5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoYSkpOihyLmlzdWIoZSksYS5pc3ViKGkpKX12YXIgZDtyZXR1cm4gZD0wPT09ZS5jbXBuKDEpP2k6YSxkLmNtcG4oMCk8MCYmZC5pYWRkKHQpLGR9LG8ucHJvdG90eXBlLmdjZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB0LmFicygpO2lmKHQuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2UubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9ZS5jbXAocik7aWYoaTwwKXt2YXIgbz1lO2U9cixyPW99ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhaztlLmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxvLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVnY2QodCkuYS51bW9kKHQpfSxvLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LG8ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIG89aSxhPXI7MCE9PW8mJmE8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj0wfHRoaXMud29yZHNbYV07Zis9byxvPWY+Pj4yNixmJj02NzEwODg2Myx0aGlzLndvcmRzW2FdPWZ9cmV0dXJuIDAhPT1vJiYodGhpcy53b3Jkc1thXT1vLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxvLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmUpcmV0dXJuIDE7dGhpcy5zdHJpcCgpO3ZhciByO2lmKHRoaXMubGVuZ3RoPjEpcj0xO2Vsc2V7ZSYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsXCJOdW1iZXIgaXMgdG9vIGJpZ1wiKTt2YXIgaT0wfHRoaXMud29yZHNbMF07cj1pPT09dD8wOmk8dD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yOnJ9LG8ucHJvdG90eXBlLmNtcD1mdW5jdGlvbih0KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBlPXRoaXMudWNtcCh0KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxvLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPnQubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHx0LndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0sby5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5ndD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wKHQpfSxvLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk+PTB9LG8ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk+PTB9LG8ucHJvdG90eXBlLmx0bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT09PS0xfSxvLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LG8ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LG8ucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sby5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtKHQpfSxvLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLG4oMD09PXRoaXMubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LG8ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxvLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxvLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCxcInJlZFBvdyhub3JtYWxOdW0pXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgQT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2wucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LGwucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2RvIHRoaXMuc3BsaXQocix0aGlzLnRtcCkscj10aGlzLmltdWxLKHIpLHI9ci5pYWRkKHRoaXMudG1wKSxlPXIuYml0TGVuZ3RoKCk7d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sbC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sbC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHAsbCkscC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDE5NDMwMyxuPU1hdGgubWluKHQubGVuZ3RoLDkpLGk9MDtpPG47aSsrKWUud29yZHNbaV09dC53b3Jkc1tpXTtpZihlLmxlbmd0aD1uLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgbz10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPW8mcixpPTEwO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT0wfHQud29yZHNbaV07dC53b3Jkc1tpLTEwXT0oYSZyKTw8NHxvPj4+MjIsbz1hfW8+Pj49MjIsdC53b3Jkc1tpLTEwXT1vLDA9PT1vJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHAucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saShiLGwpLGkodixsKSxpKHksbCkseS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxvLl9wcmltZT1mdW5jdGlvbiB0KGUpe2lmKEFbZV0pcmV0dXJuIEFbZV07dmFyIHQ7aWYoXCJrMjU2XCI9PT1lKXQ9bmV3IHA7ZWxzZSBpZihcInAyMjRcIj09PWUpdD1uZXcgYjtlbHNlIGlmKFwicDE5MlwiPT09ZSl0PW5ldyB2O2Vsc2V7aWYoXCJwMjU1MTlcIiE9PWUpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwcmltZSBcIitlKTt0PW5ldyB5fXJldHVybiBBW2VdPXQsdH0sbS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih0LGUpe24oMD09PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCYmdC5yZWQ9PT1lLnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LG0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSxtLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LG0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LG0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sbS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT09MSksMz09PWUpe3ZhciByPXRoaXMubS5hZGQobmV3IG8oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codCxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksYT0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspYSsrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBmPW5ldyBvKDEpLnRvUmVkKHRoaXMpLHM9Zi5yZWROZWcoKSx1PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxoPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoaD1uZXcgbygyKmgqaCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGgsdSkuY21wKHMpOyloLnJlZElBZGQocyk7Zm9yKHZhciBjPXRoaXMucG93KGgsaSksZD10aGlzLnBvdyh0LGkuYWRkbigxKS5pdXNocm4oMSkpLGw9dGhpcy5wb3codCxpKSxwPWE7MCE9PWwuY21wKGYpOyl7Zm9yKHZhciBiPWwsdj0wOzAhPT1iLmNtcChmKTt2KyspYj1iLnJlZFNxcigpO24odjxwKTt2YXIgeT10aGlzLnBvdyhjLG5ldyBvKDEpLml1c2hsbihwLXYtMSkpO2Q9ZC5yZWRNdWwoeSksYz15LnJlZFNxcigpLGw9bC5yZWRNdWwoYykscD12fXJldHVybiBkfSxtLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlPyhlLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LG0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe2lmKGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDEpO2lmKDA9PT1lLmNtcG4oMSkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgcj00LG49bmV3IEFycmF5KDE8PHIpO25bMF09bmV3IG8oMSkudG9SZWQodGhpcyksblsxXT10O2Zvcih2YXIgaT0yO2k8bi5sZW5ndGg7aSsrKW5baV09dGhpcy5tdWwobltpLTFdLHQpO3ZhciBhPW5bMF0sZj0wLHM9MCx1PWUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT11JiYodT0yNiksaT1lLmxlbmd0aC0xO2k+PTA7aS0tKXtmb3IodmFyIGg9ZS53b3Jkc1tpXSxjPXUtMTtjPj0wO2MtLSl7dmFyIGQ9aD4+YyYxO2EhPT1uWzBdJiYoYT10aGlzLnNxcihhKSksMCE9PWR8fDAhPT1mPyhmPDw9MSxmfD1kLHMrKywocz09PXJ8fDA9PT1pJiYwPT09YykmJihhPXRoaXMubXVsKGEsbltmXSkscz0wLGY9MCkpOnM9MH11PTI2fXJldHVybiBhfSxtLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSxtLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sby5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZyh0KX0saShnLG0pLGcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0sZy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxhPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/YT1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKGE9aS5pYWRkKHRoaXMubSkpLGEuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSk7cmV0dXJuIGUuX2ZvcmNlUmVkKHRoaXMpfX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHR8fHQsdGhpcyl9KS5jYWxsKGUscig5MikodCkpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQsbil7dmFyIGk9cigxNDkpLG89cig1NzYpO2UucGJrZGYyPWZ1bmN0aW9uKHQscixuLGksYSxmKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoZj1hLGE9dm9pZCAwKSxvKG4saSksXCJmdW5jdGlvblwiIT10eXBlb2YgZil0aHJvdyBuZXcgRXJyb3IoXCJObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjJcIik7c2V0VGltZW91dChmdW5jdGlvbigpe2YobnVsbCxlLnBia2RmMlN5bmModCxyLG4saSxhKSl9KX07dmFyIGE7aWYodC5icm93c2VyKWE9XCJ1dGYtOFwiO2Vsc2V7dmFyIGY9cGFyc2VJbnQodC52ZXJzaW9uLnNwbGl0KFwiLlwiKVswXS5zbGljZSgxKSwxMCk7YT1mPj02P1widXRmLThcIjpcImJpbmFyeVwifWUucGJrZGYyU3luYz1mdW5jdGlvbih0LGUscixmLHMpe24uaXNCdWZmZXIodCl8fCh0PW5ldyBuKHQsYSkpLG4uaXNCdWZmZXIoZSl8fChlPW5ldyBuKGUsYSkpLG8ocixmKSxzPXN8fFwic2hhMVwiO3ZhciB1LGg9MSxjPW5ldyBuKGYpLGQ9bmV3IG4oZS5sZW5ndGgrNCk7ZS5jb3B5KGQsMCwwLGUubGVuZ3RoKTtmb3IodmFyIGwscCxiPTE7Yjw9aDtiKyspe2Qud3JpdGVVSW50MzJCRShiLGUubGVuZ3RoKTt2YXIgdj1pKHMsdCkudXBkYXRlKGQpLmRpZ2VzdCgpO3V8fCh1PXYubGVuZ3RoLHA9bmV3IG4odSksaD1NYXRoLmNlaWwoZi91KSxsPWYtKGgtMSkqdSksdi5jb3B5KHAsMCwwLHUpO2Zvcih2YXIgeT0xO3k8cjt5Kyspe3Y9aShzLHQpLnVwZGF0ZSh2KS5kaWdlc3QoKTtmb3IodmFyIG09MDttPHU7bSsrKXBbbV1ePXZbbV19dmFyIGc9KGItMSkqdSx3PWI9PT1oP2w6dTtwLmNvcHkoYyxnLDAsdyl9cmV0dXJuIGN9fSkuY2FsbChlLHIoMjYpLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlW1wiYWVzLTEyOC1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTkyLWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTEyOC1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTI1Ni1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlLmFlczEyOD1lW1wiYWVzLTEyOC1jYmNcIl0sZS5hZXMxOTI9ZVtcImFlcy0xOTItY2JjXCJdLGUuYWVzMjU2PWVbXCJhZXMtMjU2LWNiY1wiXSxlW1wiYWVzLTEyOC1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMTkyLWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn0sZVtcImFlcy0yNTYtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixuLG8pe2UuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQsXCJiaW5hcnlcIikpLHImJiFlLmlzQnVmZmVyKHIpJiYocj1uZXcgZShyLFwiYmluYXJ5XCIpKSxuLz04LG89b3x8MDtmb3IodmFyIGEsZixzPTAsdT0wLGg9bmV3IGUobiksYz1uZXcgZShvKSxkPTAsbD1bXTs7KXtpZihkKys+MCYmbC5wdXNoKGEpLGwucHVzaCh0KSxyJiZsLnB1c2gociksYT1pKGUuY29uY2F0KGwpKSxsPVtdLGY9MCxuPjApZm9yKDs7KXtpZigwPT09bilicmVhaztpZihmPT09YS5sZW5ndGgpYnJlYWs7aFtzKytdPWFbZl0sbi0tLGYrK31pZihvPjAmJmYhPT1hLmxlbmd0aClmb3IoOzspe2lmKDA9PT1vKWJyZWFrO2lmKGY9PT1hLmxlbmd0aClicmVhaztjW3UrK109YVtmXSxvLS0sZisrfWlmKDA9PT1uJiYwPT09bylicmVha31mb3IoZj0wO2Y8YS5sZW5ndGg7ZisrKWFbZl09MDtyZXR1cm57a2V5OmgsaXY6Y319dmFyIGk9cigxMDUpO3QuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy5hZnRlclRyYW5zZm9ybT1mdW5jdGlvbihlLHIpe3JldHVybiBpKHQsZSxyKX0sdGhpcy5uZWVkVHJhbnNmb3JtPSExLHRoaXMudHJhbnNmb3JtaW5nPSExLHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVjaHVuaz1udWxsLHRoaXMud3JpdGVlbmNvZGluZz1udWxsfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPXQuX3RyYW5zZm9ybVN0YXRlO24udHJhbnNmb3JtaW5nPSExO3ZhciBpPW4ud3JpdGVjYjtpZighaSlyZXR1cm4gdC5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJubyB3cml0ZWNiIGluIFRyYW5zZm9ybSBjbGFzc1wiKSk7bi53cml0ZWNodW5rPW51bGwsbi53cml0ZWNiPW51bGwsbnVsbCE9PXImJnZvaWQgMCE9PXImJnQucHVzaChyKSxpKGUpO3ZhciBvPXQuX3JlYWRhYmxlU3RhdGU7by5yZWFkaW5nPSExLChvLm5lZWRSZWFkYWJsZXx8by5sZW5ndGg8by5oaWdoV2F0ZXJNYXJrKSYmdC5fcmVhZChvLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIG8odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvKHQpO2YuY2FsbCh0aGlzLHQpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPW5ldyBuKHRoaXMpO3ZhciBlPXRoaXM7dGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHQmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT10LnRyYW5zZm9ybSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5mbHVzaCYmKHRoaXMuX2ZsdXNoPXQuZmx1c2gpKSx0aGlzLm9uY2UoXCJwcmVmaW5pc2hcIixmdW5jdGlvbigpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKHQpe2EoZSx0KX0pOmEoZSl9KX1mdW5jdGlvbiBhKHQsZSl7aWYoZSlyZXR1cm4gdC5lbWl0KFwiZXJyb3JcIixlKTt2YXIgcj10Ll93cml0YWJsZVN0YXRlLG49dC5fdHJhbnNmb3JtU3RhdGU7aWYoci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwXCIpO2lmKG4udHJhbnNmb3JtaW5nKXRocm93IG5ldyBFcnJvcihcIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmdcIik7cmV0dXJuIHQucHVzaChudWxsKX10LmV4cG9ydHM9bzt2YXIgZj1yKDUxKSxzPXIoNzMpO3MuaW5oZXJpdHM9cig3NCkscy5pbmhlcml0cyhvLGYpLG8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxmLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyx0LGUpfSxvLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LG8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYobi53cml0ZWNiPXIsbi53cml0ZWNodW5rPXQsbi53cml0ZWVuY29kaW5nPWUsIW4udHJhbnNmb3JtaW5nKXt2YXIgaT10aGlzLl9yZWFkYWJsZVN0YXRlOyhuLm5lZWRUcmFuc2Zvcm18fGkubmVlZFJlYWRhYmxlfHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGkuaGlnaFdhdGVyTWFyayl9fSxvLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09ZS53cml0ZWNodW5rJiZlLndyaXRlY2ImJiFlLnRyYW5zZm9ybWluZz8oZS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKGUud3JpdGVjaHVuayxlLndyaXRlZW5jb2RpbmcsZS5hZnRlclRyYW5zZm9ybSkpOmUubmVlZFRyYW5zZm9ybT0hMH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIG8odCxlLHIpe3RoaXMuY2h1bms9dCx0aGlzLmVuY29kaW5nPWUsdGhpcy5jYWxsYmFjaz1yLHRoaXMubmV4dD1udWxsfWZ1bmN0aW9uIGEodCxlKXtSPVJ8fHIoNTEpLHQ9dHx8e30sdGhpcy5vYmplY3RNb2RlPSEhdC5vYmplY3RNb2RlLGUgaW5zdGFuY2VvZiBSJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF0LndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIG49dC5oaWdoV2F0ZXJNYXJrLGk9dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0O3RoaXMuaGlnaFdhdGVyTWFyaz1ufHwwPT09bj9uOmksdGhpcy5oaWdoV2F0ZXJNYXJrPX5+dGhpcy5oaWdoV2F0ZXJNYXJrLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMTt2YXIgbz10LmRlY29kZVN0cmluZ3M9PT0hMTt0aGlzLmRlY29kZVN0cmluZ3M9IW8sdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dC5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24odCl7YihlLHQpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBTKHRoaXMpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIFI9Unx8cig1MSksdGhpcyBpbnN0YW5jZW9mIGZ8fHRoaXMgaW5zdGFuY2VvZiBSPyh0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBhKHQsdGhpcyksdGhpcy53cml0YWJsZT0hMCx0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC53cml0ZSYmKHRoaXMuX3dyaXRlPXQud3JpdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQud3JpdGV2JiYodGhpcy5fd3JpdGV2PXQud3JpdGV2KSksdm9pZCB4LmNhbGwodGhpcykpOm5ldyBmKHQpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1uZXcgRXJyb3IoXCJ3cml0ZSBhZnRlciBlbmRcIik7dC5lbWl0KFwiZXJyb3JcIixyKSxFKGUscil9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT0hMCxvPSExO3JldHVybiBudWxsPT09cj9vPW5ldyBUeXBlRXJyb3IoXCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbVwiKTpCLmlzQnVmZmVyKHIpfHxcInN0cmluZ1wiPT10eXBlb2Ygcnx8dm9pZCAwPT09cnx8ZS5vYmplY3RNb2RlfHwobz1uZXcgVHlwZUVycm9yKFwiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVua1wiKSksbyYmKHQuZW1pdChcImVycm9yXCIsbyksRShuLG8pLGk9ITEpLGl9ZnVuY3Rpb24gaCh0LGUscil7cmV0dXJuIHQub2JqZWN0TW9kZXx8dC5kZWNvZGVTdHJpbmdzPT09ITF8fFwic3RyaW5nXCIhPXR5cGVvZiBlfHwoZT1PLmZyb20oZSxyKSksZX1mdW5jdGlvbiBjKHQsZSxyLG4saSl7cj1oKGUscixuKSxCLmlzQnVmZmVyKHIpJiYobj1cImJ1ZmZlclwiKTt2YXIgYT1lLm9iamVjdE1vZGU/MTpyLmxlbmd0aDtlLmxlbmd0aCs9YTt2YXIgZj1lLmxlbmd0aDxlLmhpZ2hXYXRlck1hcms7aWYoZnx8KGUubmVlZERyYWluPSEwKSxlLndyaXRpbmd8fGUuY29ya2VkKXt2YXIgcz1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q7ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW5ldyBvKHIsbixpKSxzP3MubmV4dD1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q6ZS5idWZmZXJlZFJlcXVlc3Q9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBkKHQsZSwhMSxhLHIsbixpKTtyZXR1cm4gZn1mdW5jdGlvbiBkKHQsZSxyLG4saSxvLGEpe2Uud3JpdGVsZW49bixlLndyaXRlY2I9YSxlLndyaXRpbmc9ITAsZS5zeW5jPSEwLHI/dC5fd3JpdGV2KGksZS5vbndyaXRlKTp0Ll93cml0ZShpLG8sZS5vbndyaXRlKSxlLnN5bmM9ITF9ZnVuY3Rpb24gbCh0LGUscixuLGkpey0tZS5wZW5kaW5nY2Iscj9FKGksbik6aShuKSx0Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx0LmVtaXQoXCJlcnJvclwiLG4pfWZ1bmN0aW9uIHAodCl7dC53cml0aW5nPSExLHQud3JpdGVjYj1udWxsLHQubGVuZ3RoLT10LndyaXRlbGVuLHQud3JpdGVsZW49MH1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9dC5fd3JpdGFibGVTdGF0ZSxuPXIuc3luYyxpPXIud3JpdGVjYjtpZihwKHIpLGUpbCh0LHIsbixlLGkpO2Vsc2V7dmFyIG89ZyhyKTtvfHxyLmNvcmtlZHx8ci5idWZmZXJQcm9jZXNzaW5nfHwhci5idWZmZXJlZFJlcXVlc3R8fG0odCxyKSxuP0Eodix0LHIsbyxpKTp2KHQscixvLGkpfX1mdW5jdGlvbiB2KHQsZSxyLG4pe3J8fHkodCxlKSxlLnBlbmRpbmdjYi0tLG4oKSxfKHQsZSl9ZnVuY3Rpb24geSh0LGUpezA9PT1lLmxlbmd0aCYmZS5uZWVkRHJhaW4mJihlLm5lZWREcmFpbj0hMSx0LmVtaXQoXCJkcmFpblwiKSl9ZnVuY3Rpb24gbSh0LGUpe2UuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgcj1lLmJ1ZmZlcmVkUmVxdWVzdDtpZih0Ll93cml0ZXYmJnImJnIubmV4dCl7dmFyIG49ZS5idWZmZXJlZFJlcXVlc3RDb3VudCxpPW5ldyBBcnJheShuKSxvPWUuY29ya2VkUmVxdWVzdHNGcmVlO28uZW50cnk9cjtmb3IodmFyIGE9MDtyOylpW2FdPXIscj1yLm5leHQsYSs9MTtkKHQsZSwhMCxlLmxlbmd0aCxpLFwiXCIsby5maW5pc2gpLGUucGVuZGluZ2NiKyssZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsby5uZXh0PyhlLmNvcmtlZFJlcXVlc3RzRnJlZT1vLm5leHQsby5uZXh0PW51bGwpOmUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBTKGUpfWVsc2V7Zm9yKDtyOyl7dmFyIGY9ci5jaHVuayxzPXIuZW5jb2RpbmcsdT1yLmNhbGxiYWNrLGg9ZS5vYmplY3RNb2RlPzE6Zi5sZW5ndGg7aWYoZCh0LGUsITEsaCxmLHMsdSkscj1yLm5leHQsZS53cml0aW5nKWJyZWFrfW51bGw9PT1yJiYoZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCxlLmJ1ZmZlcmVkUmVxdWVzdD1yLGUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBnKHQpe3JldHVybiB0LmVuZGluZyYmMD09PXQubGVuZ3RoJiZudWxsPT09dC5idWZmZXJlZFJlcXVlc3QmJiF0LmZpbmlzaGVkJiYhdC53cml0aW5nfWZ1bmN0aW9uIHcodCxlKXtlLnByZWZpbmlzaGVkfHwoZS5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoXCJwcmVmaW5pc2hcIikpfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1nKGUpO3JldHVybiByJiYoMD09PWUucGVuZGluZ2NiPyh3KHQsZSksZS5maW5pc2hlZD0hMCx0LmVtaXQoXCJmaW5pc2hcIikpOncodCxlKSkscn1mdW5jdGlvbiBNKHQsZSxyKXtlLmVuZGluZz0hMCxfKHQsZSksciYmKGUuZmluaXNoZWQ/RShyKTp0Lm9uY2UoXCJmaW5pc2hcIixyKSksZS5lbmRlZD0hMCx0LndyaXRhYmxlPSExfWZ1bmN0aW9uIFModCl7dmFyIGU9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24ocil7dmFyIG49ZS5lbnRyeTtmb3IoZS5lbnRyeT1udWxsO247KXt2YXIgaT1uLmNhbGxiYWNrO3QucGVuZGluZ2NiLS0saShyKSxuPW4ubmV4dH10LmNvcmtlZFJlcXVlc3RzRnJlZT90LmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PWU6dC5jb3JrZWRSZXF1ZXN0c0ZyZWU9ZX19dC5leHBvcnRzPWY7dmFyIEU9cigxNTcpLEE9IWUuYnJvd3NlciYmW1widjAuMTBcIixcInYwLjkuXCJdLmluZGV4T2YoZS52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP246RTtmLldyaXRhYmxlU3RhdGU9YTt2YXIgaz1yKDczKTtrLmluaGVyaXRzPXIoNzQpO3ZhciB4LEk9e2RlcHJlY2F0ZTpyKDU5OCl9OyFmdW5jdGlvbigpe3RyeXt4PXIoMzEpfWNhdGNoKHQpe31maW5hbGx5e3h8fCh4PXIoMTEwKS5FdmVudEVtaXR0ZXIpfX0oKTt2YXIgQj1yKDEpLkJ1ZmZlcixPPXIoMTU2KTtrLmluaGVyaXRzKGYseCk7dmFyIFI7YS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuYnVmZmVyZWRSZXF1ZXN0LGU9W107dDspZS5wdXNoKHQpLHQ9dC5uZXh0O3JldHVybiBlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsXCJidWZmZXJcIix7Z2V0OkkuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LFwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC5cIil9KX1jYXRjaCh0KXt9fSgpO3ZhciBSO2YucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGVcIikpfSxmLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fd3JpdGFibGVTdGF0ZSxvPSExO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihyPWUsZT1udWxsKSxCLmlzQnVmZmVyKHQpP2U9XCJidWZmZXJcIjplfHwoZT1uLmRlZmF1bHRFbmNvZGluZyksXCJmdW5jdGlvblwiIT10eXBlb2YgciYmKHI9aSksbi5lbmRlZD9zKHRoaXMscik6dSh0aGlzLG4sdCxyKSYmKG4ucGVuZGluZ2NiKyssbz1jKHRoaXMsbix0LGUscikpLG99LGYucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93cml0YWJsZVN0YXRlO3QuY29ya2VkKyt9LGYucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dyaXRhYmxlU3RhdGU7dC5jb3JrZWQmJih0LmNvcmtlZC0tLHQud3JpdGluZ3x8dC5jb3JrZWR8fHQuZmluaXNoZWR8fHQuYnVmZmVyUHJvY2Vzc2luZ3x8IXQuYnVmZmVyZWRSZXF1ZXN0fHxtKHRoaXMsdCkpfSxmLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PXQudG9Mb3dlckNhc2UoKSksIShbXCJoZXhcIixcInV0ZjhcIixcInV0Zi04XCIsXCJhc2NpaVwiLFwiYmluYXJ5XCIsXCJiYXNlNjRcIixcInVjczJcIixcInVjcy0yXCIsXCJ1dGYxNmxlXCIsXCJ1dGYtMTZsZVwiLFwicmF3XCJdLmluZGV4T2YoKHQrXCJcIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIit0KTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9dCx0aGlzfSxmLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odCxlLHIpe3IobmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpKX0sZi5wcm90b3R5cGUuX3dyaXRldj1udWxsLGYucHJvdG90eXBlLmVuZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fd3JpdGFibGVTdGF0ZTtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0PyhyPXQsdD1udWxsLGU9bnVsbCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHI9ZSxlPW51bGwpLG51bGwhPT10JiZ2b2lkIDAhPT10JiZ0aGlzLndyaXRlKHQsZSksbi5jb3JrZWQmJihuLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLG4uZW5kaW5nfHxuLmZpbmlzaGVkfHxNKHRoaXMsbixyKX19KS5jYWxsKGUscigyNikscigxNTgpLnNldEltbWVkaWF0ZSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCl7dmFyIG49cigxKSxpPW4uQnVmZmVyLG89bi5TbG93QnVmZmVyLGE9bi5rTWF4TGVuZ3RofHwyMTQ3NDgzNjQ3O2UuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuYWxsb2MpcmV0dXJuIGkuYWxsb2ModCxlLHIpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGluZyBtdXN0IG5vdCBiZSBudW1iZXJcIik7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemUgbXVzdCBiZSBhIG51bWJlclwiKTtpZih0PmEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzaXplIGlzIHRvbyBsYXJnZVwiKTt2YXIgbj1yLG89ZTt2b2lkIDA9PT1vJiYobj12b2lkIDAsbz0wKTt2YXIgZj1uZXcgaSh0KTtpZihcInN0cmluZ1wiPT10eXBlb2Ygbylmb3IodmFyIHM9bmV3IGkobyxuKSx1PXMubGVuZ3RoLGg9LTE7KytoPHQ7KWZbaF09c1toJXVdO2Vsc2UgZi5maWxsKG8pO3JldHVybiBmfSxlLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuYWxsb2NVbnNhZmUpcmV0dXJuIGkuYWxsb2NVbnNhZmUodCk7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemUgbXVzdCBiZSBhIG51bWJlclwiKTtpZih0PmEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzaXplIGlzIHRvbyBsYXJnZVwiKTtyZXR1cm4gbmV3IGkodCl9LGUuZnJvbT1mdW5jdGlvbihlLHIsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgaS5mcm9tJiYoIXQuVWludDhBcnJheXx8VWludDhBcnJheS5mcm9tIT09aS5mcm9tKSlyZXR1cm4gaS5mcm9tKGUscixuKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbmV3IGkoZSxyKTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7dmFyIG89cjtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbmV3IGkoZSk7XCJ1bmRlZmluZWRcIj09dHlwZW9mIG8mJihvPTApO3ZhciBhPW47aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEmJihhPWUuYnl0ZUxlbmd0aC1vKSxvPj1lLmJ5dGVMZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzXCIpO2lmKGE+ZS5ieXRlTGVuZ3RoLW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzXCIpO3JldHVybiBuZXcgaShlLnNsaWNlKG8sbythKSl9aWYoaS5pc0J1ZmZlcihlKSl7dmFyIGY9bmV3IGkoZS5sZW5ndGgpO3JldHVybiBlLmNvcHkoZiwwLDAsZS5sZW5ndGgpLGZ9aWYoZSl7aWYoQXJyYXkuaXNBcnJheShlKXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxcImxlbmd0aFwiaW4gZSlyZXR1cm4gbmV3IGkoZSk7aWYoXCJCdWZmZXJcIj09PWUudHlwZSYmQXJyYXkuaXNBcnJheShlLmRhdGEpKXJldHVybiBuZXcgaShlLmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuXCIpfSxlLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmFsbG9jVW5zYWZlU2xvdylyZXR1cm4gaS5hbGxvY1Vuc2FmZVNsb3codCk7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemUgbXVzdCBiZSBhIG51bWJlclwiKTtpZih0Pj1hKXRocm93IG5ldyBSYW5nZUVycm9yKFwic2l6ZSBpcyB0b28gbGFyZ2VcIik7cmV0dXJuIG5ldyBvKHQpfX0pLmNhbGwoZSxyKDM5KSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt2YXIgbyxhLGY9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2goZil7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gZS5uZXh0VGljayh0KTtjYXNlIDI6cmV0dXJuIGUubmV4dFRpY2soZnVuY3Rpb24oKXt0LmNhbGwobnVsbCxyKX0pO2Nhc2UgMzpyZXR1cm4gZS5uZXh0VGljayhmdW5jdGlvbigpe3QuY2FsbChudWxsLHIsbil9KTtjYXNlIDQ6cmV0dXJuIGUubmV4dFRpY2soZnVuY3Rpb24oKXt0LmNhbGwobnVsbCxyLG4saSl9KTtkZWZhdWx0OmZvcihvPW5ldyBBcnJheShmLTEpLGE9MDthPG8ubGVuZ3RoOylvW2ErK109YXJndW1lbnRzW2FdO3JldHVybiBlLm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5hcHBseShudWxsLG8pfSl9fSFlLnZlcnNpb258fDA9PT1lLnZlcnNpb24uaW5kZXhPZihcInYwLlwiKXx8MD09PWUudmVyc2lvbi5pbmRleE9mKFwidjEuXCIpJiYwIT09ZS52ZXJzaW9uLmluZGV4T2YoXCJ2MS44LlwiKT90LmV4cG9ydHM9cjp0LmV4cG9ydHM9ZS5uZXh0VGljaztcbn0pLmNhbGwoZSxyKDI2KSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBpKHQsZSl7dGhpcy5faWQ9dCx0aGlzLl9jbGVhckZuPWV9dmFyIG89cigyNikubmV4dFRpY2ssYT1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHksZj1BcnJheS5wcm90b3R5cGUuc2xpY2Uscz17fSx1PTA7ZS5zZXRUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKGEuY2FsbChzZXRUaW1lb3V0LHdpbmRvdyxhcmd1bWVudHMpLGNsZWFyVGltZW91dCl9LGUuc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoYS5jYWxsKHNldEludGVydmFsLHdpbmRvdyxhcmd1bWVudHMpLGNsZWFySW50ZXJ2YWwpfSxlLmNsZWFyVGltZW91dD1lLmNsZWFySW50ZXJ2YWw9ZnVuY3Rpb24odCl7dC5jbG9zZSgpfSxpLnByb3RvdHlwZS51bnJlZj1pLnByb3RvdHlwZS5yZWY9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJGbi5jYWxsKHdpbmRvdyx0aGlzLl9pZCl9LGUuZW5yb2xsPWZ1bmN0aW9uKHQsZSl7Y2xlYXJUaW1lb3V0KHQuX2lkbGVUaW1lb3V0SWQpLHQuX2lkbGVUaW1lb3V0PWV9LGUudW5lbnJvbGw9ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHQuX2lkbGVUaW1lb3V0SWQpLHQuX2lkbGVUaW1lb3V0PS0xfSxlLl91bnJlZkFjdGl2ZT1lLmFjdGl2ZT1mdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodC5faWRsZVRpbWVvdXRJZCk7dmFyIGU9dC5faWRsZVRpbWVvdXQ7ZT49MCYmKHQuX2lkbGVUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3QuX29uVGltZW91dCYmdC5fb25UaW1lb3V0KCl9LGUpKX0sZS5zZXRJbW1lZGlhdGU9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmZ1bmN0aW9uKHQpe3ZhciByPXUrKyxuPSEoYXJndW1lbnRzLmxlbmd0aDwyKSYmZi5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gc1tyXT0hMCxvKGZ1bmN0aW9uKCl7c1tyXSYmKG4/dC5hcHBseShudWxsLG4pOnQuY2FsbChudWxsKSxlLmNsZWFySW1tZWRpYXRlKHIpKX0pLHJ9LGUuY2xlYXJJbW1lZGlhdGU9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKHQpe2RlbGV0ZSBzW3RdfX0pLmNhbGwoZSxyKDE1OCkuc2V0SW1tZWRpYXRlLHIoMTU4KS5jbGVhckltbWVkaWF0ZSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoNjIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoNjIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMjU3KS5CZXIsYT02NTUzNyxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KX1yZXR1cm4gaSh0LG51bGwsW3trZXk6XCJtb2R1bHVzVG9QZW1cIix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09dFswXSl0aHJvdyBuZXcgRXJyb3IoXCJNb2R1bHVzIG1heSBub3Qgc3RhcnQgd2l0aCB6ZXJvXCIpOzEyOCZ0WzBdJiYodD1lLmNvbmNhdChbbmV3IGUoWzBdKSx0XSkpO3ZhciByPW5ldyBvLldyaXRlcjtyZXR1cm4gci5zdGFydFNlcXVlbmNlKCksci53cml0ZUJ1ZmZlcih0LDIpLHIud3JpdGVJbnQoYSksci5lbmRTZXF1ZW5jZSgpLFwiLS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tXFxuXCIrci5idWZmZXIudG9TdHJpbmcoXCJiYXNlNjRcIikubWF0Y2goLy57MSw2NH0vZykuam9pbihcIlxcblwiKStcIlxcbi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS1cXG5cIn19LHtrZXk6XCJtb2R1bHVzRnJvbVByaXZhdGVLZXlcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LnJlcGxhY2UoXCItLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tXCIsXCJcIikucmVwbGFjZShcIi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tXCIsXCJcIikucmVwbGFjZSgvXFxzK3xcXG5cXHJ8XFxufFxcciQvZ20sXCJcIiksbj1uZXcgZShyLFwiYmFzZTY0XCIpLGk9bmV3IG8uUmVhZGVyKG4pO2kucmVhZFNlcXVlbmNlKCksaS5yZWFkU3RyaW5nKDIsITApO3ZhciBhPWkucmVhZFN0cmluZygyLCEwKTtyZXR1cm4gMD09PWFbMF0/YS5zbGljZSgxKTphfX1dKSx0fSgpO3QuZXhwb3J0cz1mfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe3IoMjgxKSx0LmV4cG9ydHM9cigxNjMpLk51bWJlci5pc0ludGVnZXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi40LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihcIm51bWJlclwiIT10eXBlb2YgdCYmXCJOdW1iZXJcIiE9bih0KSl0aHJvdyBUeXBlRXJyb3IoZSk7cmV0dXJuK3R9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxMSksaT1yKDQ3KSxvPXIoMTApO3QuZXhwb3J0cz1bXS5jb3B5V2l0aGlufHxmdW5jdGlvbih0LGUpe3ZhciByPW4odGhpcyksYT1vKHIubGVuZ3RoKSxmPWkodCxhKSxzPWkoZSxhKSx1PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TWF0aC5taW4oKHZvaWQgMD09PXU/YTppKHUsYSkpLXMsYS1mKSxjPTE7Zm9yKHM8ZiYmZjxzK2gmJihjPS0xLHMrPWgtMSxmKz1oLTEpO2gtLSA+MDspcyBpbiByP3JbZl09cltzXTpkZWxldGUgcltmXSxmKz1jLHMrPWM7cmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIG4odCwhMSxyLnB1c2gscixlKSxyfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTMpLGk9cigxMSksbz1yKDY1KSxhPXIoMTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmLHMpe24oZSk7dmFyIHU9aSh0KSxoPW8odSksYz1hKHUubGVuZ3RoKSxkPXM/Yy0xOjAsbD1zPy0xOjE7aWYocjwyKWZvcig7Oyl7aWYoZCBpbiBoKXtmPWhbZF0sZCs9bDticmVha31pZihkKz1sLHM/ZDwwOmM8PWQpdGhyb3cgVHlwZUVycm9yKFwiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZVwiKX1mb3IoO3M/ZD49MDpjPmQ7ZCs9bClkIGluIGgmJihmPWUoZixoW2RdLGQsdSkpO3JldHVybiBmfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTMpLGk9cig2KSxvPXIoODIpLGE9W10uc2xpY2UsZj17fSxzPWZ1bmN0aW9uKHQsZSxyKXtpZighKGUgaW4gZikpe2Zvcih2YXIgbj1bXSxpPTA7aTxlO2krKyluW2ldPVwiYVtcIitpK1wiXVwiO2ZbZV09RnVuY3Rpb24oXCJGLGFcIixcInJldHVybiBuZXcgRihcIituLmpvaW4oXCIsXCIpK1wiKVwiKX1yZXR1cm4gZltlXSh0LHIpfTt0LmV4cG9ydHM9RnVuY3Rpb24uYmluZHx8ZnVuY3Rpb24odCl7dmFyIGU9bih0aGlzKSxyPWEuY2FsbChhcmd1bWVudHMsMSksZj1mdW5jdGlvbigpe3ZhciBuPXIuY29uY2F0KGEuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGY/cyhlLG4ubGVuZ3RoLG4pOm8oZSxuLHQpfTtyZXR1cm4gaShlLnByb3RvdHlwZSkmJihmLnByb3RvdHlwZT1lLnByb3RvdHlwZSksZn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDkpLmYsaT1yKDQyKSxvPXIoNDUpLGE9cigzMyksZj1yKDQwKSxzPXIoMjQpLHU9cig1NSksaD1yKDEyOCksYz1yKDE3NyksZD1yKDQ2KSxsPXIoOCkscD1yKDM2KS5mYXN0S2V5LGI9bD9cIl9zXCI6XCJzaXplXCIsdj1mdW5jdGlvbih0LGUpe3ZhciByLG49cChlKTtpZihcIkZcIiE9PW4pcmV0dXJuIHQuX2lbbl07Zm9yKHI9dC5fZjtyO3I9ci5uKWlmKHIuaz09ZSlyZXR1cm4gcn07dC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LGUscixoKXt2YXIgYz10KGZ1bmN0aW9uKHQsbil7Zih0LGMsZSxcIl9pXCIpLHQuX2k9aShudWxsKSx0Ll9mPXZvaWQgMCx0Ll9sPXZvaWQgMCx0W2JdPTAsdm9pZCAwIT1uJiZ1KG4scix0W2hdLHQpfSk7cmV0dXJuIG8oYy5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT10Ll9pLHI9dC5fZjtyO3I9ci5uKXIucj0hMCxyLnAmJihyLnA9ci5wLm49dm9pZCAwKSxkZWxldGUgZVtyLmldO3QuX2Y9dC5fbD12b2lkIDAsdFtiXT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXYoZSx0KTtpZihyKXt2YXIgbj1yLm4saT1yLnA7ZGVsZXRlIGUuX2lbci5pXSxyLnI9ITAsaSYmKGkubj1uKSxuJiYobi5wPWkpLGUuX2Y9PXImJihlLl9mPW4pLGUuX2w9PXImJihlLl9sPWkpLGVbYl0tLX1yZXR1cm4hIXJ9LGZvckVhY2g6ZnVuY3Rpb24odCl7Zih0aGlzLGMsXCJmb3JFYWNoXCIpO2Zvcih2YXIgZSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtlPWU/ZS5uOnRoaXMuX2Y7KWZvcihyKGUudixlLmssdGhpcyk7ZSYmZS5yOyllPWUucH0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhdih0aGlzLHQpfX0pLGwmJm4oYy5wcm90b3R5cGUsXCJzaXplXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBzKHRoaXNbYl0pfX0pLGN9LGRlZjpmdW5jdGlvbih0LGUscil7dmFyIG4saSxvPXYodCxlKTtyZXR1cm4gbz9vLnY9cjoodC5fbD1vPXtpOmk9cChlLCEwKSxrOmUsdjpyLHA6bj10Ll9sLG46dm9pZCAwLHI6ITF9LHQuX2Z8fCh0Ll9mPW8pLG4mJihuLm49byksdFtiXSsrLFwiRlwiIT09aSYmKHQuX2lbaV09bykpLHR9LGdldEVudHJ5OnYsc2V0U3Ryb25nOmZ1bmN0aW9uKHQsZSxyKXtoKHQsZSxmdW5jdGlvbih0LGUpe3RoaXMuX3Q9dCx0aGlzLl9rPWUsdGhpcy5fbD12b2lkIDB9LGZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT10Ll9rLHI9dC5fbDtyJiZyLnI7KXI9ci5wO3JldHVybiB0Ll90JiYodC5fbD1yPXI/ci5uOnQuX3QuX2YpP1wia2V5c1wiPT1lP2MoMCxyLmspOlwidmFsdWVzXCI9PWU/YygwLHIudik6YygwLFtyLmssci52XSk6KHQuX3Q9dm9pZCAwLGMoMSkpfSxyP1wiZW50cmllc1wiOlwidmFsdWVzXCIsIXIsITApLGQoZSl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNjQpLGk9cigxNjgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtpZihuKHRoaXMpIT10KXRocm93IFR5cGVFcnJvcih0K1wiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO3JldHVybiBpKHRoaXMpfX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQ1KSxpPXIoMzYpLmdldFdlYWssbz1yKDMpLGE9cig2KSxmPXIoNDApLHM9cig1NSksdT1yKDI3KSxoPXIoMTIpLGM9dSg1KSxkPXUoNiksbD0wLHA9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2x8fCh0Ll9sPW5ldyBiKX0sYj1mdW5jdGlvbigpe3RoaXMuYT1bXX0sdj1mdW5jdGlvbih0LGUpe3JldHVybiBjKHQuYSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KX07Yi5wcm90b3R5cGU9e2dldDpmdW5jdGlvbih0KXt2YXIgZT12KHRoaXMsdCk7aWYoZSlyZXR1cm4gZVsxXX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhdih0aGlzLHQpfSxzZXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj12KHRoaXMsdCk7cj9yWzFdPWU6dGhpcy5hLnB1c2goW3QsZV0pfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9ZCh0aGlzLmEsZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSk7cmV0dXJufmUmJnRoaXMuYS5zcGxpY2UoZSwxKSwhIX5lfX0sdC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LGUscixvKXt2YXIgdT10KGZ1bmN0aW9uKHQsbil7Zih0LHUsZSxcIl9pXCIpLHQuX2k9bCsrLHQuX2w9dm9pZCAwLHZvaWQgMCE9biYmcyhuLHIsdFtvXSx0KX0pO3JldHVybiBuKHUucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24odCl7aWYoIWEodCkpcmV0dXJuITE7dmFyIGU9aSh0KTtyZXR1cm4gZT09PSEwP3AodGhpcykuZGVsZXRlKHQpOmUmJmgoZSx0aGlzLl9pKSYmZGVsZXRlIGVbdGhpcy5faV19LGhhczpmdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt2YXIgZT1pKHQpO3JldHVybiBlPT09ITA/cCh0aGlzKS5oYXModCk6ZSYmaChlLHRoaXMuX2kpfX0pLHV9LGRlZjpmdW5jdGlvbih0LGUscil7dmFyIG49aShvKGUpLCEwKTtyZXR1cm4gbj09PSEwP3AodCkuc2V0KGUscik6blt0Ll9pXT1yLHR9LHVmc3RvcmU6cH19LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoOCkmJiFyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyKDEyMCkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hbih0KSYmaXNGaW5pdGUodCkmJmkodCk9PT10fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3RyeXtyZXR1cm4gaT9lKG4ocilbMF0sclsxXSk6ZShyKX1jYXRjaChlKXt2YXIgbz10LnJldHVybjt0aHJvdyB2b2lkIDAhPT1vJiZuKG8uY2FsbCh0KSksZX19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybnt2YWx1ZTplLGRvbmU6ISF0fX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT4tMWUtOCYmdDwxZS04P3QtdCp0LzI6TWF0aC5sb2coMSt0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQ0KSxpPXIoODYpLG89cig2NiksYT1yKDExKSxmPXIoNjUpLHM9T2JqZWN0LmFzc2lnbjt0LmV4cG9ydHM9IXN8fHIoNSkoZnVuY3Rpb24oKXt2YXIgdD17fSxlPXt9LHI9U3ltYm9sKCksbj1cImFiY2RlZmdoaWprbG1ub3BxcnN0XCI7cmV0dXJuIHRbcl09NyxuLnNwbGl0KFwiXCIpLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT10fSksNyE9cyh7fSx0KVtyXXx8T2JqZWN0LmtleXMocyh7fSxlKSkuam9pbihcIlwiKSE9bn0pP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWEodCkscz1hcmd1bWVudHMubGVuZ3RoLHU9MSxoPWkuZixjPW8uZjtzPnU7KWZvcih2YXIgZCxsPWYoYXJndW1lbnRzW3UrK10pLHA9aD9uKGwpLmNvbmNhdChoKGwpKTpuKGwpLGI9cC5sZW5ndGgsdj0wO2I+djspYy5jYWxsKGwsZD1wW3YrK10pJiYocltkXT1sW2RdKTtyZXR1cm4gcn06c30sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoOSksaT1yKDMpLG89cig0NCk7dC5leHBvcnRzPXIoOCk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtpKHQpO2Zvcih2YXIgcixhPW8oZSksZj1hLmxlbmd0aCxzPTA7Zj5zOyluLmYodCxyPWFbcysrXSxlW3JdKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE3KSxpPXIoNDMpLmYsbz17fS50b1N0cmluZyxhPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSxmPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gaSh0KX1jYXRjaCh0KXtyZXR1cm4gYS5zbGljZSgpfX07dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIGEmJlwiW29iamVjdCBXaW5kb3ddXCI9PW8uY2FsbCh0KT9mKHQpOmkobih0KSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMiksaT1yKDE3KSxvPXIoNzgpKCExKSxhPXIoMTMzKShcIklFX1BST1RPXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGY9aSh0KSxzPTAsdT1bXTtmb3IociBpbiBmKXIhPWEmJm4oZixyKSYmdS5wdXNoKHIpO2Zvcig7ZS5sZW5ndGg+czspbihmLHI9ZVtzKytdKSYmKH5vKHUscil8fHUucHVzaChyKSk7cmV0dXJuIHV9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0NCksaT1yKDE3KSxvPXIoNjYpLmY7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHIsYT1pKGUpLGY9bihhKSxzPWYubGVuZ3RoLHU9MCxoPVtdO3M+dTspby5jYWxsKGEscj1mW3UrK10pJiZoLnB1c2godD9bcixhW3JdXTphW3JdKTtyZXR1cm4gaH19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0MyksaT1yKDg2KSxvPXIoMyksYT1yKDQpLlJlZmxlY3Q7dC5leHBvcnRzPWEmJmEub3duS2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9bi5mKG8odCkpLHI9aS5mO3JldHVybiByP2UuY29uY2F0KHIodCkpOmV9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KS5wYXJzZUZsb2F0LGk9cig1OCkudHJpbTt0LmV4cG9ydHM9MS9uKHIoMTM4KStcIi0wXCIpIT09LSgxLzApP2Z1bmN0aW9uKHQpe3ZhciBlPWkoU3RyaW5nKHQpLDMpLHI9bihlKTtyZXR1cm4gMD09PXImJlwiLVwiPT1lLmNoYXJBdCgwKT8tMDpyfTpufSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KS5wYXJzZUludCxpPXIoNTgpLnRyaW0sbz1yKDEzOCksYT0vXltcXC0rXT8wW3hYXS87dC5leHBvcnRzPTghPT1uKG8rXCIwOFwiKXx8MjIhPT1uKG8rXCIweDE2XCIpP2Z1bmN0aW9uKHQsZSl7dmFyIHI9aShTdHJpbmcodCksMyk7cmV0dXJuIG4ocixlPj4+MHx8KGEudGVzdChyKT8xNjoxMCkpfTpufSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1PYmplY3QuaXN8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lPzAhPT10fHwxL3Q9PT0xL2U6dCE9dCYmZSE9ZX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEwKSxpPXIoMTM3KSxvPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgZj1TdHJpbmcobyh0KSkscz1mLmxlbmd0aCx1PXZvaWQgMD09PXI/XCIgXCI6U3RyaW5nKHIpLGg9bihlKTtpZihoPD1zfHxcIlwiPT11KXJldHVybiBmO3ZhciBjPWgtcyxkPWkuY2FsbCh1LE1hdGguY2VpbChjL3UubGVuZ3RoKSk7cmV0dXJuIGQubGVuZ3RoPmMmJihkPWQuc2xpY2UoMCxjKSksYT9kK2Y6ZitkfX0sZnVuY3Rpb24odCxlLHIpe2UuZj1yKDcpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxNzEpO3QuZXhwb3J0cz1yKDc5KShcIk1hcFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbih0KXt2YXIgZT1uLmdldEVudHJ5KHRoaXMsdCk7cmV0dXJuIGUmJmUudn0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uZGVmKHRoaXMsMD09PXQ/MDp0LGUpfX0sbiwhMCl9LGZ1bmN0aW9uKHQsZSxyKXtyKDgpJiZcImdcIiE9Ly4vZy5mbGFncyYmcig5KS5mKFJlZ0V4cC5wcm90b3R5cGUsXCJmbGFnc1wiLHtjb25maWd1cmFibGU6ITAsZ2V0OnIoODEpfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDE3MSk7dC5leHBvcnRzPXIoNzkpKFwiU2V0XCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBuLmRlZih0aGlzLHQ9MD09PXQ/MDp0LHQpfX0sbil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPXIoMjcpKDApLG89cigxNSksYT1yKDM2KSxmPXIoMTc5KSxzPXIoMTczKSx1PXIoNiksaD1hLmdldFdlYWssYz1PYmplY3QuaXNFeHRlbnNpYmxlLGQ9cy51ZnN0b3JlLGw9e30scD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LGI9e2dldDpmdW5jdGlvbih0KXtpZih1KHQpKXt2YXIgZT1oKHQpO3JldHVybiBlPT09ITA/ZCh0aGlzKS5nZXQodCk6ZT9lW3RoaXMuX2ldOnZvaWQgMH19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBzLmRlZih0aGlzLHQsZSl9fSx2PXQuZXhwb3J0cz1yKDc5KShcIldlYWtNYXBcIixwLGIscywhMCwhMCk7NyE9KG5ldyB2KS5zZXQoKE9iamVjdC5mcmVlemV8fE9iamVjdCkobCksNykuZ2V0KGwpJiYobj1zLmdldENvbnN0cnVjdG9yKHApLGYobi5wcm90b3R5cGUsYiksYS5ORUVEPSEwLGkoW1wiZGVsZXRlXCIsXCJoYXNcIixcImdldFwiLFwic2V0XCJdLGZ1bmN0aW9uKHQpe3ZhciBlPXYucHJvdG90eXBlLHI9ZVt0XTtvKGUsdCxmdW5jdGlvbihlLGkpe2lmKHUoZSkmJiFjKGUpKXt0aGlzLl9mfHwodGhpcy5fZj1uZXcgbik7dmFyIG89dGhpcy5fZlt0XShlLGkpO3JldHVyblwic2V0XCI9PXQ/dGhpczpvfXJldHVybiByLmNhbGwodGhpcyxlLGkpfSl9KSl9LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXt0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK3QrXCInLlwiKX1yLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sci5yZXNvbHZlPXIsdC5leHBvcnRzPXIsci5pZD0xOTR9LGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIGkodCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKTt2YXIgaT1uKHRoaXMsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLmNhbGwodGhpcykpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxcIm1lc3NhZ2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6dm9pZCAwIT09dD9TdHJpbmcodCk6XCJcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwibmFtZVwiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTppLmNvbnN0cnVjdG9yLm5hbWV9KSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoaSxpLmNvbnN0cnVjdG9yKSxpfXJldHVybiBpKGUsdCksZX0oRXJyb3IpO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUscil7cig0ODYpLHQuZXhwb3J0cz1yKDE5NykuTnVtYmVyLmlzSW50ZWdlcn0sZnVuY3Rpb24odCxlKXt2YXIgcj10LmV4cG9ydHM9e3ZlcnNpb246XCIyLjQuMFwifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMDApLGk9cigxOTcpLG89cig0NzgpLGE9cig0ODApLGY9XCJwcm90b3R5cGVcIixzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoLGMsZD10JnMuRixsPXQmcy5HLHA9dCZzLlMsYj10JnMuUCx2PXQmcy5CLHk9dCZzLlcsbT1sP2k6aVtlXXx8KGlbZV09e30pLGc9bVtmXSx3PWw/bjpwP25bZV06KG5bZV18fHt9KVtmXTtsJiYocj1lKTtmb3IodSBpbiByKWg9IWQmJncmJnZvaWQgMCE9PXdbdV0saCYmdSBpbiBtfHwoYz1oP3dbdV06clt1XSxtW3VdPWwmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHdbdV0/clt1XTp2JiZoP28oYyxuKTp5JiZ3W3VdPT1jP2Z1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKGUscixuKXtpZih0aGlzIGluc3RhbmNlb2YgdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChlKTtjYXNlIDI6cmV0dXJuIG5ldyB0KGUscil9cmV0dXJuIG5ldyB0KGUscixuKX1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3JldHVybiBlW2ZdPXRbZl0sZX0oYyk6YiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYz9vKEZ1bmN0aW9uLmNhbGwsYyk6YyxiJiYoKG0udmlydHVhbHx8KG0udmlydHVhbD17fSkpW3VdPWMsdCZzLlImJmcmJiFnW3VdJiZhKGcsdSxjKSkpfTtzLkY9MSxzLkc9MixzLlM9NCxzLlA9OCxzLkI9MTYscy5XPTMyLHMuVT02NCxzLlI9MTI4LHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sZnVuY3Rpb24odCxlKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1yKDQ3Myl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7LyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuZnVuY3Rpb24gbih0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5CdWZmZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQnVmZmVyLmlzQnVmZmVyP2UuQnVmZmVyLmlzQnVmZmVyKHQpOiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX1mdW5jdGlvbiBvKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4haSh0KSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQXJyYXlCdWZmZXImJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHQpOiEhdCYmKHQgaW5zdGFuY2VvZiBEYXRhVmlld3x8ISEodC5idWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSkpfWZ1bmN0aW9uIGYodCl7aWYody5pc0Z1bmN0aW9uKHQpKXtpZihTKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLHI9ZS5tYXRjaChBKTtyZXR1cm4gciYmclsxXX19ZnVuY3Rpb24gcyh0LGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3QubGVuZ3RoPGU/dDp0LnNsaWNlKDAsZSk6dH1mdW5jdGlvbiB1KHQpe2lmKFN8fCF3LmlzRnVuY3Rpb24odCkpcmV0dXJuIHcuaW5zcGVjdCh0KTt2YXIgZT1mKHQpLHI9ZT9cIjogXCIrZTpcIlwiO3JldHVyblwiW0Z1bmN0aW9uXCIrcitcIl1cIn1mdW5jdGlvbiBoKHQpe3JldHVybiBzKHUodC5hY3R1YWwpLDEyOCkrXCIgXCIrdC5vcGVyYXRvcitcIiBcIitzKHUodC5leHBlY3RlZCksMTI4KX1mdW5jdGlvbiBjKHQsZSxyLG4saSl7dGhyb3cgbmV3IEUuQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6cixhY3R1YWw6dCxleHBlY3RlZDplLG9wZXJhdG9yOm4sc3RhY2tTdGFydEZ1bmN0aW9uOml9KX1mdW5jdGlvbiBkKHQsZSl7dHx8Yyh0LCEwLGUsXCI9PVwiLEUub2spfWZ1bmN0aW9uIGwodCxlLHIsZil7aWYodD09PWUpcmV0dXJuITA7aWYoaSh0KSYmaShlKSlyZXR1cm4gMD09PW4odCxlKTtpZih3LmlzRGF0ZSh0KSYmdy5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYody5pc1JlZ0V4cCh0KSYmdy5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdHx8bnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlKXtpZihhKHQpJiZhKGUpJiZvKHQpPT09byhlKSYmISh0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSlyZXR1cm4gMD09PW4obmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSk7aWYoaSh0KSE9PWkoZSkpcmV0dXJuITE7Zj1mfHx7YWN0dWFsOltdLGV4cGVjdGVkOltdfTt2YXIgcz1mLmFjdHVhbC5pbmRleE9mKHQpO3JldHVybiBzIT09LTEmJnM9PT1mLmV4cGVjdGVkLmluZGV4T2YoZSl8fChmLmFjdHVhbC5wdXNoKHQpLGYuZXhwZWN0ZWQucHVzaChlKSxiKHQsZSxyLGYpKX1yZXR1cm4gcj90PT09ZTp0PT1lfWZ1bmN0aW9uIHAodCl7cmV0dXJuXCJbb2JqZWN0IEFyZ3VtZW50c11cIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGIodCxlLHIsbil7aWYobnVsbD09PXR8fHZvaWQgMD09PXR8fG51bGw9PT1lfHx2b2lkIDA9PT1lKXJldHVybiExO2lmKHcuaXNQcmltaXRpdmUodCl8fHcuaXNQcmltaXRpdmUoZSkpcmV0dXJuIHQ9PT1lO2lmKHImJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMTt2YXIgaT1wKHQpLG89cChlKTtpZihpJiYhb3x8IWkmJm8pcmV0dXJuITE7aWYoaSlyZXR1cm4gdD1NLmNhbGwodCksZT1NLmNhbGwoZSksbCh0LGUscik7dmFyIGEsZixzPWsodCksdT1rKGUpO2lmKHMubGVuZ3RoIT09dS5sZW5ndGgpcmV0dXJuITE7Zm9yKHMuc29ydCgpLHUuc29ydCgpLGY9cy5sZW5ndGgtMTtmPj0wO2YtLSlpZihzW2ZdIT09dVtmXSlyZXR1cm4hMTtmb3IoZj1zLmxlbmd0aC0xO2Y+PTA7Zi0tKWlmKGE9c1tmXSwhbCh0W2FdLGVbYV0scixuKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB2KHQsZSxyKXtsKHQsZSwhMCkmJmModCxlLHIsXCJub3REZWVwU3RyaWN0RXF1YWxcIix2KX1mdW5jdGlvbiB5KHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKFwiW29iamVjdCBSZWdFeHBdXCI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gZS50ZXN0KHQpO3RyeXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4hMH1jYXRjaCh0KXt9cmV0dXJuIUVycm9yLmlzUHJvdG90eXBlT2YoZSkmJmUuY2FsbCh7fSx0KT09PSEwfWZ1bmN0aW9uIG0odCl7dmFyIGU7dHJ5e3QoKX1jYXRjaCh0KXtlPXR9cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYmxvY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcInN0cmluZ1wiPT10eXBlb2YgciYmKG49cixyPW51bGwpLGk9bShlKSxuPShyJiZyLm5hbWU/XCIgKFwiK3IubmFtZStcIikuXCI6XCIuXCIpKyhuP1wiIFwiK246XCIuXCIpLHQmJiFpJiZjKGkscixcIk1pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uXCIrbik7dmFyIG89XCJzdHJpbmdcIj09dHlwZW9mIG4sYT0hdCYmdy5pc0Vycm9yKGkpLGY9IXQmJmkmJiFyO2lmKChhJiZvJiZ5KGkscil8fGYpJiZjKGkscixcIkdvdCB1bndhbnRlZCBleGNlcHRpb25cIituKSx0JiZpJiZyJiYheShpLHIpfHwhdCYmaSl0aHJvdyBpfXZhciB3PXIoNjA2KSxfPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksTT1BcnJheS5wcm90b3R5cGUuc2xpY2UsUz1mdW5jdGlvbigpe3JldHVyblwiZm9vXCI9PT1mdW5jdGlvbigpe30ubmFtZX0oKSxFPXQuZXhwb3J0cz1kLEE9L1xccypmdW5jdGlvblxccysoW15cXChcXHNdKilcXHMqLztFLkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT1cIkFzc2VydGlvbkVycm9yXCIsdGhpcy5hY3R1YWw9dC5hY3R1YWwsdGhpcy5leHBlY3RlZD10LmV4cGVjdGVkLHRoaXMub3BlcmF0b3I9dC5vcGVyYXRvcix0Lm1lc3NhZ2U/KHRoaXMubWVzc2FnZT10Lm1lc3NhZ2UsdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSExKToodGhpcy5tZXNzYWdlPWgodGhpcyksdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSEwKTt2YXIgZT10LnN0YWNrU3RhcnRGdW5jdGlvbnx8YztpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGUpO2Vsc2V7dmFyIHI9bmV3IEVycm9yO2lmKHIuc3RhY2spe3ZhciBuPXIuc3RhY2ssaT1mKGUpLG89bi5pbmRleE9mKFwiXFxuXCIraSk7aWYobz49MCl7dmFyIGE9bi5pbmRleE9mKFwiXFxuXCIsbysxKTtuPW4uc3Vic3RyaW5nKGErMSl9dGhpcy5zdGFjaz1ufX19LHcuaW5oZXJpdHMoRS5Bc3NlcnRpb25FcnJvcixFcnJvciksRS5mYWlsPWMsRS5vaz1kLEUuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPWUmJmModCxlLHIsXCI9PVwiLEUuZXF1YWwpfSxFLm5vdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT1lJiZjKHQsZSxyLFwiIT1cIixFLm5vdEVxdWFsKX0sRS5kZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe2wodCxlLCExKXx8Yyh0LGUscixcImRlZXBFcXVhbFwiLEUuZGVlcEVxdWFsKX0sRS5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe2wodCxlLCEwKXx8Yyh0LGUscixcImRlZXBTdHJpY3RFcXVhbFwiLEUuZGVlcFN0cmljdEVxdWFsKX0sRS5ub3REZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe2wodCxlLCExKSYmYyh0LGUscixcIm5vdERlZXBFcXVhbFwiLEUubm90RGVlcEVxdWFsKX0sRS5ub3REZWVwU3RyaWN0RXF1YWw9dixFLnN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT09ZSYmYyh0LGUscixcIj09PVwiLEUuc3RyaWN0RXF1YWwpfSxFLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT09ZSYmYyh0LGUscixcIiE9PVwiLEUubm90U3RyaWN0RXF1YWwpfSxFLnRocm93cz1mdW5jdGlvbih0LGUscil7ZyghMCx0LGUscil9LEUuZG9lc05vdFRocm93PWZ1bmN0aW9uKHQsZSxyKXtnKCExLHQsZSxyKX0sRS5pZkVycm9yPWZ1bmN0aW9uKHQpe2lmKHQpdGhyb3cgdH07dmFyIGs9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KV8uY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbChlLHIoMzkpKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixpLGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0LHIsaSk7YS5jYWxsKHRoaXMpLHRoaXMuX2ZpbklEPWUuY29uY2F0KFtpLG5ldyBlKFswLDAsMCwxXSldKSxpPWUuY29uY2F0KFtpLG5ldyBlKFswLDAsMCwyXSldKSx0aGlzLl9jaXBoZXI9bmV3IG8uQUVTKHIpLHRoaXMuX3ByZXY9bmV3IGUoaS5sZW5ndGgpLHRoaXMuX2NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX3NlY0NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX2RlY3J5cHQ9Zix0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAsaS5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9dDt2YXIgdT1uZXcgZSg0KTt1LmZpbGwoMCksdGhpcy5fZ2hhc2g9bmV3IHModGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh1KSksdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9MDt0Lmxlbmd0aCE9PWUubGVuZ3RoJiZyKys7Zm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxpPS0xOysraTxuOylyKz10W2ldXmVbaV07cmV0dXJuIHJ9dmFyIG89cig5NCksYT1yKDk3KSxmPXIoMikscz1yKDQ5NyksdT1yKDY3KTtmKG4sYSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgcj0xNi10aGlzLl9hbGVuJTE2O3I8MTYmJihyPW5ldyBlKHIpLHIuZmlsbCgwKSx0aGlzLl9naGFzaC51cGRhdGUocikpfXRoaXMuX2NhbGxlZD0hMDt2YXIgbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KTtyZXR1cm4gdGhpcy5fZGVjcnlwdD90aGlzLl9naGFzaC51cGRhdGUodCk6dGhpcy5fZ2hhc2gudXBkYXRlKG4pLHRoaXMuX2xlbis9dC5sZW5ndGgsbn0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhXCIpO3ZhciB0PXUodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCl7aWYoaSh0LHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKX1lbHNlIHRoaXMuX2F1dGhUYWc9dDt0aGlzLl9jaXBoZXIuc2NydWIoKX0sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZWNyeXB0JiZlLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXJldHVybiB0aGlzLl9hdXRoVGFnO3Rocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2F1dGhUYWc9dH0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIik7dGhpcy5fZ2hhc2gudXBkYXRlKHQpLHRoaXMuX2FsZW4rPXQubGVuZ3RofX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDY3KTtlLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUsdC5fcHJldik7cmV0dXJuIHQuX3ByZXY9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayhyKSx0Ll9wcmV2fSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcmV2O3QuX3ByZXY9ZTt2YXIgaT10Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpO3JldHVybiBuKGkscil9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG4pe3ZhciBvPXIubGVuZ3RoLGE9aShyLGUuX2NhY2hlKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2UobyksZS5fcHJldj10LmNvbmNhdChbZS5fcHJldixuP3I6YV0pLGF9dmFyIGk9cig2Nyk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscixpKXtmb3IodmFyIG8sYT1uZXcgdChcIlwiKTtyLmxlbmd0aDspe2lmKDA9PT1lLl9jYWNoZS5sZW5ndGgmJihlLl9jYWNoZT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLGUuX3ByZXY9bmV3IHQoXCJcIikpLCEoZS5fY2FjaGUubGVuZ3RoPD1yLmxlbmd0aCkpe2E9dC5jb25jYXQoW2EsbihlLHIsaSldKTticmVha31vPWUuX2NhY2hlLmxlbmd0aCxhPXQuY29uY2F0KFthLG4oZSxyLnNsaWNlKDAsbyksaSldKSxyPXIuc2xpY2Uobyl9cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQsZSxyKXtmb3IodmFyIGksbyxhLGY9LTEscz04LHU9MDsrK2Y8czspaT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLG89ZSYxPDw3LWY/MTI4OjAsYT1pWzBdXm8sdSs9KDEyOCZhKT4+ZiU4LHQuX3ByZXY9bih0Ll9wcmV2LHI/bzphKTtyZXR1cm4gdX1mdW5jdGlvbiBuKGUscil7dmFyIG49ZS5sZW5ndGgsaT0tMSxvPW5ldyB0KGUubGVuZ3RoKTtmb3IoZT10LmNvbmNhdChbZSxuZXcgdChbcl0pXSk7KytpPG47KW9baV09ZVtpXTw8MXxlW2krMV0+Pjc7cmV0dXJuIG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHIsbil7dmFyIGk9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxvPWlbMF1ecjtyZXR1cm4gZS5fcHJldj10LmNvbmNhdChbZS5fcHJldi5zbGljZSgxKSxuZXcgdChbbj9yOm9dKV0pLG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NpcGhlci5lbmNyeXB0QmxvY2soZSl9LGUuZGVjcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldiksdC5fcHJldn12YXIgaT1yKDY3KTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLG4oZSldKTt2YXIgbz1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLGkocixvKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLGEsZil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhvLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBpLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGEubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsYS5jb3B5KHRoaXMuX3ByZXYpLHZvaWQodGhpcy5fbW9kZT10KSk6bmV3IG4odCxyLGEpfXZhciBpPXIoOTQpLG89cig5NyksYT1yKDIpO2EobixvKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0LHRoaXMuX2RlY3J5cHQpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe2VbXCJSU0EtU0hBMjI0XCJdPWUuc2hhMjI0V2l0aFJTQUVuY3J5cHRpb249e3NpZ246XCJyc2FcIixoYXNoOlwic2hhMjI0XCIsaWQ6bmV3IHQoXCIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxY1wiLFwiaGV4XCIpfSxlW1wiUlNBLVNIQTI1NlwiXT1lLnNoYTI1NldpdGhSU0FFbmNyeXB0aW9uPXtzaWduOlwicnNhXCIsaGFzaDpcInNoYTI1NlwiLGlkOm5ldyB0KFwiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjBcIixcImhleFwiKX0sZVtcIlJTQS1TSEEzODRcIl09ZS5zaGEzODRXaXRoUlNBRW5jcnlwdGlvbj17c2lnbjpcInJzYVwiLGhhc2g6XCJzaGEzODRcIixpZDpuZXcgdChcIjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwXCIsXCJoZXhcIil9LGVbXCJSU0EtU0hBNTEyXCJdPWUuc2hhNTEyV2l0aFJTQUVuY3J5cHRpb249e3NpZ246XCJyc2FcIixoYXNoOlwic2hhNTEyXCIsaWQ6bmV3IHQoXCIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MFwiLFwiaGV4XCIpfSxlW1wiUlNBLVNIQTFcIl09e3NpZ246XCJyc2FcIixoYXNoOlwic2hhMVwiLGlkOm5ldyB0KFwiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0XCIsXCJoZXhcIil9LGVbXCJlY2RzYS13aXRoLVNIQTFcIl09e3NpZ246XCJlY2RzYVwiLGhhc2g6XCJzaGExXCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZS5EU0E9ZVtcIkRTQS1TSEExXCJdPWVbXCJEU0EtU0hBXCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInNoYTFcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiRFNBLVNIQTIyNFwiXT1lW1wiRFNBLVdJVEgtU0hBMjI0XCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInNoYTIyNFwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGVbXCJEU0EtU0hBMjU2XCJdPWVbXCJEU0EtV0lUSC1TSEEyNTZcIl09e3NpZ246XCJkc2FcIixoYXNoOlwic2hhMjU2XCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZVtcIkRTQS1TSEEzODRcIl09ZVtcIkRTQS1XSVRILVNIQTM4NFwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJzaGEzODRcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiRFNBLVNIQTUxMlwiXT1lW1wiRFNBLVdJVEgtU0hBNTEyXCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInNoYTUxMlwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGVbXCJEU0EtUklQRU1EMTYwXCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInJtZDE2MFwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGVbXCJSU0EtUklQRU1EMTYwXCJdPWUucmlwZW1kMTYwV2l0aFJTQT17c2lnbjpcInJzYVwiLGhhc2g6XCJybWQxNjBcIixpZDpuZXcgdChcIjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNFwiLFwiaGV4XCIpfSxlW1wiUlNBLU1ENVwiXT1lLm1kNVdpdGhSU0FFbmNyeXB0aW9uPXtzaWduOlwicnNhXCIsaGFzaDpcIm1kNVwiLGlkOm5ldyB0KFwiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwXCIsXCJoZXhcIil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtlW1wiMS4zLjEzMi4wLjEwXCJdPVwic2VjcDI1NmsxXCIsZVtcIjEuMy4xMzIuMC4zM1wiXT1cInAyMjRcIixlW1wiMS4yLjg0MC4xMDA0NS4zLjEuMVwiXT1cInAxOTJcIixlW1wiMS4yLjg0MC4xMDA0NS4zLjEuN1wiXT1cInAyNTZcIixlW1wiMS4zLjEzMi4wLjM0XCJdPVwicDM4NFwiLGVbXCIxLjMuMTMyLjAuMzVcIl09XCJwNTIxXCJ9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt2YXIgcjtcIm9iamVjdFwiIT10eXBlb2YgdHx8ZS5pc0J1ZmZlcih0KXx8KHI9dC5wYXNzcGhyYXNlLHQ9dC5rZXkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0KSk7dmFyIG4sYSxzPWYodCxyKSx1PXMudGFnLGg9cy5kYXRhO3N3aXRjaCh1KXtjYXNlXCJQVUJMSUMgS0VZXCI6c3dpdGNoKGE9by5QdWJsaWNLZXkuZGVjb2RlKGgsXCJkZXJcIiksbj1hLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbihcIi5cIikpe2Nhc2VcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI6cmV0dXJuIG8uUlNBUHVibGljS2V5LmRlY29kZShhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSxcImRlclwiKTtjYXNlXCIxLjIuODQwLjEwMDQ1LjIuMVwiOnJldHVybiBhLnN1YmplY3RQcml2YXRlS2V5PWEuc3ViamVjdFB1YmxpY0tleSx7dHlwZTpcImVjXCIsZGF0YTphfTtjYXNlXCIxLjIuODQwLjEwMDQwLjQuMVwiOnJldHVybiBhLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1vLkRTQXBhcmFtLmRlY29kZShhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSxcImRlclwiKSx7dHlwZTpcImRzYVwiLGRhdGE6YS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IGlkIFwiK24pfXRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IHR5cGUgXCIrdSk7Y2FzZVwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCI6aD1vLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIiksaD1pKGgscik7Y2FzZVwiUFJJVkFURSBLRVlcIjpzd2l0Y2goYT1vLlByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIiksbj1hLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbihcIi5cIikpe2Nhc2VcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI6cmV0dXJuIG8uUlNBUHJpdmF0ZUtleS5kZWNvZGUoYS5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKTtjYXNlXCIxLjIuODQwLjEwMDQ1LjIuMVwiOnJldHVybntjdXJ2ZTphLmFsZ29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5Om8uRUNQcml2YXRlS2V5LmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpLnByaXZhdGVLZXl9O2Nhc2VcIjEuMi44NDAuMTAwNDAuNC4xXCI6cmV0dXJuIGEuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1vLkRTQXBhcmFtLmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpLHt0eXBlOlwiZHNhXCIscGFyYW1zOmEuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSBpZCBcIituKX10aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSB0eXBlIFwiK3UpO2Nhc2VcIlJTQSBQVUJMSUMgS0VZXCI6cmV0dXJuIG8uUlNBUHVibGljS2V5LmRlY29kZShoLFwiZGVyXCIpO2Nhc2VcIlJTQSBQUklWQVRFIEtFWVwiOnJldHVybiBvLlJTQVByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIik7Y2FzZVwiRFNBIFBSSVZBVEUgS0VZXCI6cmV0dXJue3R5cGU6XCJkc2FcIixwYXJhbXM6by5EU0FQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpfTtjYXNlXCJFQyBQUklWQVRFIEtFWVwiOnJldHVybiBoPW8uRUNQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpLHtjdXJ2ZTpoLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpoLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIit1KX19ZnVuY3Rpb24gaSh0LHIpe3ZhciBuPXQuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LGk9cGFyc2VJbnQodC5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLG89YVt0LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oXCIuXCIpXSxmPXQuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LGg9dC5zdWJqZWN0UHJpdmF0ZUtleSxjPXBhcnNlSW50KG8uc3BsaXQoXCItXCIpWzFdLDEwKS84LGQ9dS5wYmtkZjJTeW5jKHIsbixpLGMpLGw9cy5jcmVhdGVEZWNpcGhlcml2KG8sZCxmKSxwPVtdO3JldHVybiBwLnB1c2gobC51cGRhdGUoaCkpLHAucHVzaChsLmZpbmFsKCkpLGUuY29uY2F0KHApfXZhciBvPXIoNTI4KSxhPXIoNDY2KSxmPXIoNTI5KSxzPXIoMjE5KSx1PXIoMTUxKTt0LmV4cG9ydHM9bixuLnNpZ25hdHVyZT1vLnNpZ25hdHVyZX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGEuY2FsbCh0aGlzLGUpLGYuaXNCdWZmZXIodCk/KHRoaXMuYmFzZT10LHRoaXMub2Zmc2V0PTAsdm9pZCh0aGlzLmxlbmd0aD10Lmxlbmd0aCkpOnZvaWQgdGhpcy5lcnJvcihcIklucHV0IG5vdCBCdWZmZXJcIil9ZnVuY3Rpb24gaSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaXx8KHQ9bmV3IGkodCxlKSksdGhpcy5sZW5ndGgrPXQubGVuZ3RoLHR9LHRoaXMpO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIHQpe2lmKCEoMDw9dCYmdDw9MjU1KSlyZXR1cm4gZS5lcnJvcihcIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWVcIik7dGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPTF9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9Zi5ieXRlTGVuZ3RoKHQpO2Vsc2V7aWYoIWYuaXNCdWZmZXIodCkpcmV0dXJuIGUuZXJyb3IoXCJVbnN1cHBvcnRlZCB0eXBlOiBcIit0eXBlb2YgdCk7dGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPXQubGVuZ3RofX12YXIgbz1yKDIpLGE9cig2OCkuUmVwb3J0ZXIsZj1yKDEpLkJ1ZmZlcjtvKG4sYSksZS5EZWNvZGVyQnVmZmVyPW4sbi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6YS5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sbi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbih0aGlzLmJhc2UpO3JldHVybiBlLm9mZnNldD10Lm9mZnNldCxlLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD10Lm9mZnNldCxhLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyx0LnJlcG9ydGVyKSxlfSxuLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LG4ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKHR8fFwiRGVjb2RlckJ1ZmZlciBvdmVycnVuXCIpfSxuLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzLm9mZnNldCt0PD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IoZXx8XCJEZWNvZGVyQnVmZmVyIG92ZXJydW5cIik7dmFyIHI9bmV3IG4odGhpcy5iYXNlKTtyZXR1cm4gci5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHIub2Zmc2V0PXRoaXMub2Zmc2V0LHIubGVuZ3RoPXRoaXMub2Zmc2V0K3QsdGhpcy5vZmZzZXQrPXQscn0sbi5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UodD90Lm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LGUuRW5jb2RlckJ1ZmZlcj1pLGkucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdHx8KHQ9bmV3IGYodGhpcy5sZW5ndGgpKSxlfHwoZT0wKSwwPT09dGhpcy5sZW5ndGg/dDooQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24ocil7ci5qb2luKHQsZSksZSs9ci5sZW5ndGh9KTooXCJudW1iZXJcIj09dHlwZW9mIHRoaXMudmFsdWU/dFtlXT10aGlzLnZhbHVlOlwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnZhbHVlP3Qud3JpdGUodGhpcy52YWx1ZSxlKTpmLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkodCxlKSxlKz10aGlzLmxlbmd0aCksdCl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLl9yZXZlcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpeygwfHIpPT1yJiYocnw9MCk7dmFyIG49dFtyXTtlW25dPXJ9KSxlfSxuLmRlcj1yKDUzMyl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuZW5jPVwiZGVyXCIsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmVudGl0eT10LHRoaXMudHJlZT1uZXcgaSx0aGlzLnRyZWUuX2luaXQodC5ib2R5KX1mdW5jdGlvbiBpKHQpe3UuTm9kZS5jYWxsKHRoaXMsXCJkZXJcIix0KX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5yZWFkVUludDgoZSk7aWYodC5pc0Vycm9yKHIpKXJldHVybiByO3ZhciBuPWMudGFnQ2xhc3Nbcj4+Nl0saT0wPT09KDMyJnIpO2lmKDMxPT09KDMxJnIpKXt2YXIgbz1yO2ZvcihyPTA7MTI4PT09KDEyOCZvKTspe2lmKG89dC5yZWFkVUludDgoZSksdC5pc0Vycm9yKG8pKXJldHVybiBvO3I8PD03LHJ8PTEyNyZvfX1lbHNlIHImPTMxO3ZhciBhPWMudGFnW3JdO3JldHVybntjbHM6bixwcmltaXRpdmU6aSx0YWc6cix0YWdTdHI6YX19ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49dC5yZWFkVUludDgocik7aWYodC5pc0Vycm9yKG4pKXJldHVybiBuO2lmKCFlJiYxMjg9PT1uKXJldHVybiBudWxsO2lmKDA9PT0oMTI4Jm4pKXJldHVybiBuO3ZhciBpPTEyNyZuO2lmKGk+PTQpcmV0dXJuIHQuZXJyb3IoXCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nXCIpO249MDtmb3IodmFyIG89MDtvPGk7bysrKXtuPDw9ODt2YXIgYT10LnJlYWRVSW50OChyKTtpZih0LmlzRXJyb3IoYSkpcmV0dXJuIGE7bnw9YX1yZXR1cm4gbn12YXIgZj1yKDIpLHM9cigxMDApLHU9cy5iYXNlLGg9cy5iaWdudW0sYz1zLmNvbnN0YW50cy5kZXI7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiB1LkRlY29kZXJCdWZmZXJ8fCh0PW5ldyB1LkRlY29kZXJCdWZmZXIodCxlKSksdGhpcy50cmVlLl9kZWNvZGUodCxlKX0sZihpLHUuTm9kZSksaS5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24odCxlLHIpe2lmKHQuaXNFbXB0eSgpKXJldHVybiExO3ZhciBuPXQuc2F2ZSgpLGk9byh0LCdGYWlsZWQgdG8gcGVlayB0YWc6IFwiJytlKydcIicpO3JldHVybiB0LmlzRXJyb3IoaSk/aToodC5yZXN0b3JlKG4pLGkudGFnPT09ZXx8aS50YWdTdHI9PT1lfHxpLnRhZ1N0citcIm9mXCI9PT1lfHxyKX0saS5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbih0LGUscil7dmFyIG49byh0LCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiBcIicrZSsnXCInKTtpZih0LmlzRXJyb3IobikpcmV0dXJuIG47dmFyIGk9YSh0LG4ucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiBcIicrZSsnXCInKTtpZih0LmlzRXJyb3IoaSkpcmV0dXJuIGk7aWYoIXImJm4udGFnIT09ZSYmbi50YWdTdHIhPT1lJiZuLnRhZ1N0citcIm9mXCIhPT1lKXJldHVybiB0LmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiBcIicrZSsnXCInKTtpZihuLnByaW1pdGl2ZXx8bnVsbCE9PWkpcmV0dXJuIHQuc2tpcChpLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogXCInK2UrJ1wiJyk7dmFyIGY9dC5zYXZlKCkscz10aGlzLl9za2lwVW50aWxFbmQodCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogXCInK3RoaXMudGFnKydcIicpO3JldHVybiB0LmlzRXJyb3Iocyk/czooaT10Lm9mZnNldC1mLm9mZnNldCx0LnJlc3RvcmUoZiksdC5za2lwKGksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicrZSsnXCInKSl9LGkucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24odCxlKXtmb3IoOzspe3ZhciByPW8odCxlKTtpZih0LmlzRXJyb3IocikpcmV0dXJuIHI7dmFyIG49YSh0LHIucHJpbWl0aXZlLGUpO2lmKHQuaXNFcnJvcihuKSlyZXR1cm4gbjt2YXIgaTtpZihpPXIucHJpbWl0aXZlfHxudWxsIT09bj90LnNraXAobik6dGhpcy5fc2tpcFVudGlsRW5kKHQsZSksdC5pc0Vycm9yKGkpKXJldHVybiBpO2lmKFwiZW5kXCI9PT1yLnRhZ1N0cilicmVha319LGkucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1bXTshdC5pc0VtcHR5KCk7KXt2YXIgbz10aGlzLl9wZWVrVGFnKHQsXCJlbmRcIik7aWYodC5pc0Vycm9yKG8pKXJldHVybiBvO3ZhciBhPXIuZGVjb2RlKHQsXCJkZXJcIixuKTtpZih0LmlzRXJyb3IoYSkmJm8pYnJlYWs7aS5wdXNoKGEpfXJldHVybiBpfSxpLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKHQsZSl7aWYoXCJiaXRzdHJcIj09PWUpe3ZhciByPXQucmVhZFVJbnQ4KCk7cmV0dXJuIHQuaXNFcnJvcihyKT9yOnt1bnVzZWQ6cixkYXRhOnQucmF3KCl9fWlmKFwiYm1wc3RyXCI9PT1lKXt2YXIgbj10LnJhdygpO2lmKG4ubGVuZ3RoJTI9PT0xKXJldHVybiB0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2hcIik7Zm9yKHZhciBpPVwiXCIsbz0wO288bi5sZW5ndGgvMjtvKyspaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuLnJlYWRVSW50MTZCRSgyKm8pKTtyZXR1cm4gaX1pZihcIm51bXN0clwiPT09ZSl7dmFyIGE9dC5yYXcoKS50b1N0cmluZyhcImFzY2lpXCIpO3JldHVybiB0aGlzLl9pc051bXN0cihhKT9hOnQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnNcIil9aWYoXCJvY3RzdHJcIj09PWUpcmV0dXJuIHQucmF3KCk7aWYoXCJwcmludHN0clwiPT09ZSl7dmFyIGY9dC5yYXcoKS50b1N0cmluZyhcImFzY2lpXCIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKGYpP2Y6dC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzXCIpfXJldHVybi9zdHIkLy50ZXN0KGUpP3QucmF3KCkudG9TdHJpbmcoKTp0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IFwiK2UrXCIgdW5zdXBwb3J0ZWRcIil9LGkucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9W10sbz0wOyF0LmlzRW1wdHkoKTspe3ZhciBhPXQucmVhZFVJbnQ4KCk7bzw8PTcsb3w9MTI3JmEsMD09PSgxMjgmYSkmJihpLnB1c2gobyksbz0wKX0xMjgmYSYmaS5wdXNoKG8pO3ZhciBmPWlbMF0vNDB8MCxzPWlbMF0lNDA7aWYobj1yP2k6W2Ysc10uY29uY2F0KGkuc2xpY2UoMSkpLGUpe3ZhciB1PWVbbi5qb2luKFwiIFwiKV07dm9pZCAwPT09dSYmKHU9ZVtuLmpvaW4oXCIuXCIpXSksdm9pZCAwIT09dSYmKG49dSl9cmV0dXJuIG59LGkucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYXcoKS50b1N0cmluZygpO2lmKFwiZ2VudGltZVwiPT09ZSl2YXIgbj0wfHIuc2xpY2UoMCw0KSxpPTB8ci5zbGljZSg0LDYpLG89MHxyLnNsaWNlKDYsOCksYT0wfHIuc2xpY2UoOCwxMCksZj0wfHIuc2xpY2UoMTAsMTIpLHM9MHxyLnNsaWNlKDEyLDE0KTtlbHNle2lmKFwidXRjdGltZVwiIT09ZSlyZXR1cm4gdC5lcnJvcihcIkRlY29kaW5nIFwiK2UrXCIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTt2YXIgbj0wfHIuc2xpY2UoMCwyKSxpPTB8ci5zbGljZSgyLDQpLG89MHxyLnNsaWNlKDQsNiksYT0wfHIuc2xpY2UoNiw4KSxmPTB8ci5zbGljZSg4LDEwKSxzPTB8ci5zbGljZSgxMCwxMik7bj1uPDcwPzJlMytuOjE5MDArbn1yZXR1cm4gRGF0ZS5VVEMobixpLTEsbyxhLGYscywwKX0saS5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVhZFVJbnQ4KCk7cmV0dXJuIHQuaXNFcnJvcihlKT9lOjAhPT1lfSxpLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYXcoKSxuPW5ldyBoKHIpO3JldHVybiBlJiYobj1lW24udG9TdHJpbmcoMTApXXx8biksbn0saS5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbih0LGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0PXQoZSkpLHQuX2dldERlY29kZXIoXCJkZXJcIikudHJlZX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuZW5jPVwiZGVyXCIsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmVudGl0eT10LHRoaXMudHJlZT1uZXcgaSx0aGlzLnRyZWUuX2luaXQodC5ib2R5KX1mdW5jdGlvbiBpKHQpe2guTm9kZS5jYWxsKHRoaXMsXCJkZXJcIix0KX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PDEwP1wiMFwiK3Q6dH1mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpO2lmKFwic2Vxb2ZcIj09PXQ/dD1cInNlcVwiOlwic2V0b2ZcIj09PXQmJih0PVwic2V0XCIpLGMudGFnQnlOYW1lLmhhc093blByb3BlcnR5KHQpKWk9Yy50YWdCeU5hbWVbdF07ZWxzZXtpZihcIm51bWJlclwiIT10eXBlb2YgdHx8KDB8dCkhPT10KXJldHVybiBuLmVycm9yKFwiVW5rbm93biB0YWc6IFwiK3QpO2k9dH1yZXR1cm4gaT49MzE/bi5lcnJvcihcIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZFwiKTooZXx8KGl8PTMyKSxpfD1jLnRhZ0NsYXNzQnlOYW1lW3J8fFwidW5pdmVyc2FsXCJdPDw2KX12YXIgZj1yKDIpLHM9cigxKS5CdWZmZXIsdT1yKDEwMCksaD11LmJhc2UsYz11LmNvbnN0YW50cy5kZXI7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKHQsZSkuam9pbigpfSxmKGksaC5Ob2RlKSxpLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWEodCxlLHIsdGhpcy5yZXBvcnRlcik7aWYobi5sZW5ndGg8MTI4KXt2YXIgbz1uZXcgcygyKTtyZXR1cm4gb1swXT1pLG9bMV09bi5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbyxuXSl9Zm9yKHZhciBmPTEsdT1uLmxlbmd0aDt1Pj0yNTY7dT4+PTgpZisrO3ZhciBvPW5ldyBzKDIrZik7b1swXT1pLG9bMV09MTI4fGY7Zm9yKHZhciB1PTErZixoPW4ubGVuZ3RoO2g+MDt1LS0saD4+PTgpb1t1XT0yNTUmaDtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbyxuXSl9LGkucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24odCxlKXtpZihcImJpdHN0clwiPT09ZSlyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHx0LnVudXNlZCx0LmRhdGFdKTtpZihcImJtcHN0clwiPT09ZSl7Zm9yKHZhciByPW5ldyBzKDIqdC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyLndyaXRlVUludDE2QkUodC5jaGFyQ29kZUF0KG4pLDIqbik7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocil9cmV0dXJuXCJudW1zdHJcIj09PWU/dGhpcy5faXNOdW1zdHIodCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2VcIik6XCJwcmludHN0clwiPT09ZT90aGlzLl9pc1ByaW50c3RyKHQpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrXCIpOi9zdHIkLy50ZXN0KGUpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBcIitlK1wiIHVuc3VwcG9ydGVkXCIpfSxpLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZighZSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmRcIik7aWYoIWUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcFwiKTt0PWVbdF0uc3BsaXQoL1tcXHNcXC5dKy9nKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0W25dfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dD10LnNsaWNlKCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXXw9MH1pZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogXCIrSlNPTi5zdHJpbmdpZnkodCkpO2lmKCFyKXtpZih0WzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQlwiKTt0LnNwbGljZSgwLDIsNDAqdFswXSt0WzFdKX1mb3IodmFyIGk9MCxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBvPXRbbl07Zm9yKGkrKztvPj0xMjg7bz4+PTcpaSsrfWZvcih2YXIgYT1uZXcgcyhpKSxmPWEubGVuZ3RoLTEsbj10Lmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgbz10W25dO2ZvcihhW2YtLV09MTI3Jm87KG8+Pj03KT4wOylhW2YtLV09MTI4fDEyNyZvfXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGEpfSxpLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbih0LGUpe3ZhciByLG49bmV3IERhdGUodCk7cmV0dXJuXCJnZW50aW1lXCI9PT1lP3I9W28obi5nZXRGdWxsWWVhcigpKSxvKG4uZ2V0VVRDTW9udGgoKSsxKSxvKG4uZ2V0VVRDRGF0ZSgpKSxvKG4uZ2V0VVRDSG91cnMoKSksbyhuLmdldFVUQ01pbnV0ZXMoKSksbyhuLmdldFVUQ1NlY29uZHMoKSksXCJaXCJdLmpvaW4oXCJcIik6XCJ1dGN0aW1lXCI9PT1lP3I9W28obi5nZXRGdWxsWWVhcigpJTEwMCksbyhuLmdldFVUQ01vbnRoKCkrMSksbyhuLmdldFVUQ0RhdGUoKSksbyhuLmdldFVUQ0hvdXJzKCkpLG8obi5nZXRVVENNaW51dGVzKCkpLG8obi5nZXRVVENTZWNvbmRzKCkpLFwiWlwiXS5qb2luKFwiXCIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBcIitlK1wiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIiksdGhpcy5fZW5jb2RlU3RyKHIsXCJvY3RzdHJcIil9LGkucHJvdG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoXCJcIil9LGkucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYoIWUpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwXCIpO2lmKCFlLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46IFwiK0pTT04uc3RyaW5naWZ5KHQpKTt0PWVbdF19aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQmJiFzLmlzQnVmZmVyKHQpKXt2YXIgcj10LnRvQXJyYXkoKTshdC5zaWduJiYxMjgmclswXSYmci51bnNoaWZ0KDApLHQ9bmV3IHMocil9aWYocy5pc0J1ZmZlcih0KSl7dmFyIG49dC5sZW5ndGg7MD09PXQubGVuZ3RoJiZuKys7dmFyIGk9bmV3IHMobik7cmV0dXJuIHQuY29weShpKSwwPT09dC5sZW5ndGgmJihpWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoaSl9aWYodDwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk7aWYodDwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsdF0pO2Zvcih2YXIgbj0xLG89dDtvPj0yNTY7bz4+PTgpbisrO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksbz1pLmxlbmd0aC0xO28+PTA7by0tKWlbb109MjU1JnQsdD4+PTg7cmV0dXJuIDEyOCZpWzBdJiZpLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgcyhpKSl9LGkucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQ/MjU1OjApfSxpLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dChlKSksdC5fZ2V0RW5jb2RlcihcImRlclwiKS50cmVlfSxpLnByb3RvdHlwZS5fc2tpcERlZmF1bHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1pLmRlZmF1bHQpcmV0dXJuITE7dmFyIG89dC5qb2luKCk7aWYodm9pZCAwPT09aS5kZWZhdWx0QnVmZmVyJiYoaS5kZWZhdWx0QnVmZmVyPXRoaXMuX2VuY29kZVZhbHVlKGkuZGVmYXVsdCxlLHIpLmpvaW4oKSksby5sZW5ndGghPT1pLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspaWYob1tuXSE9PWkuZGVmYXVsdEJ1ZmZlcltuXSlyZXR1cm4hMTtyZXR1cm4hMH19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsaSxmKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCxyLGkpO2EuY2FsbCh0aGlzKSx0aGlzLl9maW5JRD1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMV0pXSksaT1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMl0pXSksdGhpcy5fY2lwaGVyPW5ldyBvLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGkubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLGkuY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPXQ7dmFyIHU9bmV3IGUoNCk7dS5maWxsKDApLHRoaXMuX2doYXNoPW5ldyBzKHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodSkpLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPTA7dC5sZW5ndGghPT1lLmxlbmd0aCYmcisrO2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksaT0tMTsrK2k8bjspcis9dFtpXV5lW2ldO3JldHVybiByfXZhciBvPXIoMTAxKSxhPXIoMTAzKSxmPXIoMikscz1yKDU0MSksdT1yKDY5KTtmKG4sYSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgcj0xNi10aGlzLl9hbGVuJTE2O3I8MTYmJihyPW5ldyBlKHIpLHIuZmlsbCgwKSx0aGlzLl9naGFzaC51cGRhdGUocikpfXRoaXMuX2NhbGxlZD0hMDt2YXIgbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KTtyZXR1cm4gdGhpcy5fZGVjcnlwdD90aGlzLl9naGFzaC51cGRhdGUodCk6dGhpcy5fZ2hhc2gudXBkYXRlKG4pLHRoaXMuX2xlbis9dC5sZW5ndGgsbn0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhXCIpO3ZhciB0PXUodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCl7aWYoaSh0LHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKX1lbHNlIHRoaXMuX2F1dGhUYWc9dDt0aGlzLl9jaXBoZXIuc2NydWIoKX0sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZWNyeXB0JiZlLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXJldHVybiB0aGlzLl9hdXRoVGFnO3Rocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2F1dGhUYWc9dH0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIik7dGhpcy5fZ2hhc2gudXBkYXRlKHQpLHRoaXMuX2FsZW4rPXQubGVuZ3RofX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIE9iamVjdC5rZXlzKGEpfXZhciBpPXIoNTQwKTtlLmNyZWF0ZUNpcGhlcj1lLkNpcGhlcj1pLmNyZWF0ZUNpcGhlcixlLmNyZWF0ZUNpcGhlcml2PWUuQ2lwaGVyaXY9aS5jcmVhdGVDaXBoZXJpdjt2YXIgbz1yKDUzOSk7ZS5jcmVhdGVEZWNpcGhlcj1lLkRlY2lwaGVyPW8uY3JlYXRlRGVjaXBoZXIsZS5jcmVhdGVEZWNpcGhlcml2PWUuRGVjaXBoZXJpdj1vLmNyZWF0ZURlY2lwaGVyaXY7dmFyIGE9cigxNDcpO2UubGlzdENpcGhlcnM9ZS5nZXRDaXBoZXJzPW59LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDY5KTtlLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUsdC5fcHJldik7cmV0dXJuIHQuX3ByZXY9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayhyKSx0Ll9wcmV2fSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcmV2O3QuX3ByZXY9ZTt2YXIgaT10Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpO3JldHVybiBuKGkscil9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG4pe3ZhciBvPXIubGVuZ3RoLGE9aShyLGUuX2NhY2hlKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2UobyksZS5fcHJldj10LmNvbmNhdChbZS5fcHJldixuP3I6YV0pLGF9dmFyIGk9cig2OSk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscixpKXtmb3IodmFyIG8sYT1uZXcgdChcIlwiKTtyLmxlbmd0aDspe2lmKDA9PT1lLl9jYWNoZS5sZW5ndGgmJihlLl9jYWNoZT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLGUuX3ByZXY9bmV3IHQoXCJcIikpLCEoZS5fY2FjaGUubGVuZ3RoPD1yLmxlbmd0aCkpe2E9dC5jb25jYXQoW2EsbihlLHIsaSldKTticmVha31vPWUuX2NhY2hlLmxlbmd0aCxhPXQuY29uY2F0KFthLG4oZSxyLnNsaWNlKDAsbyksaSldKSxyPXIuc2xpY2Uobyl9cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQsZSxyKXtmb3IodmFyIGksbyxhLGY9LTEscz04LHU9MDsrK2Y8czspaT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLG89ZSYxPDw3LWY/MTI4OjAsYT1pWzBdXm8sdSs9KDEyOCZhKT4+ZiU4LHQuX3ByZXY9bih0Ll9wcmV2LHI/bzphKTtyZXR1cm4gdX1mdW5jdGlvbiBuKGUscil7dmFyIG49ZS5sZW5ndGgsaT0tMSxvPW5ldyB0KGUubGVuZ3RoKTtmb3IoZT10LmNvbmNhdChbZSxuZXcgdChbcl0pXSk7KytpPG47KW9baV09ZVtpXTw8MXxlW2krMV0+Pjc7cmV0dXJuIG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHIsbil7dmFyIGk9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxvPWlbMF1ecjtyZXR1cm4gZS5fcHJldj10LmNvbmNhdChbZS5fcHJldi5zbGljZSgxKSxuZXcgdChbbj9yOm9dKV0pLG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NpcGhlci5lbmNyeXB0QmxvY2soZSl9LGUuZGVjcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldiksdC5fcHJldn12YXIgaT1yKDY5KTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLG4oZSldKTt2YXIgbz1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLGkocixvKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLGEsZil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhvLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBpLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGEubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsYS5jb3B5KHRoaXMuX3ByZXYpLHZvaWQodGhpcy5fbW9kZT10KSk6bmV3IG4odCxyLGEpfXZhciBpPXIoMTAxKSxvPXIoMTAzKSxhPXIoMik7YShuLG8pLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQsdGhpcy5fZGVjcnlwdCl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9bCxjLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHJedCYoZV5yKX1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gdCZlfHImKHR8ZSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4odD4+PjJ8dDw8MzApXih0Pj4+MTN8dDw8MTkpXih0Pj4+MjJ8dDw8MTApfWZ1bmN0aW9uIGYodCl7cmV0dXJuKHQ+Pj42fHQ8PDI2KV4odD4+PjExfHQ8PDIxKV4odD4+PjI1fHQ8PDcpfWZ1bmN0aW9uIHModCl7cmV0dXJuKHQ+Pj43fHQ8PDI1KV4odD4+PjE4fHQ8PDE0KV50Pj4+M31mdW5jdGlvbiB1KHQpe3JldHVybih0Pj4+MTd8dDw8MTUpXih0Pj4+MTl8dDw8MTMpXnQ+Pj4xMH12YXIgaD1yKDIpLGM9cig2MCksZD1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxsPW5ldyBBcnJheSg2NCk7aChuLGMpLG4ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3cscj0wfHRoaXMuX2Esbj0wfHRoaXMuX2IsaD0wfHRoaXMuX2MsYz0wfHRoaXMuX2QsbD0wfHRoaXMuX2UscD0wfHRoaXMuX2YsYj0wfHRoaXMuX2csdj0wfHRoaXMuX2gseT0wO3k8MTY7Kyt5KWVbeV09dC5yZWFkSW50MzJCRSg0KnkpO2Zvcig7eTw2NDsrK3kpZVt5XT11KGVbeS0yXSkrZVt5LTddK3MoZVt5LTE1XSkrZVt5LTE2XXwwO2Zvcih2YXIgbT0wO208NjQ7KyttKXt2YXIgZz12K2YobCkraShsLHAsYikrZFttXStlW21dfDAsdz1hKHIpK28ocixuLGgpfDA7dj1iLGI9cCxwPWwsbD1jK2d8MCxjPWgsaD1uLG49cixyPWcrd3wwfXRoaXMuX2E9cit0aGlzLl9hfDAsdGhpcy5fYj1uK3RoaXMuX2J8MCx0aGlzLl9jPWgrdGhpcy5fY3wwLHRoaXMuX2Q9Yyt0aGlzLl9kfDAsdGhpcy5fZT1sK3RoaXMuX2V8MCx0aGlzLl9mPXArdGhpcy5fZnwwLHRoaXMuX2c9Yit0aGlzLl9nfDAsdGhpcy5faD12K3RoaXMuX2h8MH0sbi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSgzMik7cmV0dXJuIHQud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksdC53cml0ZUludDMyQkUodGhpcy5fYiw0KSx0LndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLHQud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLHR9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz12LHAuY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiByXnQmKGVecil9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHQmZXxyJih0fGUpfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4odD4+PjI4fGU8PDQpXihlPj4+Mnx0PDwzMCleKGU+Pj43fHQ8PDI1KX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuKHQ+Pj4xNHxlPDwxOCleKHQ+Pj4xOHxlPDwxNCleKGU+Pj45fHQ8PDIzKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuKHQ+Pj4xfGU8PDMxKV4odD4+Pjh8ZTw8MjQpXnQ+Pj43fWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4odD4+PjF8ZTw8MzEpXih0Pj4+OHxlPDwyNCleKHQ+Pj43fGU8PDI1KX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuKHQ+Pj4xOXxlPDwxMyleKGU+Pj4yOXx0PDwzKV50Pj4+Nn1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuKHQ+Pj4xOXxlPDwxMyleKGU+Pj4yOXx0PDwzKV4odD4+PjZ8ZTw8MjYpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdD4+PjA8ZT4+PjA/MTowfXZhciBsPXIoMikscD1yKDYwKSxiPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sdj1uZXcgQXJyYXkoMTYwKTtsKG4scCksbi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3cscj0wfHRoaXMuX2FoLG49MHx0aGlzLl9iaCxsPTB8dGhpcy5fY2gscD0wfHRoaXMuX2RoLHY9MHx0aGlzLl9laCx5PTB8dGhpcy5fZmgsbT0wfHRoaXMuX2doLGc9MHx0aGlzLl9oaCx3PTB8dGhpcy5fYWwsXz0wfHRoaXMuX2JsLE09MHx0aGlzLl9jbCxTPTB8dGhpcy5fZGwsRT0wfHRoaXMuX2VsLEE9MHx0aGlzLl9mbCxrPTB8dGhpcy5fZ2wseD0wfHRoaXMuX2hsLEk9MDtJPDMyO0krPTIpZVtJXT10LnJlYWRJbnQzMkJFKDQqSSksZVtJKzFdPXQucmVhZEludDMyQkUoNCpJKzQpO2Zvcig7STwxNjA7SSs9Mil7dmFyIEI9ZVtJLTMwXSxPPWVbSS0zMCsxXSxSPXMoQixPKSxQPXUoTyxCKTtcbkI9ZVtJLTRdLE89ZVtJLTQrMV07dmFyIFQ9aChCLE8pLGo9YyhPLEIpLEM9ZVtJLTE0XSxOPWVbSS0xNCsxXSxMPWVbSS0zMl0sVT1lW0ktMzIrMV0sej1QK058MCxEPVIrQytkKHosUCl8MDt6PXoranwwLEQ9RCtUK2QoeixqKXwwLHo9eitVfDAsRD1EK0wrZCh6LFUpfDAsZVtJXT1ELGVbSSsxXT16fWZvcih2YXIgcT0wO3E8MTYwO3ErPTIpe0Q9ZVtxXSx6PWVbcSsxXTt2YXIgRj1vKHIsbixsKSxLPW8odyxfLE0pLEc9YShyLHcpLFY9YSh3LHIpLEg9Zih2LEUpLFg9ZihFLHYpLFk9YltxXSxXPWJbcSsxXSxaPWkodix5LG0pLEo9aShFLEEsayksJD14K1h8MCxRPWcrSCtkKCQseCl8MDskPSQrSnwwLFE9UStaK2QoJCxKKXwwLCQ9JCtXfDAsUT1RK1krZCgkLFcpfDAsJD0kK3p8MCxRPVErRCtkKCQseil8MDt2YXIgdHQ9VitLfDAsZXQ9RytGK2QodHQsVil8MDtnPW0seD1rLG09eSxrPUEseT12LEE9RSxFPVMrJHwwLHY9cCtRK2QoRSxTKXwwLHA9bCxTPU0sbD1uLE09XyxuPXIsXz13LHc9JCt0dHwwLHI9UStldCtkKHcsJCl8MH10aGlzLl9hbD10aGlzLl9hbCt3fDAsdGhpcy5fYmw9dGhpcy5fYmwrX3wwLHRoaXMuX2NsPXRoaXMuX2NsK018MCx0aGlzLl9kbD10aGlzLl9kbCtTfDAsdGhpcy5fZWw9dGhpcy5fZWwrRXwwLHRoaXMuX2ZsPXRoaXMuX2ZsK0F8MCx0aGlzLl9nbD10aGlzLl9nbCtrfDAsdGhpcy5faGw9dGhpcy5faGwreHwwLHRoaXMuX2FoPXRoaXMuX2FoK3IrZCh0aGlzLl9hbCx3KXwwLHRoaXMuX2JoPXRoaXMuX2JoK24rZCh0aGlzLl9ibCxfKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2wrZCh0aGlzLl9jbCxNKXwwLHRoaXMuX2RoPXRoaXMuX2RoK3ArZCh0aGlzLl9kbCxTKXwwLHRoaXMuX2VoPXRoaXMuX2VoK3YrZCh0aGlzLl9lbCxFKXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK3krZCh0aGlzLl9mbCxBKXwwLHRoaXMuX2doPXRoaXMuX2doK20rZCh0aGlzLl9nbCxrKXwwLHRoaXMuX2hoPXRoaXMuX2hoK2crZCh0aGlzLl9obCx4KXwwfSxuLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3Iud3JpdGVJbnQzMkJFKHQsbiksci53cml0ZUludDMyQkUoZSxuKzQpfXZhciByPW5ldyBlKDY0KTtyZXR1cm4gdCh0aGlzLl9haCx0aGlzLl9hbCwwKSx0KHRoaXMuX2JoLHRoaXMuX2JsLDgpLHQodGhpcy5fY2gsdGhpcy5fY2wsMTYpLHQodGhpcy5fZGgsdGhpcy5fZGwsMjQpLHQodGhpcy5fZWgsdGhpcy5fZWwsMzIpLHQodGhpcy5fZmgsdGhpcy5fZmwsNDApLHQodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLHQodGhpcy5faGgsdGhpcy5faGwsNTYpLHJ9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtpZihudWxsIT09ZylyZXR1cm4gZzt2YXIgdD0xMDQ4NTc2LGU9W107ZVswXT0yO2Zvcih2YXIgcj0xLG49MztuPHQ7bis9Mil7Zm9yKHZhciBpPU1hdGguY2VpbChNYXRoLnNxcnQobikpLG89MDtvPHImJmVbb108PWkmJm4lZVtvXSE9PTA7bysrKTtyIT09byYmZVtvXTw9aXx8KGVbcisrXT1uKX1yZXR1cm4gZz1lLGV9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9bigpLHI9MDtyPGUubGVuZ3RoO3IrKylpZigwPT09dC5tb2RuKGVbcl0pKXJldHVybiAwPT09dC5jbXBuKGVbcl0pO3JldHVybiEwfWZ1bmN0aW9uIG8odCl7dmFyIGU9cy5tb250KHQpO3JldHVybiAwPT09bC50b1JlZChlKS5yZWRQb3codC5zdWJuKDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBhKHQsZSl7aWYodDwxNilyZXR1cm4gbmV3IHMoMj09PWV8fDU9PT1lP1sxNDAsMTIzXTpbMTQwLDM5XSk7ZT1uZXcgcyhlKTtmb3IodmFyIHIsbjs7KXtmb3Iocj1uZXcgcyhmKE1hdGguY2VpbCh0LzgpKSk7ci5iaXRMZW5ndGgoKT50OylyLmlzaHJuKDEpO2lmKHIuaXNFdmVuKCkmJnIuaWFkZChkKSxyLnRlc3RuKDEpfHxyLmlhZGQobCksZS5jbXAobCkpe2lmKCFlLmNtcChwKSlmb3IoO3IubW9kKGIpLmNtcCh2KTspci5pYWRkKG0pfWVsc2UgZm9yKDtyLm1vZCh1KS5jbXAoeSk7KXIuaWFkZChtKTtpZihuPXIuc2hybigxKSxpKG4pJiZpKHIpJiZvKG4pJiZvKHIpJiZjLnRlc3QobikmJmMudGVzdChyKSlyZXR1cm4gcn19dmFyIGY9cig2MSk7dC5leHBvcnRzPWEsYS5zaW1wbGVTaWV2ZT1pLGEuZmVybWF0VGVzdD1vO3ZhciBzPXIoMTUwKSx1PW5ldyBzKDI0KSxoPXIoMjMwKSxjPW5ldyBoLGQ9bmV3IHMoMSksbD1uZXcgcygyKSxwPW5ldyBzKDUpLGI9KG5ldyBzKDE2KSxuZXcgcyg4KSxuZXcgcygxMCkpLHY9bmV3IHMoMykseT0obmV3IHMoNyksbmV3IHMoMTEpKSxtPW5ldyBzKDQpLGc9KG5ldyBzKDEyKSxudWxsKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5yYW5kPXR8fG5ldyBvLlJhbmR9dmFyIGk9cigxNTApLG89cig1NzUpO3QuZXhwb3J0cz1uLG4uY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX0sbi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5iaXRMZW5ndGgoKSxyPXRoaXMucmFuZC5nZW5lcmF0ZShNYXRoLmNlaWwoZS84KSk7clswXXw9Mzt2YXIgbj03JmU7cmV0dXJuIDAhPT1uJiYocltyLmxlbmd0aC0xXT4+PTctbiksbmV3IGkocil9LG4ucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYml0TGVuZ3RoKCksbz1pLm1vbnQodCksYT1uZXcgaSgxKS50b1JlZChvKTtlfHwoZT1NYXRoLm1heCgxLG4vNDh8MCkpO2Zvcih2YXIgZj10LnN1Ym4oMSkscz1mLnN1Ym4oMSksdT0wOyFmLnRlc3RuKHUpO3UrKyk7Zm9yKHZhciBoPXQuc2hybih1KSxjPWYudG9SZWQobyksZD0hMDtlPjA7ZS0tKXt2YXIgbD10aGlzLl9yYW5kKHMpO3ImJnIobCk7dmFyIHA9bC50b1JlZChvKS5yZWRQb3coaCk7aWYoMCE9PXAuY21wKGEpJiYwIT09cC5jbXAoYykpe2Zvcih2YXIgYj0xO2I8dTtiKyspe2lmKHA9cC5yZWRTcXIoKSwwPT09cC5jbXAoYSkpcmV0dXJuITE7aWYoMD09PXAuY21wKGMpKWJyZWFrfWlmKGI9PT11KXJldHVybiExfX1yZXR1cm4gZH0sbi5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbih0LGUpe3ZhciByPXQuYml0TGVuZ3RoKCksbj1pLm1vbnQodCksbz1uZXcgaSgxKS50b1JlZChuKTtlfHwoZT1NYXRoLm1heCgxLHIvNDh8MCkpO2Zvcih2YXIgYT10LnN1Ym4oMSksZj1hLnN1Ym4oMSkscz0wOyFhLnRlc3RuKHMpO3MrKyk7Zm9yKHZhciB1PXQuc2hybihzKSxoPWEudG9SZWQobik7ZT4wO2UtLSl7dmFyIGM9dGhpcy5fcmFuZChmKSxkPXQuZ2NkKGMpO2lmKDAhPT1kLmNtcG4oMSkpcmV0dXJuIGQ7dmFyIGw9Yy50b1JlZChuKS5yZWRQb3codSk7aWYoMCE9PWwuY21wKG8pJiYwIT09bC5jbXAoaCkpe2Zvcih2YXIgcD0xO3A8cztwKyspe2lmKGw9bC5yZWRTcXIoKSwwPT09bC5jbXAobykpcmV0dXJuIGwuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHQpO2lmKDA9PT1sLmNtcChoKSlicmVha31pZihwPT09cylyZXR1cm4gbD1sLnJlZFNxcigpLGwuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHQpfX1yZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt2YXIgcj1uZXcgZSg0KTtyZXR1cm4gci53cml0ZVVJbnQzMkJFKHQsMCkscn12YXIgaT1yKDU5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG8sYT1uZXcgZShcIlwiKSxmPTA7YS5sZW5ndGg8cjspbz1uKGYrKyksYT1lLmNvbmNhdChbYSxpKFwic2hhMVwiKS51cGRhdGUodCkudXBkYXRlKG8pLmRpZ2VzdCgpXSk7cmV0dXJuIGEuc2xpY2UoMCxyKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIGU9byh0KSxyPWUudG9SZWQoYS5tb250KHQubW9kdWx1cykpLnJlZFBvdyhuZXcgYSh0LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpO3JldHVybntibGluZGVyOnIsdW5ibGluZGVyOmUuaW52bSh0Lm1vZHVsdXMpfX1mdW5jdGlvbiBpKHQscil7dmFyIGk9bihyKSxvPXIubW9kdWx1cy5ieXRlTGVuZ3RoKCksZj0oYS5tb250KHIubW9kdWx1cyksbmV3IGEodCkubXVsKGkuYmxpbmRlcikudW1vZChyLm1vZHVsdXMpKSxzPWYudG9SZWQoYS5tb250KHIucHJpbWUxKSksdT1mLnRvUmVkKGEubW9udChyLnByaW1lMikpLGg9ci5jb2VmZmljaWVudCxjPXIucHJpbWUxLGQ9ci5wcmltZTIsbD1zLnJlZFBvdyhyLmV4cG9uZW50MSkscD11LnJlZFBvdyhyLmV4cG9uZW50Mik7bD1sLmZyb21SZWQoKSxwPXAuZnJvbVJlZCgpO3ZhciBiPWwuaXN1YihwKS5pbXVsKGgpLnVtb2QoYyk7cmV0dXJuIGIuaW11bChkKSxwLmlhZGQoYiksbmV3IGUocC5pbXVsKGkudW5ibGluZGVyKS51bW9kKHIubW9kdWx1cykudG9BcnJheSghMSxvKSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxyPW5ldyBhKGYoZSkpO3IuY21wKHQubW9kdWx1cyk+PTB8fCFyLnVtb2QodC5wcmltZTEpfHwhci51bW9kKHQucHJpbWUyKTspcj1uZXcgYShmKGUpKTtyZXR1cm4gcn12YXIgYT1yKDcwKSxmPXIoNjEpO3QuZXhwb3J0cz1pLGkuZ2V0cj1vfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3ZhciByO1wib2JqZWN0XCIhPXR5cGVvZiB0fHxlLmlzQnVmZmVyKHQpfHwocj10LnBhc3NwaHJhc2UsdD10LmtleSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQpKTt2YXIgbixhLHM9Zih0LHIpLHU9cy50YWcsaD1zLmRhdGE7c3dpdGNoKHUpe2Nhc2VcIlBVQkxJQyBLRVlcIjpzd2l0Y2goYT1vLlB1YmxpY0tleS5kZWNvZGUoaCxcImRlclwiKSxuPWEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKFwiLlwiKSl7Y2FzZVwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjpyZXR1cm4gby5SU0FQdWJsaWNLZXkuZGVjb2RlKGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLFwiZGVyXCIpO2Nhc2VcIjEuMi44NDAuMTAwNDUuMi4xXCI6cmV0dXJuIGEuc3ViamVjdFByaXZhdGVLZXk9YS5zdWJqZWN0UHVibGljS2V5LHt0eXBlOlwiZWNcIixkYXRhOmF9O2Nhc2VcIjEuMi44NDAuMTAwNDAuNC4xXCI6cmV0dXJuIGEuYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PW8uRFNBcGFyYW0uZGVjb2RlKGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLFwiZGVyXCIpLHt0eXBlOlwiZHNhXCIsZGF0YTphLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgaWQgXCIrbil9dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIit1KTtjYXNlXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIjpoPW8uRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKSxoPWkoaCxyKTtjYXNlXCJQUklWQVRFIEtFWVwiOnN3aXRjaChhPW8uUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKSxuPWEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKFwiLlwiKSl7Y2FzZVwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjpyZXR1cm4gby5SU0FQcml2YXRlS2V5LmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpO2Nhc2VcIjEuMi44NDAuMTAwNDUuMi4xXCI6cmV0dXJue2N1cnZlOmEuYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6by5FQ1ByaXZhdGVLZXkuZGVjb2RlKGEuc3ViamVjdFByaXZhdGVLZXksXCJkZXJcIikucHJpdmF0ZUtleX07Y2FzZVwiMS4yLjg0MC4xMDA0MC40LjFcIjpyZXR1cm4gYS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PW8uRFNBcGFyYW0uZGVjb2RlKGEuc3ViamVjdFByaXZhdGVLZXksXCJkZXJcIikse3R5cGU6XCJkc2FcIixwYXJhbXM6YS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IGlkIFwiK24pfXRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IHR5cGUgXCIrdSk7Y2FzZVwiUlNBIFBVQkxJQyBLRVlcIjpyZXR1cm4gby5SU0FQdWJsaWNLZXkuZGVjb2RlKGgsXCJkZXJcIik7Y2FzZVwiUlNBIFBSSVZBVEUgS0VZXCI6cmV0dXJuIG8uUlNBUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKTtjYXNlXCJEU0EgUFJJVkFURSBLRVlcIjpyZXR1cm57dHlwZTpcImRzYVwiLHBhcmFtczpvLkRTQVByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIil9O2Nhc2VcIkVDIFBSSVZBVEUgS0VZXCI6cmV0dXJuIGg9by5FQ1ByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIikse2N1cnZlOmgucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OmgucHJpdmF0ZUtleX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSB0eXBlIFwiK3UpfX1mdW5jdGlvbiBpKHQscil7dmFyIG49dC5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsaT1wYXJzZUludCh0LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksbz1hW3QuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbihcIi5cIildLGY9dC5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsaD10LnN1YmplY3RQcml2YXRlS2V5LGM9cGFyc2VJbnQoby5zcGxpdChcIi1cIilbMV0sMTApLzgsZD11LnBia2RmMlN5bmMocixuLGksYyksbD1zLmNyZWF0ZURlY2lwaGVyaXYobyxkLGYpLHA9W107cmV0dXJuIHAucHVzaChsLnVwZGF0ZShoKSkscC5wdXNoKGwuZmluYWwoKSksZS5jb25jYXQocCl9dmFyIG89cig1NzgpLGE9cig0NjkpLGY9cig1NzkpLHM9cigyMzkpLHU9cigxNTEpO3QuZXhwb3J0cz1uLG4uc2lnbmF0dXJlPW8uc2lnbmF0dXJlfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gYS5jYWxsKHRoaXMsZSksZi5pc0J1ZmZlcih0KT8odGhpcy5iYXNlPXQsdGhpcy5vZmZzZXQ9MCx2b2lkKHRoaXMubGVuZ3RoPXQubGVuZ3RoKSk6dm9pZCB0aGlzLmVycm9yKFwiSW5wdXQgbm90IEJ1ZmZlclwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpfHwodD1uZXcgaSh0LGUpKSx0aGlzLmxlbmd0aCs9dC5sZW5ndGgsdH0sdGhpcyk7ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgdCl7aWYoISgwPD10JiZ0PD0yNTUpKXJldHVybiBlLmVycm9yKFwibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZVwiKTt0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXRoaXMudmFsdWU9dCx0aGlzLmxlbmd0aD1mLmJ5dGVMZW5ndGgodCk7ZWxzZXtpZighZi5pc0J1ZmZlcih0KSlyZXR1cm4gZS5lcnJvcihcIlVuc3VwcG9ydGVkIHR5cGU6IFwiK3R5cGVvZiB0KTt0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9fXZhciBvPXIoMiksYT1yKDcxKS5SZXBvcnRlcixmPXIoMSkuQnVmZmVyO28obixhKSxlLkRlY29kZXJCdWZmZXI9bixuLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRlcjphLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxuLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuKHRoaXMuYmFzZSk7cmV0dXJuIGUub2Zmc2V0PXQub2Zmc2V0LGUubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PXQub2Zmc2V0LGEucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLHQucmVwb3J0ZXIpLGV9LG4ucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sbi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IodHx8XCJEZWNvZGVyQnVmZmVyIG92ZXJydW5cIil9LG4ucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24odCxlKXtpZighKHRoaXMub2Zmc2V0K3Q8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihlfHxcIkRlY29kZXJCdWZmZXIgb3ZlcnJ1blwiKTt2YXIgcj1uZXcgbih0aGlzLmJhc2UpO3JldHVybiByLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsci5vZmZzZXQ9dGhpcy5vZmZzZXQsci5sZW5ndGg9dGhpcy5vZmZzZXQrdCx0aGlzLm9mZnNldCs9dCxyfSxuLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYmFzZS5zbGljZSh0P3Qub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sZS5FbmNvZGVyQnVmZmVyPWksaS5wcm90b3R5cGUuam9pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0fHwodD1uZXcgZih0aGlzLmxlbmd0aCkpLGV8fChlPTApLDA9PT10aGlzLmxlbmd0aD90OihBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihyKXtyLmpvaW4odCxlKSxlKz1yLmxlbmd0aH0pOihcIm51bWJlclwiPT10eXBlb2YgdGhpcy52YWx1ZT90W2VdPXRoaXMudmFsdWU6XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMudmFsdWU/dC53cml0ZSh0aGlzLnZhbHVlLGUpOmYuaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weSh0LGUpLGUrPXRoaXMubGVuZ3RoKSx0KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uX3JldmVyc2U9ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7KDB8cik9PXImJihyfD0wKTt2YXIgbj10W3JdO2Vbbl09cn0pLGV9LG4uZGVyPXIoNTgzKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5lbmM9XCJkZXJcIix0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZW50aXR5PXQsdGhpcy50cmVlPW5ldyBpLHRoaXMudHJlZS5faW5pdCh0LmJvZHkpfWZ1bmN0aW9uIGkodCl7dS5Ob2RlLmNhbGwodGhpcyxcImRlclwiLHQpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10LnJlYWRVSW50OChlKTtpZih0LmlzRXJyb3IocikpcmV0dXJuIHI7dmFyIG49Yy50YWdDbGFzc1tyPj42XSxpPTA9PT0oMzImcik7aWYoMzE9PT0oMzEmcikpe3ZhciBvPXI7Zm9yKHI9MDsxMjg9PT0oMTI4Jm8pOyl7aWYobz10LnJlYWRVSW50OChlKSx0LmlzRXJyb3IobykpcmV0dXJuIG87cjw8PTcscnw9MTI3Jm99fWVsc2UgciY9MzE7dmFyIGE9Yy50YWdbcl07cmV0dXJue2NsczpuLHByaW1pdGl2ZTppLHRhZzpyLHRhZ1N0cjphfX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LnJlYWRVSW50OChyKTtpZih0LmlzRXJyb3IobikpcmV0dXJuIG47aWYoIWUmJjEyOD09PW4pcmV0dXJuIG51bGw7aWYoMD09PSgxMjgmbikpcmV0dXJuIG47dmFyIGk9MTI3Jm47aWYoaT49NClyZXR1cm4gdC5lcnJvcihcImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmdcIik7bj0wO2Zvcih2YXIgbz0wO288aTtvKyspe248PD04O3ZhciBhPXQucmVhZFVJbnQ4KHIpO2lmKHQuaXNFcnJvcihhKSlyZXR1cm4gYTtufD1hfXJldHVybiBufXZhciBmPXIoMikscz1yKDEwNiksdT1zLmJhc2UsaD1zLmJpZ251bSxjPXMuY29uc3RhbnRzLmRlcjt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIHUuRGVjb2RlckJ1ZmZlcnx8KHQ9bmV3IHUuRGVjb2RlckJ1ZmZlcih0LGUpKSx0aGlzLnRyZWUuX2RlY29kZSh0LGUpfSxmKGksdS5Ob2RlKSxpLnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbih0LGUscil7aWYodC5pc0VtcHR5KCkpcmV0dXJuITE7dmFyIG49dC5zYXZlKCksaT1vKHQsJ0ZhaWxlZCB0byBwZWVrIHRhZzogXCInK2UrJ1wiJyk7cmV0dXJuIHQuaXNFcnJvcihpKT9pOih0LnJlc3RvcmUobiksaS50YWc9PT1lfHxpLnRhZ1N0cj09PWV8fGkudGFnU3RyK1wib2ZcIj09PWV8fHIpfSxpLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1vKHQsJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mIFwiJytlKydcIicpO2lmKHQuaXNFcnJvcihuKSlyZXR1cm4gbjt2YXIgaT1hKHQsbi5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mIFwiJytlKydcIicpO2lmKHQuaXNFcnJvcihpKSlyZXR1cm4gaTtpZighciYmbi50YWchPT1lJiZuLnRhZ1N0ciE9PWUmJm4udGFnU3RyK1wib2ZcIiE9PWUpcmV0dXJuIHQuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6IFwiJytlKydcIicpO2lmKG4ucHJpbWl0aXZlfHxudWxsIT09aSlyZXR1cm4gdC5za2lwKGksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicrZSsnXCInKTt2YXIgZj10LnNhdmUoKSxzPXRoaXMuX3NraXBVbnRpbEVuZCh0LCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiBcIicrdGhpcy50YWcrJ1wiJyk7cmV0dXJuIHQuaXNFcnJvcihzKT9zOihpPXQub2Zmc2V0LWYub2Zmc2V0LHQucmVzdG9yZShmKSx0LnNraXAoaSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6IFwiJytlKydcIicpKX0saS5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbih0LGUpe2Zvcig7Oyl7dmFyIHI9byh0LGUpO2lmKHQuaXNFcnJvcihyKSlyZXR1cm4gcjt2YXIgbj1hKHQsci5wcmltaXRpdmUsZSk7aWYodC5pc0Vycm9yKG4pKXJldHVybiBuO3ZhciBpO2lmKGk9ci5wcmltaXRpdmV8fG51bGwhPT1uP3Quc2tpcChuKTp0aGlzLl9za2lwVW50aWxFbmQodCxlKSx0LmlzRXJyb3IoaSkpcmV0dXJuIGk7aWYoXCJlbmRcIj09PXIudGFnU3RyKWJyZWFrfX0saS5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPVtdOyF0LmlzRW1wdHkoKTspe3ZhciBvPXRoaXMuX3BlZWtUYWcodCxcImVuZFwiKTtpZih0LmlzRXJyb3IobykpcmV0dXJuIG87dmFyIGE9ci5kZWNvZGUodCxcImRlclwiLG4pO2lmKHQuaXNFcnJvcihhKSYmbylicmVhaztpLnB1c2goYSl9cmV0dXJuIGl9LGkucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24odCxlKXtpZihcImJpdHN0clwiPT09ZSl7dmFyIHI9dC5yZWFkVUludDgoKTtyZXR1cm4gdC5pc0Vycm9yKHIpP3I6e3VudXNlZDpyLGRhdGE6dC5yYXcoKX19aWYoXCJibXBzdHJcIj09PWUpe3ZhciBuPXQucmF3KCk7aWYobi5sZW5ndGglMj09PTEpcmV0dXJuIHQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaFwiKTtmb3IodmFyIGk9XCJcIixvPTA7bzxuLmxlbmd0aC8yO28rKylpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4ucmVhZFVJbnQxNkJFKDIqbykpO3JldHVybiBpfWlmKFwibnVtc3RyXCI9PT1lKXt2YXIgYT10LnJhdygpLnRvU3RyaW5nKFwiYXNjaWlcIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKGEpP2E6dC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVyc1wiKX1pZihcIm9jdHN0clwiPT09ZSlyZXR1cm4gdC5yYXcoKTtpZihcInByaW50c3RyXCI9PT1lKXt2YXIgZj10LnJhdygpLnRvU3RyaW5nKFwiYXNjaWlcIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoZik/Zjp0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnNcIil9cmV0dXJuL3N0ciQvLnRlc3QoZSk/dC5yYXcoKS50b1N0cmluZygpOnQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogXCIrZStcIiB1bnN1cHBvcnRlZFwiKX0saS5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1bXSxvPTA7IXQuaXNFbXB0eSgpOyl7dmFyIGE9dC5yZWFkVUludDgoKTtvPDw9NyxvfD0xMjcmYSwwPT09KDEyOCZhKSYmKGkucHVzaChvKSxvPTApfTEyOCZhJiZpLnB1c2gobyk7dmFyIGY9aVswXS80MHwwLHM9aVswXSU0MDtpZihuPXI/aTpbZixzXS5jb25jYXQoaS5zbGljZSgxKSksZSl7dmFyIHU9ZVtuLmpvaW4oXCIgXCIpXTt2b2lkIDA9PT11JiYodT1lW24uam9pbihcIi5cIildKSx2b2lkIDAhPT11JiYobj11KX1yZXR1cm4gbn0saS5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhdygpLnRvU3RyaW5nKCk7aWYoXCJnZW50aW1lXCI9PT1lKXZhciBuPTB8ci5zbGljZSgwLDQpLGk9MHxyLnNsaWNlKDQsNiksbz0wfHIuc2xpY2UoNiw4KSxhPTB8ci5zbGljZSg4LDEwKSxmPTB8ci5zbGljZSgxMCwxMikscz0wfHIuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoXCJ1dGN0aW1lXCIhPT1lKXJldHVybiB0LmVycm9yKFwiRGVjb2RpbmcgXCIrZStcIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO3ZhciBuPTB8ci5zbGljZSgwLDIpLGk9MHxyLnNsaWNlKDIsNCksbz0wfHIuc2xpY2UoNCw2KSxhPTB8ci5zbGljZSg2LDgpLGY9MHxyLnNsaWNlKDgsMTApLHM9MHxyLnNsaWNlKDEwLDEyKTtuPW48NzA/MmUzK246MTkwMCtufXJldHVybiBEYXRlLlVUQyhuLGktMSxvLGEsZixzLDApfSxpLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24odCl7dmFyIGU9dC5yZWFkVUludDgoKTtyZXR1cm4gdC5pc0Vycm9yKGUpP2U6MCE9PWV9LGkucHJvdG90eXBlLl9kZWNvZGVJbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhdygpLG49bmV3IGgocik7cmV0dXJuIGUmJihuPWVbbi50b1N0cmluZygxMCldfHxuKSxufSxpLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dChlKSksdC5fZ2V0RGVjb2RlcihcImRlclwiKS50cmVlfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5lbmM9XCJkZXJcIix0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZW50aXR5PXQsdGhpcy50cmVlPW5ldyBpLHRoaXMudHJlZS5faW5pdCh0LmJvZHkpfWZ1bmN0aW9uIGkodCl7aC5Ob2RlLmNhbGwodGhpcyxcImRlclwiLHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8MTA/XCIwXCIrdDp0fWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGk7aWYoXCJzZXFvZlwiPT09dD90PVwic2VxXCI6XCJzZXRvZlwiPT09dCYmKHQ9XCJzZXRcIiksYy50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkodCkpaT1jLnRhZ0J5TmFtZVt0XTtlbHNle2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHwoMHx0KSE9PXQpcmV0dXJuIG4uZXJyb3IoXCJVbmtub3duIHRhZzogXCIrdCk7aT10fXJldHVybiBpPj0zMT9uLmVycm9yKFwiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkXCIpOihlfHwoaXw9MzIpLGl8PWMudGFnQ2xhc3NCeU5hbWVbcnx8XCJ1bml2ZXJzYWxcIl08PDYpfXZhciBmPXIoMikscz1yKDEpLkJ1ZmZlcix1PXIoMTA2KSxoPXUuYmFzZSxjPXUuY29uc3RhbnRzLmRlcjt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUodCxlKS5qb2luKCl9LGYoaSxoLk5vZGUpLGkucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9YSh0LGUscix0aGlzLnJlcG9ydGVyKTtpZihuLmxlbmd0aDwxMjgpe3ZhciBvPW5ldyBzKDIpO3JldHVybiBvWzBdPWksb1sxXT1uLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtvLG5dKX1mb3IodmFyIGY9MSx1PW4ubGVuZ3RoO3U+PTI1Njt1Pj49OClmKys7dmFyIG89bmV3IHMoMitmKTtvWzBdPWksb1sxXT0xMjh8Zjtmb3IodmFyIHU9MStmLGg9bi5sZW5ndGg7aD4wO3UtLSxoPj49OClvW3VdPTI1NSZoO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtvLG5dKX0saS5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbih0LGUpe2lmKFwiYml0c3RyXCI9PT1lKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfHQudW51c2VkLHQuZGF0YV0pO2lmKFwiYm1wc3RyXCI9PT1lKXtmb3IodmFyIHI9bmV3IHMoMip0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXIud3JpdGVVSW50MTZCRSh0LmNoYXJDb2RlQXQobiksMipuKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihyKX1yZXR1cm5cIm51bXN0clwiPT09ZT90aGlzLl9pc051bXN0cih0KT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZVwiKTpcInByaW50c3RyXCI9PT1lP3RoaXMuX2lzUHJpbnRzdHIodCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmtcIik6L3N0ciQvLnRlc3QoZSk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IFwiK2UrXCIgdW5zdXBwb3J0ZWRcIil9LGkucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbih0LGUscil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe2lmKCFlKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwic3RyaW5nIG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZFwiKTtpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwXCIpO3Q9ZVt0XS5zcGxpdCgvW1xcc1xcLl0rL2cpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt0PXQuc2xpY2UoKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0W25dfD0wfWlmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiBcIitKU09OLnN0cmluZ2lmeSh0KSk7aWYoIXIpe2lmKHRbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CXCIpO3Quc3BsaWNlKDAsMiw0MCp0WzBdK3RbMV0pfWZvcih2YXIgaT0wLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXTtmb3IoaSsrO28+PTEyODtvPj49NylpKyt9Zm9yKHZhciBhPW5ldyBzKGkpLGY9YS5sZW5ndGgtMSxuPXQubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBvPXRbbl07Zm9yKGFbZi0tXT0xMjcmbzsobz4+PTcpPjA7KWFbZi0tXT0xMjh8MTI3Jm99cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoYSl9LGkucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1uZXcgRGF0ZSh0KTtyZXR1cm5cImdlbnRpbWVcIj09PWU/cj1bbyhuLmdldEZ1bGxZZWFyKCkpLG8obi5nZXRVVENNb250aCgpKzEpLG8obi5nZXRVVENEYXRlKCkpLG8obi5nZXRVVENIb3VycygpKSxvKG4uZ2V0VVRDTWludXRlcygpKSxvKG4uZ2V0VVRDU2Vjb25kcygpKSxcIlpcIl0uam9pbihcIlwiKTpcInV0Y3RpbWVcIj09PWU/cj1bbyhuLmdldEZ1bGxZZWFyKCklMTAwKSxvKG4uZ2V0VVRDTW9udGgoKSsxKSxvKG4uZ2V0VVRDRGF0ZSgpKSxvKG4uZ2V0VVRDSG91cnMoKSksbyhuLmdldFVUQ01pbnV0ZXMoKSksbyhuLmdldFVUQ1NlY29uZHMoKSksXCJaXCJdLmpvaW4oXCJcIik6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIFwiK2UrXCIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKSx0aGlzLl9lbmNvZGVTdHIocixcIm9jdHN0clwiKX0saS5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihcIlwiKX0saS5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZighZSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXBcIik7aWYoIWUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogXCIrSlNPTi5zdHJpbmdpZnkodCkpO3Q9ZVt0XX1pZihcIm51bWJlclwiIT10eXBlb2YgdCYmIXMuaXNCdWZmZXIodCkpe3ZhciByPXQudG9BcnJheSgpOyF0LnNpZ24mJjEyOCZyWzBdJiZyLnVuc2hpZnQoMCksdD1uZXcgcyhyKX1pZihzLmlzQnVmZmVyKHQpKXt2YXIgbj10Lmxlbmd0aDswPT09dC5sZW5ndGgmJm4rKzt2YXIgaT1uZXcgcyhuKTtyZXR1cm4gdC5jb3B5KGkpLDA9PT10Lmxlbmd0aCYmKGlbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihpKX1pZih0PDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTtpZih0PDI1NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCx0XSk7Zm9yKHZhciBuPTEsbz10O28+PTI1NjtvPj49OCluKys7Zm9yKHZhciBpPW5ldyBBcnJheShuKSxvPWkubGVuZ3RoLTE7bz49MDtvLS0paVtvXT0yNTUmdCx0Pj49ODtyZXR1cm4gMTI4JmlbMF0mJmkudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBzKGkpKX0saS5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodD8yNTU6MCl9LGkucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodD10KGUpKSx0Ll9nZXRFbmNvZGVyKFwiZGVyXCIpLnRyZWV9LGkucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbih0LGUscil7dmFyIG4saT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PWkuZGVmYXVsdClyZXR1cm4hMTt2YXIgbz10LmpvaW4oKTtpZih2b2lkIDA9PT1pLmRlZmF1bHRCdWZmZXImJihpLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoaS5kZWZhdWx0LGUscikuam9pbigpKSxvLmxlbmd0aCE9PWkuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylpZihvW25dIT09aS5kZWZhdWx0QnVmZmVyW25dKXJldHVybiExO3JldHVybiEwfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixpLGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0LHIsaSk7YS5jYWxsKHRoaXMpLHRoaXMuX2ZpbklEPWUuY29uY2F0KFtpLG5ldyBlKFswLDAsMCwxXSldKSxpPWUuY29uY2F0KFtpLG5ldyBlKFswLDAsMCwyXSldKSx0aGlzLl9jaXBoZXI9bmV3IG8uQUVTKHIpLHRoaXMuX3ByZXY9bmV3IGUoaS5sZW5ndGgpLHRoaXMuX2NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX3NlY0NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX2RlY3J5cHQ9Zix0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAsaS5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9dDt2YXIgdT1uZXcgZSg0KTt1LmZpbGwoMCksdGhpcy5fZ2hhc2g9bmV3IHModGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh1KSksdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9MDt0Lmxlbmd0aCE9PWUubGVuZ3RoJiZyKys7Zm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxpPS0xOysraTxuOylyKz10W2ldXmVbaV07cmV0dXJuIHJ9dmFyIG89cigxMDcpLGE9cigxMDkpLGY9cigyKSxzPXIoNTkxKSx1PXIoNzIpO2YobixhKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciByPTE2LXRoaXMuX2FsZW4lMTY7cjwxNiYmKHI9bmV3IGUociksci5maWxsKDApLHRoaXMuX2doYXNoLnVwZGF0ZShyKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBuPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQpO3JldHVybiB0aGlzLl9kZWNyeXB0P3RoaXMuX2doYXNoLnVwZGF0ZSh0KTp0aGlzLl9naGFzaC51cGRhdGUobiksdGhpcy5fbGVuKz10Lmxlbmd0aCxufSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIik7dmFyIHQ9dSh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0KXtpZihpKHQsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhXCIpfWVsc2UgdGhpcy5fYXV0aFRhZz10O3RoaXMuX2NpcGhlci5zY3J1YigpfSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2RlY3J5cHQmJmUuaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpcmV0dXJuIHRoaXMuX2F1dGhUYWc7dGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIik7dGhpcy5fYXV0aFRhZz10fSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTt0aGlzLl9naGFzaC51cGRhdGUodCksdGhpcy5fYWxlbis9dC5sZW5ndGh9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gT2JqZWN0LmtleXMoYSl9dmFyIGk9cig1OTApO2UuY3JlYXRlQ2lwaGVyPWUuQ2lwaGVyPWkuY3JlYXRlQ2lwaGVyLGUuY3JlYXRlQ2lwaGVyaXY9ZS5DaXBoZXJpdj1pLmNyZWF0ZUNpcGhlcml2O3ZhciBvPXIoNTg5KTtlLmNyZWF0ZURlY2lwaGVyPWUuRGVjaXBoZXI9by5jcmVhdGVEZWNpcGhlcixlLmNyZWF0ZURlY2lwaGVyaXY9ZS5EZWNpcGhlcml2PW8uY3JlYXRlRGVjaXBoZXJpdjt2YXIgYT1yKDE1Mik7ZS5saXN0Q2lwaGVycz1lLmdldENpcGhlcnM9bn0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNzIpO2UuZW5jcnlwdD1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSx0Ll9wcmV2KTtyZXR1cm4gdC5fcHJldj10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHIpLHQuX3ByZXZ9LGUuZGVjcnlwdD1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByZXY7dC5fcHJldj1lO3ZhciBpPXQuX2NpcGhlci5kZWNyeXB0QmxvY2soZSk7cmV0dXJuIG4oaSxyKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbil7dmFyIG89ci5sZW5ndGgsYT1pKHIsZS5fY2FjaGUpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShvKSxlLl9wcmV2PXQuY29uY2F0KFtlLl9wcmV2LG4/cjphXSksYX12YXIgaT1yKDcyKTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyLGkpe2Zvcih2YXIgbyxhPW5ldyB0KFwiXCIpO3IubGVuZ3RoOyl7aWYoMD09PWUuX2NhY2hlLmxlbmd0aCYmKGUuX2NhY2hlPWUuX2NpcGhlci5lbmNyeXB0QmxvY2soZS5fcHJldiksZS5fcHJldj1uZXcgdChcIlwiKSksIShlLl9jYWNoZS5sZW5ndGg8PXIubGVuZ3RoKSl7YT10LmNvbmNhdChbYSxuKGUscixpKV0pO2JyZWFrfW89ZS5fY2FjaGUubGVuZ3RoLGE9dC5jb25jYXQoW2EsbihlLHIuc2xpY2UoMCxvKSxpKV0pLHI9ci5zbGljZShvKX1yZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCxlLHIpe2Zvcih2YXIgaSxvLGEsZj0tMSxzPTgsdT0wOysrZjxzOylpPXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldiksbz1lJjE8PDctZj8xMjg6MCxhPWlbMF1ebyx1Kz0oMTI4JmEpPj5mJTgsdC5fcHJldj1uKHQuX3ByZXYscj9vOmEpO3JldHVybiB1fWZ1bmN0aW9uIG4oZSxyKXt2YXIgbj1lLmxlbmd0aCxpPS0xLG89bmV3IHQoZS5sZW5ndGgpO2ZvcihlPXQuY29uY2F0KFtlLG5ldyB0KFtyXSldKTsrK2k8bjspb1tpXT1lW2ldPDwxfGVbaSsxXT4+NztyZXR1cm4gb31lLmVuY3J5cHQ9ZnVuY3Rpb24oZSxuLGkpe2Zvcih2YXIgbz1uLmxlbmd0aCxhPW5ldyB0KG8pLGY9LTE7KytmPG87KWFbZl09cihlLG5bZl0saSk7cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKGUscixuKXt2YXIgaT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLG89aVswXV5yO3JldHVybiBlLl9wcmV2PXQuY29uY2F0KFtlLl9wcmV2LnNsaWNlKDEpLG5ldyB0KFtuP3I6b10pXSksb31lLmVuY3J5cHQ9ZnVuY3Rpb24oZSxuLGkpe2Zvcih2YXIgbz1uLmxlbmd0aCxhPW5ldyB0KG8pLGY9LTE7KytmPG87KWFbZl09cihlLG5bZl0saSk7cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fY2lwaGVyLmVuY3J5cHRCbG9jayhlKX0sZS5kZWNyeXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NpcGhlci5kZWNyeXB0QmxvY2soZSl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQuX3ByZXY9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KSx0Ll9wcmV2fXZhciBpPXIoNzIpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIpe2Zvcig7ZS5fY2FjaGUubGVuZ3RoPHIubGVuZ3RoOyllLl9jYWNoZT10LmNvbmNhdChbZS5fY2FjaGUsbihlKV0pO3ZhciBvPWUuX2NhY2hlLnNsaWNlKDAsci5sZW5ndGgpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShyLmxlbmd0aCksaShyLG8pfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsYSxmKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KG8uY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IGkuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IGUoYS5sZW5ndGgpLHRoaXMuX2NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX3NlY0NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX2RlY3J5cHQ9ZixhLmNvcHkodGhpcy5fcHJldiksdm9pZCh0aGlzLl9tb2RlPXQpKTpuZXcgbih0LHIsYSl9dmFyIGk9cigxMDcpLG89cigxMDkpLGE9cigyKTthKG4sbyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCx0aGlzLl9kZWNyeXB0KX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscil7cmV0dXJuIG5ldyBlKHQudG9SZWQoaS5tb250KHIubW9kdWx1cykpLnJlZFBvdyhuZXcgaShyLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLnRvQXJyYXkoKSl9dmFyIGk9cig3MCk7dC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPS0xOysrbjxyOyl0W25dXj1lW25dO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuP3ZvaWQgaS5jYWxsKHRoaXMsdCk6bmV3IG4odCl9dC5leHBvcnRzPW47dmFyIGk9cigxNTQpLG89cig3Myk7by5pbmhlcml0cz1yKDc0KSxvLmluaGVyaXRzKG4saSksbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7cihudWxsLHQpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnByZXBlbmRMaXN0ZW5lcj90LnByZXBlbmRMaXN0ZW5lcihlLHIpOnZvaWQodC5fZXZlbnRzJiZ0Ll9ldmVudHNbZV0/Tyh0Ll9ldmVudHNbZV0pP3QuX2V2ZW50c1tlXS51bnNoaWZ0KHIpOnQuX2V2ZW50c1tlXT1bcix0Ll9ldmVudHNbZV1dOnQub24oZSxyKSl9ZnVuY3Rpb24gaSh0LGUpe0Q9RHx8cig1MSksdD10fHx7fSx0aGlzLm9iamVjdE1vZGU9ISF0Lm9iamVjdE1vZGUsZSBpbnN0YW5jZW9mIEQmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXQucmVhZGFibGVPYmplY3RNb2RlKTt2YXIgbj10LmhpZ2hXYXRlck1hcmssaT10aGlzLm9iamVjdE1vZGU/MTY6MTYzODQ7dGhpcy5oaWdoV2F0ZXJNYXJrPW58fDA9PT1uP246aSx0aGlzLmhpZ2hXYXRlck1hcms9fn50aGlzLmhpZ2hXYXRlck1hcmssdGhpcy5idWZmZXI9bmV3IHosdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPXQuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLnJhbk91dD0hMSx0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCx0LmVuY29kaW5nJiYoVXx8KFU9cig1MikuU3RyaW5nRGVjb2RlciksdGhpcy5kZWNvZGVyPW5ldyBVKHQuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gRD1EfHxyKDUxKSx0aGlzIGluc3RhbmNlb2Ygbz8odGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgaSh0LHRoaXMpLHRoaXMucmVhZGFibGU9ITAsdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWFkJiYodGhpcy5fcmVhZD10LnJlYWQpLHZvaWQgUi5jYWxsKHRoaXMpKTpuZXcgbyh0KX1mdW5jdGlvbiBhKHQsZSxyLG4saSl7dmFyIG89aChlLHIpO2lmKG8pdC5lbWl0KFwiZXJyb3JcIixvKTtlbHNlIGlmKG51bGw9PT1yKWUucmVhZGluZz0hMSxjKHQsZSk7ZWxzZSBpZihlLm9iamVjdE1vZGV8fHImJnIubGVuZ3RoPjApaWYoZS5lbmRlZCYmIWkpe3ZhciBhPW5ldyBFcnJvcihcInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GXCIpO3QuZW1pdChcImVycm9yXCIsYSl9ZWxzZSBpZihlLmVuZEVtaXR0ZWQmJmkpe3ZhciBzPW5ldyBFcnJvcihcInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50XCIpO3QuZW1pdChcImVycm9yXCIscyl9ZWxzZXt2YXIgdTshZS5kZWNvZGVyfHxpfHxufHwocj1lLmRlY29kZXIud3JpdGUociksdT0hZS5vYmplY3RNb2RlJiYwPT09ci5sZW5ndGgpLGl8fChlLnJlYWRpbmc9ITEpLHV8fChlLmZsb3dpbmcmJjA9PT1lLmxlbmd0aCYmIWUuc3luYz8odC5lbWl0KFwiZGF0YVwiLHIpLHQucmVhZCgwKSk6KGUubGVuZ3RoKz1lLm9iamVjdE1vZGU/MTpyLmxlbmd0aCxpP2UuYnVmZmVyLnVuc2hpZnQocik6ZS5idWZmZXIucHVzaChyKSxlLm5lZWRSZWFkYWJsZSYmZCh0KSkpLHAodCxlKX1lbHNlIGl8fChlLnJlYWRpbmc9ITEpO3JldHVybiBmKGUpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIXQuZW5kZWQmJih0Lm5lZWRSZWFkYWJsZXx8dC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrfHwwPT09dC5sZW5ndGgpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQ+PXE/dD1xOih0LS0sdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsdHw9dD4+PjE2LHQrKyksdH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQ8PTB8fDA9PT1lLmxlbmd0aCYmZS5lbmRlZD8wOmUub2JqZWN0TW9kZT8xOnQhPT10P2UuZmxvd2luZyYmZS5sZW5ndGg/ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDplLmxlbmd0aDoodD5lLmhpZ2hXYXRlck1hcmsmJihlLmhpZ2hXYXRlck1hcms9cyh0KSksdDw9ZS5sZW5ndGg/dDplLmVuZGVkP2UubGVuZ3RoOihlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPW51bGw7cmV0dXJuIFQuaXNCdWZmZXIoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxudWxsPT09ZXx8dm9pZCAwPT09ZXx8dC5vYmplY3RNb2RlfHwocj1uZXcgVHlwZUVycm9yKFwiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVua1wiKSkscn1mdW5jdGlvbiBjKHQsZSl7aWYoIWUuZW5kZWQpe2lmKGUuZGVjb2Rlcil7dmFyIHI9ZS5kZWNvZGVyLmVuZCgpO3ImJnIubGVuZ3RoJiYoZS5idWZmZXIucHVzaChyKSxlLmxlbmd0aCs9ZS5vYmplY3RNb2RlPzE6ci5sZW5ndGgpfWUuZW5kZWQ9ITAsZCh0KX19ZnVuY3Rpb24gZCh0KXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2UubmVlZFJlYWRhYmxlPSExLGUuZW1pdHRlZFJlYWRhYmxlfHwoTChcImVtaXRSZWFkYWJsZVwiLGUuZmxvd2luZyksZS5lbWl0dGVkUmVhZGFibGU9ITAsZS5zeW5jP0IobCx0KTpsKHQpKX1mdW5jdGlvbiBsKHQpe0woXCJlbWl0IHJlYWRhYmxlXCIpLHQuZW1pdChcInJlYWRhYmxlXCIpLHcodCl9ZnVuY3Rpb24gcCh0LGUpe2UucmVhZGluZ01vcmV8fChlLnJlYWRpbmdNb3JlPSEwLEIoYix0LGUpKX1mdW5jdGlvbiBiKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoOyFlLnJlYWRpbmcmJiFlLmZsb3dpbmcmJiFlLmVuZGVkJiZlLmxlbmd0aDxlLmhpZ2hXYXRlck1hcmsmJihMKFwibWF5YmVSZWFkTW9yZSByZWFkIDBcIiksdC5yZWFkKDApLHIhPT1lLmxlbmd0aCk7KXI9ZS5sZW5ndGg7ZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiB2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7TChcInBpcGVPbkRyYWluXCIsZS5hd2FpdERyYWluKSxlLmF3YWl0RHJhaW4mJmUuYXdhaXREcmFpbi0tLDA9PT1lLmF3YWl0RHJhaW4mJlAodCxcImRhdGFcIikmJihlLmZsb3dpbmc9ITAsdyh0KSl9fWZ1bmN0aW9uIHkodCl7TChcInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMFwiKSx0LnJlYWQoMCl9ZnVuY3Rpb24gbSh0LGUpe2UucmVzdW1lU2NoZWR1bGVkfHwoZS5yZXN1bWVTY2hlZHVsZWQ9ITAsQihnLHQsZSkpfWZ1bmN0aW9uIGcodCxlKXtlLnJlYWRpbmd8fChMKFwicmVzdW1lIHJlYWQgMFwiKSx0LnJlYWQoMCkpLGUucmVzdW1lU2NoZWR1bGVkPSExLGUuYXdhaXREcmFpbj0wLHQuZW1pdChcInJlc3VtZVwiKSx3KHQpLGUuZmxvd2luZyYmIWUucmVhZGluZyYmdC5yZWFkKDApfWZ1bmN0aW9uIHcodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtmb3IoTChcImZsb3dcIixlLmZsb3dpbmcpO2UuZmxvd2luZyYmbnVsbCE9PXQucmVhZCgpOyk7fWZ1bmN0aW9uIF8odCxlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI7cmV0dXJuIGUub2JqZWN0TW9kZT9yPWUuYnVmZmVyLnNoaWZ0KCk6IXR8fHQ+PWUubGVuZ3RoPyhyPWUuZGVjb2Rlcj9lLmJ1ZmZlci5qb2luKFwiXCIpOjE9PT1lLmJ1ZmZlci5sZW5ndGg/ZS5idWZmZXIuaGVhZC5kYXRhOmUuYnVmZmVyLmNvbmNhdChlLmxlbmd0aCksZS5idWZmZXIuY2xlYXIoKSk6cj1NKHQsZS5idWZmZXIsZS5kZWNvZGVyKSxyfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuO3JldHVybiB0PGUuaGVhZC5kYXRhLmxlbmd0aD8obj1lLmhlYWQuZGF0YS5zbGljZSgwLHQpLGUuaGVhZC5kYXRhPWUuaGVhZC5kYXRhLnNsaWNlKHQpKTpuPXQ9PT1lLmhlYWQuZGF0YS5sZW5ndGg/ZS5zaGlmdCgpOnI/Uyh0LGUpOkUodCxlKSxufWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLmhlYWQsbj0xLGk9ci5kYXRhO2Zvcih0LT1pLmxlbmd0aDtyPXIubmV4dDspe3ZhciBvPXIuZGF0YSxhPXQ+by5sZW5ndGg/by5sZW5ndGg6dDtpZihpKz1hPT09by5sZW5ndGg/bzpvLnNsaWNlKDAsdCksdC09YSwwPT09dCl7YT09PW8ubGVuZ3RoPygrK24sci5uZXh0P2UuaGVhZD1yLm5leHQ6ZS5oZWFkPWUudGFpbD1udWxsKTooZS5oZWFkPXIsci5kYXRhPW8uc2xpY2UoYSkpO2JyZWFrfSsrbn1yZXR1cm4gZS5sZW5ndGgtPW4saX1mdW5jdGlvbiBFKHQsZSl7dmFyIHI9ai5hbGxvY1Vuc2FmZSh0KSxuPWUuaGVhZCxpPTE7Zm9yKG4uZGF0YS5jb3B5KHIpLHQtPW4uZGF0YS5sZW5ndGg7bj1uLm5leHQ7KXt2YXIgbz1uLmRhdGEsYT10Pm8ubGVuZ3RoP28ubGVuZ3RoOnQ7aWYoby5jb3B5KHIsci5sZW5ndGgtdCwwLGEpLHQtPWEsMD09PXQpe2E9PT1vLmxlbmd0aD8oKytpLG4ubmV4dD9lLmhlYWQ9bi5uZXh0OmUuaGVhZD1lLnRhaWw9bnVsbCk6KGUuaGVhZD1uLG4uZGF0YT1vLnNsaWNlKGEpKTticmVha30rK2l9cmV0dXJuIGUubGVuZ3RoLT1pLHJ9ZnVuY3Rpb24gQSh0KXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2lmKGUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCdcImVuZFJlYWRhYmxlKClcIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO2UuZW5kRW1pdHRlZHx8KGUuZW5kZWQ9ITAsQihrLGUsdCkpfWZ1bmN0aW9uIGsodCxlKXt0LmVuZEVtaXR0ZWR8fDAhPT10Lmxlbmd0aHx8KHQuZW5kRW1pdHRlZD0hMCxlLnJlYWRhYmxlPSExLGUuZW1pdChcImVuZFwiKSl9ZnVuY3Rpb24geCh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyllKHRbcl0scil9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuO3IrKylpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX10LmV4cG9ydHM9bzt2YXIgQj1yKDE1NyksTz1yKDU5Nyk7by5SZWFkYWJsZVN0YXRlPWk7dmFyIFIsUD0ocigxMTApLkV2ZW50RW1pdHRlcixmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxpc3RlbmVycyhlKS5sZW5ndGh9KTshZnVuY3Rpb24oKXt0cnl7Uj1yKDMxKX1jYXRjaCh0KXt9ZmluYWxseXtSfHwoUj1yKDExMCkuRXZlbnRFbWl0dGVyKX19KCk7dmFyIFQ9cigxKS5CdWZmZXIsaj1yKDE1NiksQz1yKDczKTtDLmluaGVyaXRzPXIoNzQpO3ZhciBOPXIoNjEyKSxMPXZvaWQgMDtMPU4mJk4uZGVidWdsb2c/Ti5kZWJ1Z2xvZyhcInN0cmVhbVwiKTpmdW5jdGlvbigpe307dmFyIFUsej1yKDU5Nik7Qy5pbmhlcml0cyhvLFIpO3ZhciBELEQ7by5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHIub2JqZWN0TW9kZXx8XCJzdHJpbmdcIiE9dHlwZW9mIHR8fChlPWV8fHIuZGVmYXVsdEVuY29kaW5nLGUhPT1yLmVuY29kaW5nJiYodD1qLmZyb20odCxlKSxlPVwiXCIpKSxhKHRoaXMscix0LGUsITEpfSxvLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIGEodGhpcyxlLHQsXCJcIiwhMCl9LG8ucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz09PSExfSxvLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gVXx8KFU9cig1MikuU3RyaW5nRGVjb2RlciksdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPW5ldyBVKHQpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dCx0aGlzfTt2YXIgcT04Mzg4NjA4O28ucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24odCl7TChcInJlYWRcIix0KSx0PXBhcnNlSW50KHQsMTApO3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGUscj10O2lmKDAhPT10JiYoZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT10JiZlLm5lZWRSZWFkYWJsZSYmKGUubGVuZ3RoPj1lLmhpZ2hXYXRlck1hcmt8fGUuZW5kZWQpKXJldHVybiBMKFwicmVhZDogZW1pdFJlYWRhYmxlXCIsZS5sZW5ndGgsZS5lbmRlZCksMD09PWUubGVuZ3RoJiZlLmVuZGVkP0EodGhpcyk6ZCh0aGlzKSxudWxsO2lmKHQ9dSh0LGUpLDA9PT10JiZlLmVuZGVkKXJldHVybiAwPT09ZS5sZW5ndGgmJkEodGhpcyksbnVsbDt2YXIgbj1lLm5lZWRSZWFkYWJsZTtMKFwibmVlZCByZWFkYWJsZVwiLG4pLCgwPT09ZS5sZW5ndGh8fGUubGVuZ3RoLXQ8ZS5oaWdoV2F0ZXJNYXJrKSYmKG49ITAsTChcImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrXCIsbikpLGUuZW5kZWR8fGUucmVhZGluZz8obj0hMSxMKFwicmVhZGluZyBvciBlbmRlZFwiLG4pKTpuJiYoTChcImRvIHJlYWRcIiksZS5yZWFkaW5nPSEwLGUuc3luYz0hMCwwPT09ZS5sZW5ndGgmJihlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChlLmhpZ2hXYXRlck1hcmspLGUuc3luYz0hMSxlLnJlYWRpbmd8fCh0PXUocixlKSkpO3ZhciBpO3JldHVybiBpPXQ+MD9fKHQsZSk6bnVsbCxudWxsPT09aT8oZS5uZWVkUmVhZGFibGU9ITAsdD0wKTplLmxlbmd0aC09dCwwPT09ZS5sZW5ndGgmJihlLmVuZGVkfHwoZS5uZWVkUmVhZGFibGU9ITApLHIhPT10JiZlLmVuZGVkJiZBKHRoaXMpKSxudWxsIT09aSYmdGhpcy5lbWl0KFwiZGF0YVwiLGkpLGl9LG8ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHQpe3RoaXMuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpKX0sby5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIGkodCl7TChcIm9udW5waXBlXCIpLHQ9PT1kJiZhKCl9ZnVuY3Rpb24gbygpe0woXCJvbmVuZFwiKSx0LmVuZCgpfWZ1bmN0aW9uIGEoKXtMKFwiY2xlYW51cFwiKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIix1KSx0LnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsaCksdC5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIseSksdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIscyksdC5yZW1vdmVMaXN0ZW5lcihcInVucGlwZVwiLGkpLGQucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixvKSxkLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsYSksZC5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIixmKSxtPSEwLCFsLmF3YWl0RHJhaW58fHQuX3dyaXRhYmxlU3RhdGUmJiF0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8eSgpfWZ1bmN0aW9uIGYoZSl7TChcIm9uZGF0YVwiKSxnPSExO3ZhciByPXQud3JpdGUoZSk7ITEhPT1yfHxnfHwoKDE9PT1sLnBpcGVzQ291bnQmJmwucGlwZXM9PT10fHxsLnBpcGVzQ291bnQ+MSYmSShsLnBpcGVzLHQpIT09LTEpJiYhbSYmKEwoXCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2VcIixkLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4pLGQuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbisrLGc9ITApLGQucGF1c2UoKSl9ZnVuY3Rpb24gcyhlKXtMKFwib25lcnJvclwiLGUpLGMoKSx0LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixzKSwwPT09UCh0LFwiZXJyb3JcIikmJnQuZW1pdChcImVycm9yXCIsZSl9ZnVuY3Rpb24gdSgpe3QucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixoKSxjKCl9ZnVuY3Rpb24gaCgpe0woXCJvbmZpbmlzaFwiKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIix1KSxjKCl9ZnVuY3Rpb24gYygpe0woXCJ1bnBpcGVcIiksZC51bnBpcGUodCl9dmFyIGQ9dGhpcyxsPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKGwucGlwZXNDb3VudCl7Y2FzZSAwOmwucGlwZXM9dDticmVhaztjYXNlIDE6bC5waXBlcz1bbC5waXBlcyx0XTticmVhaztkZWZhdWx0OmwucGlwZXMucHVzaCh0KX1sLnBpcGVzQ291bnQrPTEsTChcInBpcGUgY291bnQ9JWQgb3B0cz0lalwiLGwucGlwZXNDb3VudCxyKTt2YXIgcD0oIXJ8fHIuZW5kIT09ITEpJiZ0IT09ZS5zdGRvdXQmJnQhPT1lLnN0ZGVycixiPXA/bzphO2wuZW5kRW1pdHRlZD9CKGIpOmQub25jZShcImVuZFwiLGIpLHQub24oXCJ1bnBpcGVcIixpKTt2YXIgeT12KGQpO3Qub24oXCJkcmFpblwiLHkpO3ZhciBtPSExLGc9ITE7cmV0dXJuIGQub24oXCJkYXRhXCIsZiksbih0LFwiZXJyb3JcIixzKSx0Lm9uY2UoXCJjbG9zZVwiLHUpLHQub25jZShcImZpbmlzaFwiLGgpLHQuZW1pdChcInBpcGVcIixkKSxsLmZsb3dpbmd8fChMKFwicGlwZSByZXN1bWVcIiksZC5yZXN1bWUoKSksdH0sby5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGU7aWYoMD09PWUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09ZS5waXBlc0NvdW50KXJldHVybiB0JiZ0IT09ZS5waXBlcz90aGlzOih0fHwodD1lLnBpcGVzKSxlLnBpcGVzPW51bGwsZS5waXBlc0NvdW50PTAsZS5mbG93aW5nPSExLHQmJnQuZW1pdChcInVucGlwZVwiLHRoaXMpLHRoaXMpO2lmKCF0KXt2YXIgcj1lLnBpcGVzLG49ZS5waXBlc0NvdW50O2UucGlwZXM9bnVsbCxlLnBpcGVzQ291bnQ9MCxlLmZsb3dpbmc9ITE7Zm9yKHZhciBpPTA7aTxuO2krKylyW2ldLmVtaXQoXCJ1bnBpcGVcIix0aGlzKTtyZXR1cm4gdGhpc312YXIgbz1JKGUucGlwZXMsdCk7cmV0dXJuIG89PT0tMT90aGlzOihlLnBpcGVzLnNwbGljZShvLDEpLGUucGlwZXNDb3VudC09MSwxPT09ZS5waXBlc0NvdW50JiYoZS5waXBlcz1lLnBpcGVzWzBdKSx0LmVtaXQoXCJ1bnBpcGVcIix0aGlzKSx0aGlzKX0sby5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgcj1SLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTtpZihcImRhdGFcIj09PXQpdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nIT09ITEmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZihcInJlYWRhYmxlXCI9PT10KXt2YXIgbj10aGlzLl9yZWFkYWJsZVN0YXRlO24uZW5kRW1pdHRlZHx8bi5yZWFkYWJsZUxpc3RlbmluZ3x8KG4ucmVhZGFibGVMaXN0ZW5pbmc9bi5uZWVkUmVhZGFibGU9ITAsbi5lbWl0dGVkUmVhZGFibGU9ITEsbi5yZWFkaW5nP24ubGVuZ3RoJiZkKHRoaXMsbik6Qih5LHRoaXMpKX1yZXR1cm4gcn0sby5wcm90b3R5cGUuYWRkTGlzdGVuZXI9by5wcm90b3R5cGUub24sby5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gdC5mbG93aW5nfHwoTChcInJlc3VtZVwiKSx0LmZsb3dpbmc9ITAsbSh0aGlzLHQpKSx0aGlzfSxvLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBMKFwiY2FsbCBwYXVzZSBmbG93aW5nPSVqXCIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKEwoXCJwYXVzZVwiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KFwicGF1c2VcIikpLHRoaXN9LG8ucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPSExLG49dGhpczt0Lm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtpZihMKFwid3JhcHBlZCBlbmRcIiksZS5kZWNvZGVyJiYhZS5lbmRlZCl7dmFyIHQ9ZS5kZWNvZGVyLmVuZCgpO3QmJnQubGVuZ3RoJiZuLnB1c2godCl9bi5wdXNoKG51bGwpfSksdC5vbihcImRhdGFcIixmdW5jdGlvbihpKXtpZihMKFwid3JhcHBlZCBkYXRhXCIpLGUuZGVjb2RlciYmKGk9ZS5kZWNvZGVyLndyaXRlKGkpKSwoIWUub2JqZWN0TW9kZXx8bnVsbCE9PWkmJnZvaWQgMCE9PWkpJiYoZS5vYmplY3RNb2RlfHxpJiZpLmxlbmd0aCkpe3ZhciBvPW4ucHVzaChpKTtvfHwocj0hMCx0LnBhdXNlKCkpfX0pO2Zvcih2YXIgaSBpbiB0KXZvaWQgMD09PXRoaXNbaV0mJlwiZnVuY3Rpb25cIj09dHlwZW9mIHRbaV0mJih0aGlzW2ldPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0W2VdLmFwcGx5KHQsYXJndW1lbnRzKX19KGkpKTt2YXIgbz1bXCJlcnJvclwiLFwiY2xvc2VcIixcImRlc3Ryb3lcIixcInBhdXNlXCIsXCJyZXN1bWVcIl07cmV0dXJuIHgobyxmdW5jdGlvbihlKXt0Lm9uKGUsbi5lbWl0LmJpbmQobixlKSl9KSxuLl9yZWFkPWZ1bmN0aW9uKGUpe0woXCJ3cmFwcGVkIF9yZWFkXCIsZSksciYmKHI9ITEsdC5yZXN1bWUoKSl9LG59LG8uX2Zyb21MaXN0PV99KS5jYWxsKGUscigyNikpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXtmdW5jdGlvbiBDb250ZXh0KCl7fXZhciBpbmRleE9mPV9fd2VicGFja19yZXF1aXJlX18oNjA3KSxPYmplY3Rfa2V5cz1mdW5jdGlvbih0KXtpZihPYmplY3Qua2V5cylyZXR1cm4gT2JqZWN0LmtleXModCk7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSxmb3JFYWNoPWZ1bmN0aW9uKHQsZSl7aWYodC5mb3JFYWNoKXJldHVybiB0LmZvckVhY2goZSk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZSh0W3JdLHIsdCl9LGRlZmluZVByb3A9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcIl9cIix7fSksZnVuY3Rpb24odCxlLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3dyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsXG5jb25maWd1cmFibGU6ITAsdmFsdWU6cn0pfX1jYXRjaCh0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3RbZV09cn19fSgpLGdsb2JhbHM9W1wiQXJyYXlcIixcIkJvb2xlYW5cIixcIkRhdGVcIixcIkVycm9yXCIsXCJFdmFsRXJyb3JcIixcIkZ1bmN0aW9uXCIsXCJJbmZpbml0eVwiLFwiSlNPTlwiLFwiTWF0aFwiLFwiTmFOXCIsXCJOdW1iZXJcIixcIk9iamVjdFwiLFwiUmFuZ2VFcnJvclwiLFwiUmVmZXJlbmNlRXJyb3JcIixcIlJlZ0V4cFwiLFwiU3RyaW5nXCIsXCJTeW50YXhFcnJvclwiLFwiVHlwZUVycm9yXCIsXCJVUklFcnJvclwiLFwiZGVjb2RlVVJJXCIsXCJkZWNvZGVVUklDb21wb25lbnRcIixcImVuY29kZVVSSVwiLFwiZW5jb2RlVVJJQ29tcG9uZW50XCIsXCJlc2NhcGVcIixcImV2YWxcIixcImlzRmluaXRlXCIsXCJpc05hTlwiLFwicGFyc2VGbG9hdFwiLFwicGFyc2VJbnRcIixcInVuZGVmaW5lZFwiLFwidW5lc2NhcGVcIl07Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFNjcmlwdD92b2lkKHRoaXMuY29kZT10KTpuZXcgU2NyaXB0KHQpfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlvbih0KXtpZighKHQgaW5zdGFuY2VvZiBDb250ZXh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwibmVlZHMgYSAnY29udGV4dCcgYXJndW1lbnQuXCIpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7ZS5zdHlsZXx8KGUuc3R5bGU9e30pLGUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO3ZhciByPWUuY29udGVudFdpbmRvdyxuPXIuZXZhbCxpPXIuZXhlY1NjcmlwdDshbiYmaSYmKGkuY2FsbChyLFwibnVsbFwiKSxuPXIuZXZhbCksZm9yRWFjaChPYmplY3Rfa2V5cyh0KSxmdW5jdGlvbihlKXtyW2VdPXRbZV19KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24oZSl7dFtlXSYmKHJbZV09dFtlXSl9KTt2YXIgbz1PYmplY3Rfa2V5cyhyKSxhPW4uY2FsbChyLHRoaXMuY29kZSk7cmV0dXJuIGZvckVhY2goT2JqZWN0X2tleXMociksZnVuY3Rpb24oZSl7KGUgaW4gdHx8aW5kZXhPZihvLGUpPT09LTEpJiYodFtlXT1yW2VdKX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbihlKXtlIGluIHR8fGRlZmluZVByb3AodCxlLHJbZV0pfSksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlKSxhfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluVGhpc0NvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZXZhbCh0aGlzLmNvZGUpfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluTmV3Q29udGV4dD1mdW5jdGlvbih0KXt2YXIgZT1TY3JpcHQuY3JlYXRlQ29udGV4dCh0KSxyPXRoaXMucnVuSW5Db250ZXh0KGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKGUpLGZ1bmN0aW9uKHIpe3Rbcl09ZVtyXX0pLHJ9LGZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksZnVuY3Rpb24odCl7ZXhwb3J0c1t0XT1TY3JpcHRbdF09ZnVuY3Rpb24oZSl7dmFyIHI9U2NyaXB0KGUpO3JldHVybiByW3RdLmFwcGx5KHIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfX0pLGV4cG9ydHMuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBleHBvcnRzLlNjcmlwdCh0KX0sZXhwb3J0cy5jcmVhdGVDb250ZXh0PVNjcmlwdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBDb250ZXh0O3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZmb3JFYWNoKE9iamVjdF9rZXlzKHQpLGZ1bmN0aW9uKHIpe2Vbcl09dFtyXX0pLGV9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe3ZhciBuPXIoNzUpLGk9cig2Myksbz1yKDExNSksYT1yKDI2NCksZj1yKDI2Mykscz1yKDI2NiksdT1yKDI2NSksaD1yKDI2MiksYz1yKDExNiksZD1uZXcgZSgwKSxsPWZ1bmN0aW9uKHQpe3ZhciBlPW4uZnJvbVVyaSh0KTtyZXR1cm4gZS52YWxpZGF0ZSgpfSxwPWZ1bmN0aW9uKHQscixuKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgbiYmKG49ZCksIWUuaXNCdWZmZXIobikpdGhyb3cgbmV3IEVycm9yKFwiTWVzc2FnZSBtdXN0IGJlIHByb3ZpZGVkIGFzIGEgQnVmZmVyXCIpO3ZhciBvPWkuZnJvbVVyaSh0KSxhPW8uZ2V0Q29uZGl0aW9uVXJpKCk7aWYoYSE9PXIpdGhyb3cgbmV3IEVycm9yKFwiRnVsZmlsbG1lbnQgZG9lcyBub3QgbWF0Y2ggY29uZGl0aW9uIChleHBlY3RlZDogXCIrcitcIiwgYWN0dWFsOiBcIithK1wiKVwiKTtyZXR1cm4gby52YWxpZGF0ZShuKX0sYj1mdW5jdGlvbih0KXt2YXIgZT1pLmZyb21VcmkodCk7cmV0dXJuIGUuZ2V0Q29uZGl0aW9uVXJpKCl9O28ucmVnaXN0ZXJUeXBlKGEpLG8ucmVnaXN0ZXJUeXBlKGYpLG8ucmVnaXN0ZXJUeXBlKHMpLG8ucmVnaXN0ZXJUeXBlKHUpLG8ucmVnaXN0ZXJUeXBlKGgpLHQuZXhwb3J0cz17Q29uZGl0aW9uOm4sRnVsZmlsbG1lbnQ6aSxUeXBlUmVnaXN0cnk6byxQcmVpbWFnZVNoYTI1NjphLFJzYVNoYTI1Njp1LFByZWZpeFNoYTI1NjpmLFRocmVzaG9sZFNoYTI1NjpzLEVkMjU1MTk6aCx2YWxpZGF0ZUNvbmRpdGlvbjpsLHZhbGlkYXRlRnVsZmlsbG1lbnQ6cCxmdWxmaWxsbWVudFRvQ29uZGl0aW9uOmIsYmFzZTY0dXJsOmMsZnJvbUNvbmRpdGlvblVyaTpuLmZyb21VcmkuYmluZChuKSxmcm9tQ29uZGl0aW9uQmluYXJ5Om4uZnJvbUJpbmFyeS5iaW5kKG4pLGZyb21GdWxmaWxsbWVudFVyaTppLmZyb21VcmkuYmluZChpKSxmcm9tRnVsZmlsbG1lbnRCaW5hcnk6aS5mcm9tQmluYXJ5LmJpbmQoaSl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxyKXt0W2VdfHxPYmplY3Rbbl0odCxlLHt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsdmFsdWU6cn0pfWlmKHIoNDYxKSxyKDI2OCkscigyNjkpLHQuX2JhYmVsUG9seWZpbGwpdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgaW5zdGFuY2Ugb2YgYmFiZWwtcG9seWZpbGwgaXMgYWxsb3dlZFwiKTt0Ll9iYWJlbFBvbHlmaWxsPSEwO3ZhciBuPVwiZGVmaW5lUHJvcGVydHlcIjtlKFN0cmluZy5wcm90b3R5cGUsXCJwYWRMZWZ0XCIsXCJcIi5wYWRTdGFydCksZShTdHJpbmcucHJvdG90eXBlLFwicGFkUmlnaHRcIixcIlwiLnBhZEVuZCksXCJwb3AscmV2ZXJzZSxzaGlmdCxrZXlzLHZhbHVlcyxlbnRyaWVzLGluZGV4T2YsZXZlcnksc29tZSxmb3JFYWNoLG1hcCxmaWx0ZXIsZmluZCxmaW5kSW5kZXgsaW5jbHVkZXMsam9pbixzbGljZSxjb25jYXQscHVzaCxzcGxpY2UsdW5zaGlmdCxzb3J0LGxhc3RJbmRleE9mLHJlZHVjZSxyZWR1Y2VSaWdodCxjb3B5V2l0aGluLGZpbGxcIi5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbih0KXtbXVt0XSYmZShBcnJheSx0LEZ1bmN0aW9uLmNhbGwuYmluZChbXVt0XSkpfSl9KS5jYWxsKGUscigzOSkpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMTEpLGk9cigxMTIpLG89cigyNTUpLGE9cigyNTYpO3QuZXhwb3J0cz17UmVhZGVyOm8sV3JpdGVyOmF9O2Zvcih2YXIgZiBpbiBpKWkuaGFzT3duUHJvcGVydHkoZikmJih0LmV4cG9ydHNbZl09aVtmXSk7Zm9yKHZhciBzIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShzKSYmKHQuZXhwb3J0c1tzXT1uW3NdKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2lmKCF0fHwhZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGF0YSBtdXN0IGJlIGEgbm9kZSBCdWZmZXJcIik7dGhpcy5fYnVmPXQsdGhpcy5fc2l6ZT10Lmxlbmd0aCx0aGlzLl9sZW49MCx0aGlzLl9vZmZzZXQ9MH12YXIgaT1yKDIwMiksbz1yKDExMiksYT1yKDExMSksZj1hLm5ld0ludmFsaWRBc24xRXJyb3I7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwibGVuZ3RoXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xlbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJvZmZzZXRcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcInJlbWFpblwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZS10aGlzLl9vZmZzZXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiYnVmZmVyXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWYuc2xpY2UodGhpcy5fb2Zmc2V0KX19KSxuLnByb3RvdHlwZS5yZWFkQnl0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zaXplLXRoaXMuX29mZnNldDwxKXJldHVybiBudWxsO3ZhciBlPTI1NSZ0aGlzLl9idWZbdGhpcy5fb2Zmc2V0XTtyZXR1cm4gdHx8KHRoaXMuX29mZnNldCs9MSksZX0sbi5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCeXRlKCEwKX0sbi5wcm90b3R5cGUucmVhZExlbmd0aD1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10JiYodD10aGlzLl9vZmZzZXQpLHQ+PXRoaXMuX3NpemUpcmV0dXJuIG51bGw7dmFyIGU9MjU1JnRoaXMuX2J1Zlt0KytdO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2lmKDEyOD09KDEyOCZlKSl7aWYoZSY9MTI3LDA9PWUpdGhyb3cgZihcIkluZGVmaW5pdGUgbGVuZ3RoIG5vdCBzdXBwb3J0ZWRcIik7aWYoZT40KXRocm93IGYoXCJlbmNvZGluZyB0b28gbG9uZ1wiKTtpZih0aGlzLl9zaXplLXQ8ZSlyZXR1cm4gbnVsbDt0aGlzLl9sZW49MDtmb3IodmFyIHI9MDtyPGU7cisrKXRoaXMuX2xlbj0odGhpcy5fbGVuPDw4KSsoMjU1JnRoaXMuX2J1Zlt0KytdKX1lbHNlIHRoaXMuX2xlbj1lO3JldHVybiB0fSxuLnByb3RvdHlwZS5yZWFkU2VxdWVuY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wZWVrKCk7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7aWYodm9pZCAwIT09dCYmdCE9PWUpdGhyb3cgZihcIkV4cGVjdGVkIDB4XCIrdC50b1N0cmluZygxNikrXCI6IGdvdCAweFwiK2UudG9TdHJpbmcoMTYpKTt2YXIgcj10aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0KzEpO3JldHVybiBudWxsPT09cj9udWxsOih0aGlzLl9vZmZzZXQ9cixlKX0sbi5wcm90b3R5cGUucmVhZEludD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkVGFnKG8uSW50ZWdlcil9LG4ucHJvdG90eXBlLnJlYWRCb29sZWFuPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLl9yZWFkVGFnKG8uQm9vbGVhbil9LG4ucHJvdG90eXBlLnJlYWRFbnVtZXJhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkVGFnKG8uRW51bWVyYXRpb24pfSxuLnByb3RvdHlwZS5yZWFkU3RyaW5nPWZ1bmN0aW9uKHQscil7dHx8KHQ9by5PY3RldFN0cmluZyk7dmFyIG49dGhpcy5wZWVrKCk7aWYobnVsbD09PW4pcmV0dXJuIG51bGw7aWYobiE9PXQpdGhyb3cgZihcIkV4cGVjdGVkIDB4XCIrdC50b1N0cmluZygxNikrXCI6IGdvdCAweFwiK24udG9TdHJpbmcoMTYpKTt2YXIgaT10aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0KzEpO2lmKG51bGw9PT1pKXJldHVybiBudWxsO2lmKHRoaXMubGVuZ3RoPnRoaXMuX3NpemUtaSlyZXR1cm4gbnVsbDtpZih0aGlzLl9vZmZzZXQ9aSwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIHI/bmV3IGUoMCk6XCJcIjt2YXIgYT10aGlzLl9idWYuc2xpY2UodGhpcy5fb2Zmc2V0LHRoaXMuX29mZnNldCt0aGlzLmxlbmd0aCk7cmV0dXJuIHRoaXMuX29mZnNldCs9dGhpcy5sZW5ndGgscj9hOmEudG9TdHJpbmcoXCJ1dGY4XCIpfSxuLnByb3RvdHlwZS5yZWFkT0lEPWZ1bmN0aW9uKHQpe3R8fCh0PW8uT0lEKTt2YXIgZT10aGlzLnJlYWRTdHJpbmcodCwhMCk7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7Zm9yKHZhciByPVtdLG49MCxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPTI1NSZlW2ldO248PD03LG4rPTEyNyZhLDA9PSgxMjgmYSkmJihyLnB1c2gobiksbj0wKX1yZXR1cm4gbj1yLnNoaWZ0KCksci51bnNoaWZ0KG4lNDApLHIudW5zaGlmdChuLzQwPj4wKSxyLmpvaW4oXCIuXCIpfSxuLnByb3RvdHlwZS5fcmVhZFRhZz1mdW5jdGlvbih0KXtpLm9rKHZvaWQgMCE9PXQpO3ZhciBlPXRoaXMucGVlaygpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2lmKGUhPT10KXRocm93IGYoXCJFeHBlY3RlZCAweFwiK3QudG9TdHJpbmcoMTYpK1wiOiBnb3QgMHhcIitlLnRvU3RyaW5nKDE2KSk7dmFyIHI9dGhpcy5yZWFkTGVuZ3RoKHRoaXMuX29mZnNldCsxKTtpZihudWxsPT09cilyZXR1cm4gbnVsbDtpZih0aGlzLmxlbmd0aD40KXRocm93IGYoXCJJbnRlZ2VyIHRvbyBsb25nOiBcIit0aGlzLmxlbmd0aCk7aWYodGhpcy5sZW5ndGg+dGhpcy5fc2l6ZS1yKXJldHVybiBudWxsO3RoaXMuX29mZnNldD1yO2Zvcih2YXIgbj10aGlzLl9idWZbdGhpcy5fb2Zmc2V0XSxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKW88PD04LG98PTI1NSZ0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdO3JldHVybiAxMjg9PSgxMjgmbikmJjQhPT1hJiYoby09MTw8OCphKSxvPj4wfSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe28ub2sodCksby5lcXVhbCh0eXBlb2YgdCxcIm9iamVjdFwiKSxvLm9rKGUpLG8uZXF1YWwodHlwZW9mIGUsXCJvYmplY3RcIik7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihyKXtpZighZVtyXSl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbil9fSksZX1mdW5jdGlvbiBpKHQpe3Q9bihzLHR8fHt9KSx0aGlzLl9idWY9bmV3IGUodC5zaXplfHwxMDI0KSx0aGlzLl9zaXplPXRoaXMuX2J1Zi5sZW5ndGgsdGhpcy5fb2Zmc2V0PTAsdGhpcy5fb3B0aW9ucz10LHRoaXMuX3NlcT1bXX12YXIgbz1yKDIwMiksYT1yKDExMiksZj1yKDExMSkscz0oZi5uZXdJbnZhbGlkQXNuMUVycm9yLHtzaXplOjEwMjQsZ3Jvd3RoRmFjdG9yOjh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsXCJidWZmZXJcIix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc2VxLmxlbmd0aCl0aHJvdyBuZXcgSW52YWxpZEFzbjFFcnJvcih0aGlzLl9zZXEubGVuZ3RoK1wiIHVuZW5kZWQgc2VxdWVuY2UocylcIik7cmV0dXJuIHRoaXMuX2J1Zi5zbGljZSgwLHRoaXMuX29mZnNldCl9fSksaS5wcm90b3R5cGUud3JpdGVCeXRlPWZ1bmN0aW9uKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyXCIpO3RoaXMuX2Vuc3VyZSgxKSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXR9LGkucHJvdG90eXBlLndyaXRlSW50PWZ1bmN0aW9uKHQsZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBOdW1iZXJcIik7XCJudW1iZXJcIiE9dHlwZW9mIGUmJihlPWEuSW50ZWdlcik7Zm9yKHZhciByPTQ7KDA9PT0oNDI4NjU3ODY4OCZ0KXx8KDQyODY1Nzg2ODgmdCk9PT0tODM4ODYwOCkmJnI+MTspci0tLHQ8PD04O2lmKHI+NCl0aHJvdyBuZXcgSW52YWxpZEFzbjFFcnJvcihcIkJFUiBpbnRzIGNhbm5vdCBiZSA+IDB4ZmZmZmZmZmZcIik7Zm9yKHRoaXMuX2Vuc3VyZSgyK3IpLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109ZSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXI7ci0tID4wOyl0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPSg0Mjc4MTkwMDgwJnQpPj4+MjQsdDw8PTh9LGkucHJvdG90eXBlLndyaXRlTnVsbD1mdW5jdGlvbigpe3RoaXMud3JpdGVCeXRlKGEuTnVsbCksdGhpcy53cml0ZUJ5dGUoMCl9LGkucHJvdG90eXBlLndyaXRlRW51bWVyYXRpb249ZnVuY3Rpb24odCxlKXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlclwiKTtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgZSYmKGU9YS5FbnVtZXJhdGlvbiksdGhpcy53cml0ZUludCh0LGUpfSxpLnByb3RvdHlwZS53cml0ZUJvb2xlYW49ZnVuY3Rpb24odCxlKXtpZihcImJvb2xlYW5cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBCb29sZWFuXCIpO1wibnVtYmVyXCIhPXR5cGVvZiBlJiYoZT1hLkJvb2xlYW4pLHRoaXMuX2Vuc3VyZSgzKSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPWUsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT0xLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dD8yNTU6MH0saS5wcm90b3R5cGUud3JpdGVTdHJpbmc9ZnVuY3Rpb24odCxyKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyAod2FzOiBcIit0eXBlb2YgdCtcIilcIik7XCJudW1iZXJcIiE9dHlwZW9mIHImJihyPWEuT2N0ZXRTdHJpbmcpO3ZhciBuPWUuYnl0ZUxlbmd0aCh0KTt0aGlzLndyaXRlQnl0ZShyKSx0aGlzLndyaXRlTGVuZ3RoKG4pLG4mJih0aGlzLl9lbnN1cmUobiksdGhpcy5fYnVmLndyaXRlKHQsdGhpcy5fb2Zmc2V0KSx0aGlzLl9vZmZzZXQrPW4pfSxpLnByb3RvdHlwZS53cml0ZUJ1ZmZlcj1mdW5jdGlvbih0LHIpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoXCJ0YWcgbXVzdCBiZSBhIG51bWJlclwiKTtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIGJ1ZmZlclwiKTt0aGlzLndyaXRlQnl0ZShyKSx0aGlzLndyaXRlTGVuZ3RoKHQubGVuZ3RoKSx0aGlzLl9lbnN1cmUodC5sZW5ndGgpLHQuY29weSh0aGlzLl9idWYsdGhpcy5fb2Zmc2V0LDAsdC5sZW5ndGgpLHRoaXMuX29mZnNldCs9dC5sZW5ndGh9LGkucHJvdG90eXBlLndyaXRlU3RyaW5nQXJyYXk9ZnVuY3Rpb24odCl7aWYoIXQgaW5zdGFuY2VvZiBBcnJheSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheVtTdHJpbmddXCIpO3ZhciBlPXRoaXM7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Uud3JpdGVTdHJpbmcodCl9KX0saS5wcm90b3R5cGUud3JpdGVPSUQ9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7ZTwxMjg/dC5wdXNoKGUpOmU8MTYzODQ/KHQucHVzaChlPj4+N3wxMjgpLHQucHVzaCgxMjcmZSkpOmU8MjA5NzE1Mj8odC5wdXNoKGU+Pj4xNHwxMjgpLHQucHVzaCgyNTUmKGU+Pj43fDEyOCkpLHQucHVzaCgxMjcmZSkpOmU8MjY4NDM1NDU2Pyh0LnB1c2goZT4+PjIxfDEyOCksdC5wdXNoKDI1NSYoZT4+PjE0fDEyOCkpLHQucHVzaCgyNTUmKGU+Pj43fDEyOCkpLHQucHVzaCgxMjcmZSkpOih0LnB1c2goMjU1JihlPj4+Mjh8MTI4KSksdC5wdXNoKDI1NSYoZT4+PjIxfDEyOCkpLHQucHVzaCgyNTUmKGU+Pj4xNHwxMjgpKSx0LnB1c2goMjU1JihlPj4+N3wxMjgpKSx0LnB1c2goMTI3JmUpKX1pZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZihcIm51bWJlclwiIT10eXBlb2YgZSYmKGU9YS5PSUQpLCEvXihbMC05XStcXC4pezMsfVswLTldKyQvLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKFwiYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgT0lEIHN0cmluZ1wiKTt2YXIgbj10LnNwbGl0KFwiLlwiKSxpPVtdO2kucHVzaCg0MCpwYXJzZUludChuWzBdLDEwKStwYXJzZUludChuWzFdLDEwKSksbi5zbGljZSgyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IoaSxwYXJzZUludCh0LDEwKSl9KTt2YXIgbz10aGlzO3RoaXMuX2Vuc3VyZSgyK2kubGVuZ3RoKSx0aGlzLndyaXRlQnl0ZShlKSx0aGlzLndyaXRlTGVuZ3RoKGkubGVuZ3RoKSxpLmZvckVhY2goZnVuY3Rpb24odCl7by53cml0ZUJ5dGUodCl9KX0saS5wcm90b3R5cGUud3JpdGVMZW5ndGg9ZnVuY3Rpb24odCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBOdW1iZXJcIik7aWYodGhpcy5fZW5zdXJlKDQpLHQ8PTEyNyl0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ7ZWxzZSBpZih0PD0yNTUpdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT0xMjksdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10O2Vsc2UgaWYodDw9NjU1MzUpdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT0xMzAsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10Pj44LHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dDtlbHNle2lmKCEodDw9MTY3NzcyMTUpKXRocm93IG5ldyBJbnZhbGlkQXNuMUVScm9yKFwiTGVuZ3RoIHRvbyBsb25nICg+IDQgYnl0ZXMpXCIpO3RoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109MTMxLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dD4+MTYsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10Pj44LHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dH19LGkucHJvdG90eXBlLnN0YXJ0U2VxdWVuY2U9ZnVuY3Rpb24odCl7XCJudW1iZXJcIiE9dHlwZW9mIHQmJih0PWEuU2VxdWVuY2V8YS5Db25zdHJ1Y3RvciksdGhpcy53cml0ZUJ5dGUodCksdGhpcy5fc2VxLnB1c2godGhpcy5fb2Zmc2V0KSx0aGlzLl9lbnN1cmUoMyksdGhpcy5fb2Zmc2V0Kz0zfSxpLnByb3RvdHlwZS5lbmRTZXF1ZW5jZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3NlcS5wb3AoKSxlPXQrMyxyPXRoaXMuX29mZnNldC1lO2lmKHI8PTEyNyl0aGlzLl9zaGlmdChlLHIsLTIpLHRoaXMuX2J1Zlt0XT1yO2Vsc2UgaWYocjw9MjU1KXRoaXMuX3NoaWZ0KGUsciwtMSksdGhpcy5fYnVmW3RdPTEyOSx0aGlzLl9idWZbdCsxXT1yO2Vsc2UgaWYocjw9NjU1MzUpdGhpcy5fYnVmW3RdPTEzMCx0aGlzLl9idWZbdCsxXT1yPj44LHRoaXMuX2J1Zlt0KzJdPXI7ZWxzZXtpZighKHI8PTE2Nzc3MjE1KSl0aHJvdyBuZXcgSW52YWxpZEFzbjFFcnJvcihcIlNlcXVlbmNlIHRvbyBsb25nXCIpO3RoaXMuX3NoaWZ0KGUsciwxKSx0aGlzLl9idWZbdF09MTMxLHRoaXMuX2J1Zlt0KzFdPXI+PjE2LHRoaXMuX2J1Zlt0KzJdPXI+PjgsdGhpcy5fYnVmW3QrM109cn19LGkucHJvdG90eXBlLl9zaGlmdD1mdW5jdGlvbih0LGUscil7by5vayh2b2lkIDAhPT10KSxvLm9rKHZvaWQgMCE9PWUpLG8ub2sociksdGhpcy5fYnVmLmNvcHkodGhpcy5fYnVmLHQrcix0LHQrZSksdGhpcy5fb2Zmc2V0Kz1yfSxpLnByb3RvdHlwZS5fZW5zdXJlPWZ1bmN0aW9uKHQpe2lmKG8ub2sodCksdGhpcy5fc2l6ZS10aGlzLl9vZmZzZXQ8dCl7dmFyIHI9dGhpcy5fc2l6ZSp0aGlzLl9vcHRpb25zLmdyb3d0aEZhY3RvcjtyLXRoaXMuX29mZnNldDx0JiYocis9dCk7dmFyIG49bmV3IGUocik7dGhpcy5fYnVmLmNvcHkobiwwLDAsdGhpcy5fb2Zmc2V0KSx0aGlzLl9idWY9bix0aGlzLl9zaXplPXJ9fSx0LmV4cG9ydHM9aX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI1NCk7dC5leHBvcnRzPXtCZXI6bixCZXJSZWFkZXI6bi5SZWFkZXIsQmVyV3JpdGVyOm4uV3JpdGVyfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cig5MyksYT1yKDExNCksZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7bih0aGlzLHQpLGU9ZXx8e30sdGhpcy5oYXNoQWxnb3JpdGhtPWUuaGFzaEFsZ29yaXRobXx8XCJzaGEyNTZcIix0aGlzLmhhc2hMZW5ndGg9YS5nZXRMZW5ndGgodGhpcy5oYXNoQWxnb3JpdGhtKSx0aGlzLnNhbHRMZW5ndGg9dGhpcy5oYXNoTGVuZ3RofXJldHVybiBpKHQsW3trZXk6XCJnZW5lcmF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPW5ldyBlKHIpLGk9TWF0aC5jZWlsKHIvdGhpcy5oYXNoTGVuZ3RoKSxhPTA7YTxpO2ErKyl7dmFyIGY9bmV3IGUoNCk7Zi53cml0ZUludDMyQkUoYSwwKTt2YXIgcz1vLmNyZWF0ZUhhc2godGhpcy5oYXNoQWxnb3JpdGhtKS51cGRhdGUodCkudXBkYXRlKGYpLmRpZ2VzdCgpO3MuY29weShuLGEqdGhpcy5oYXNoTGVuZ3RoKX1yZXR1cm4gbn19XSksdH0oKTt0LmV4cG9ydHM9Zn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoOTMpLGE9cigyNTgpLGY9cigyNjcpLHM9cigxMTQpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe24odGhpcyx0KSxlPWV8fHt9LHRoaXMuaGFzaEFsZ29yaXRobT1lLmhhc2hBbGdvcml0aG18fFwic2hhMjU2XCIsdGhpcy5oYXNoTGVuZ3RoPXMuZ2V0TGVuZ3RoKHRoaXMuaGFzaEFsZ29yaXRobSksdGhpcy5zYWx0TGVuZ3RoPXRoaXMuaGFzaExlbmd0aH1yZXR1cm4gaSh0LFt7a2V5OlwiZW5jb2RlXCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj1NYXRoLmNlaWwoci84KSxpPW8uY3JlYXRlSGFzaCh0aGlzLmhhc2hBbGdvcml0aG0pLnVwZGF0ZSh0KS5kaWdlc3QoKTtpZihuPHRoaXMuaGFzaExlbmd0aCt0aGlzLnNhbHRMZW5ndGgrMil0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyBlcnJvcjogUlNBIG1vZHVsdXMgaXMgdG9vIHNtYWxsIGZvciBcIit0aGlzLmhhc2hBbGdvcml0aG0pO3ZhciBzPW8ucmFuZG9tQnl0ZXModGhpcy5zYWx0TGVuZ3RoKSx1PW8uY3JlYXRlSGFzaCh0aGlzLmhhc2hBbGdvcml0aG0pLnVwZGF0ZShuZXcgZSg4KS5maWxsKDApKS51cGRhdGUoaSkudXBkYXRlKHMpLmRpZ2VzdCgpLGg9ZS5jb25jYXQoW25ldyBlKG4tdGhpcy5zYWx0TGVuZ3RoLXRoaXMuaGFzaExlbmd0aC0yKS5maWxsKDApLG5ldyBlKFsxXSksc10pLGM9bmV3IGEoe2hhc2hBbGdvcml0aG06dGhpcy5oYXNoQWxnb3JpdGhtfSksZD1jLmdlbmVyYXRlKHUsbi10aGlzLmhhc2hMZW5ndGgtMSksbD1mKGgsZCk7cmV0dXJuIGxbMF0mPTI1NT4+Pjgqbi1yLGUuY29uY2F0KFtsLHUsbmV3IGUoWzE4OF0pXSl9fSx7a2V5OlwidmVyaWZ5XCIsdmFsdWU6ZnVuY3Rpb24odCxyLG4pe3ZhciBpPU1hdGguY2VpbChuLzgpLHM9by5jcmVhdGVIYXNoKHRoaXMuaGFzaEFsZ29yaXRobSkudXBkYXRlKHQpLmRpZ2VzdCgpO2lmKGk8dGhpcy5oYXNoTGVuZ3RoK3RoaXMuc2FsdExlbmd0aCsyKXJldHVybiExO2lmKDE4OCE9PXJbci5sZW5ndGgtMV0pcmV0dXJuITE7dmFyIHU9aS10aGlzLmhhc2hMZW5ndGgtMSxoPXIuc2xpY2UoMCx1KSxjPXIuc2xpY2UodSx1K3RoaXMuaGFzaExlbmd0aCksZD0yNTU+Pj44KmktbjtpZihoWzBdJn5kKXJldHVybiExO3ZhciBsPW5ldyBhKHtoYXNoQWxnb3JpdGhtOnRoaXMuaGFzaEFsZ29yaXRobX0pLHA9bC5nZW5lcmF0ZShjLGktdGhpcy5oYXNoTGVuZ3RoLTEpLGI9ZihoLHApO2JbMF0mPWQ7Zm9yKHZhciB2PWktdGhpcy5oYXNoTGVuZ3RoLXRoaXMuc2FsdExlbmd0aC0yLHk9MDt5PHY7eSsrKWlmKDAhPT1iW3ldKXJldHVybiExO2lmKDEhPT1iW3ZdKXJldHVybiExO3ZhciBtPWIuc2xpY2UoYi5sZW5ndGgtdGhpcy5zYWx0TGVuZ3RoKSxnPW8uY3JlYXRlSGFzaCh0aGlzLmhhc2hBbGdvcml0aG0pLnVwZGF0ZShuZXcgZSg4KS5maWxsKDApKS51cGRhdGUocykudXBkYXRlKG0pLmRpZ2VzdCgpO3JldHVybiAwPT09ZS5jb21wYXJlKGMsZyl9fV0pLHR9KCk7dS5FTVBUWV9CVUZGRVI9bmV3IGUoMCksdC5leHBvcnRzPXV9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDkzKSxhPXIoNDY0KSxmPXIoMjU5KSxzPXIoMTYxKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtuKHRoaXMsdCksZT1lfHx7fSx0aGlzLmhhc2hBbGdvcml0aG09ZS5oYXNoQWxnb3JpdGhtfHxcInNoYTI1NlwiLHRoaXMucHNzPW5ldyBmKHtoYXNoQWxnb3JpdGhtOnRoaXMuaGFzaEFsZ29yaXRobX0pfXJldHVybiBpKHQsW3trZXk6XCJzaWduXCIsdmFsdWU6ZnVuY3Rpb24ocixuKXt2YXIgaT1zLm1vZHVsdXNGcm9tUHJpdmF0ZUtleShyKSxmPWlbMF0udG9TdHJpbmcoMikubGVuZ3RoLHU9OCooaS5sZW5ndGgtMSkrZixoPXRoaXMucHNzLmVuY29kZShuLHUtMSksYz1oLmxlbmd0aDxpLmxlbmd0aD9lLmNvbmNhdChbdC5aRVJPX0JZVEUsaF0pOmg7cmV0dXJuIG8ucHJpdmF0ZUVuY3J5cHQoe2tleTpyLHBhZGRpbmc6YS5SU0FfTk9fUEFERElOR30sYyl9fSx7a2V5OlwidmVyaWZ5XCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMubW9kdWx1c1RvUGVtKHQpLGk9by5wdWJsaWNEZWNyeXB0KHtrZXk6bixwYWRkaW5nOmEuUlNBX05PX1BBRERJTkd9LHIpLGY9dFswXS50b1N0cmluZygyKS5sZW5ndGgsdT04Kih0Lmxlbmd0aC0xKStmLGg9dSU4PT09MT9pLnNsaWNlKDEpOmk7cmV0dXJuIHRoaXMucHNzLnZlcmlmeShlLGgsdS0xKX19XSksdH0oKTt1LlpFUk9fQllURT1uZXcgZShbMF0pLHQuZXhwb3J0cz11fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9cig2MiksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1yKDQ4OCkscz1yKDYzKSx1PXIoNTMpLGg9cigxNjApLGM9dm9pZCAwO3RyeXtjPXIoNDYyKX1jYXRjaCh0KXt9dmFyIGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcigpe24odGhpcyxyKTt2YXIgdD1pKHRoaXMsKHIuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YocikpLmNhbGwodGhpcykpO3JldHVybiB0LnB1YmxpY0tleT1udWxsLHQuc2lnbmF0dXJlPW51bGwsdH1yZXR1cm4gbyhyLHQpLGEocixbe2tleTpcInNldFB1YmxpY0tleVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQdWJsaWMga2V5IG11c3QgYmUgYSBCdWZmZXIsIHdhczogXCIrdCk7aWYoMzIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJQdWJsaWMga2V5IG11c3QgYmUgMzIgYnl0ZXMsIHdhczogXCIrdC5sZW5ndGgpO3RoaXMucHVibGljS2V5PXR9fSx7a2V5Olwic2V0U2lnbmF0dXJlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlNpZ25hdHVyZSBtdXN0IGJlIGEgQnVmZmVyLCB3YXM6IFwiK3QpO2lmKDY0IT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiU2lnbmF0dXJlIG11c3QgYmUgNjQgYnl0ZXMsIHdhczogXCIrdC5sZW5ndGgpO3RoaXMuc2lnbmF0dXJlPXR9fSx7a2V5Olwic2lnblwiLHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IHUoXCJNZXNzYWdlIG11c3QgYmUgYSBCdWZmZXJcIik7aWYoIWUuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUga2V5IG11c3QgYmUgYSBCdWZmZXIsIHdhczogXCIrcik7aWYoMzIhPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJQcml2YXRlIGtleSBtdXN0IGJlIDMyIGJ5dGVzLCB3YXM6IFwiK3IubGVuZ3RoKTtpZihjKXt2YXIgbj1jLk1ha2VLZXlwYWlyKHIpO3RoaXMuc2V0UHVibGljS2V5KG4ucHVibGljS2V5KSx0aGlzLnNpZ25hdHVyZT1jLlNpZ24odCxuKX1lbHNle3ZhciBpPWYuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHIpO3RoaXMuc2V0UHVibGljS2V5KG5ldyBlKGkucHVibGljS2V5KSksdGhpcy5zaWduYXR1cmU9bmV3IGUoZi5zaWduLmRldGFjaGVkKHQsaS5zZWNyZXRLZXkpKX19fSx7a2V5OlwiZ2VuZXJhdGVIYXNoXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5wdWJsaWNLZXkpdGhyb3cgbmV3IHUoXCJSZXF1aXJlcyBhIHB1YmxpYyBrZXlcIik7cmV0dXJuIHRoaXMucHVibGljS2V5fX0se2tleTpcInBhcnNlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2V0UHVibGljS2V5KHQucmVhZE9jdGV0U3RyaW5nKHIuUFVCS0VZX0xFTkdUSCkpLHRoaXMuc2V0U2lnbmF0dXJlKHQucmVhZE9jdGV0U3RyaW5nKHIuU0lHTkFUVVJFX0xFTkdUSCkpfX0se2tleTpcIndyaXRlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3Qud3JpdGVPY3RldFN0cmluZyh0aGlzLnB1YmxpY0tleSxyLlBVQktFWV9MRU5HVEgpLHQud3JpdGVPY3RldFN0cmluZyh0aGlzLnNpZ25hdHVyZSxyLlNJR05BVFVSRV9MRU5HVEgpfX0se2tleTpcImNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gci5GVUxGSUxMTUVOVF9MRU5HVEh9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWVzc2FnZSBtdXN0IGJlIGEgQnVmZmVyXCIpO3ZhciByPXZvaWQgMDtpZihyPWM/Yy5WZXJpZnkodCx0aGlzLnNpZ25hdHVyZSx0aGlzLnB1YmxpY0tleSk6Zi5zaWduLmRldGFjaGVkLnZlcmlmeSh0LHRoaXMuc2lnbmF0dXJlLHRoaXMucHVibGljS2V5KSxyIT09ITApdGhyb3cgbmV3IGgoXCJJbnZhbGlkIGVkMjU1MTkgc2lnbmF0dXJlXCIpO3JldHVybiEwfX1dKSxyfShzKTtkLlRZUEVfSUQ9NCxkLkZFQVRVUkVfQklUTUFTSz0zMixkLlBVQktFWV9MRU5HVEg9MzIsZC5TSUdOQVRVUkVfTEVOR1RIPTY0LGQuRlVMRklMTE1FTlRfTEVOR1RIPWQuUFVCS0VZX0xFTkdUSCtkLlNJR05BVFVSRV9MRU5HVEgsdC5leHBvcnRzPWR9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxmPWZ1bmN0aW9uIHQoZSxyLG4pe251bGw9PT1lJiYoZT1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKTtpZih2b2lkIDA9PT1pKXt2YXIgbz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT1vP3ZvaWQgMDp0KG8scixuKX1pZihcInZhbHVlXCJpbiBpKXJldHVybiBpLnZhbHVlO3ZhciBhPWkuZ2V0O2lmKHZvaWQgMCE9PWEpcmV0dXJuIGEuY2FsbChuKX0scz1yKDc1KSx1PXIoNjMpLGg9cig3NiksYz1yKDkwKSxkPXIoNTMpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcigpe24odGhpcyxyKTt2YXIgdD1pKHRoaXMsKHIuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YocikpLmNhbGwodGhpcykpO3JldHVybiB0LnN1YmNvbmRpdGlvbj1udWxsLHR9cmV0dXJuIG8ocix0KSxhKHIsW3trZXk6XCJzZXRTdWJjb25kaXRpb25cIix2YWx1ZTpmdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PXMuZnJvbVVyaSh0KTtlbHNlIGlmKCEodCBpbnN0YW5jZW9mIHMpKXRocm93IG5ldyBFcnJvcihcIlN1YmNvbmRpdGlvbnMgbXVzdCBiZSBVUklzIG9yIG9iamVjdHMgb2YgdHlwZSBDb25kaXRpb25cIik7dGhpcy5zdWJjb25kaXRpb249dH19LHtrZXk6XCJzZXRTdWJmdWxmaWxsbWVudFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9dS5mcm9tVXJpKHQpO2Vsc2UgaWYoISh0IGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IEVycm9yKFwiU3ViZnVsZmlsbG1lbnRzIG11c3QgYmUgb2JqZWN0cyBvZiB0eXBlIEZ1bGZpbGxtZW50XCIpO3RoaXMuc3ViY29uZGl0aW9uPXR9fSx7a2V5Olwic2V0UHJlZml4XCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByZWZpeCBtdXN0IGJlIGEgQnVmZmVyLCB3YXM6IFwiK3QpO3RoaXMucHJlZml4PXR9fSx7a2V5OlwiZ2V0Qml0bWFza1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGYoci5wcm90b3R5cGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2Yoci5wcm90b3R5cGUpLFwiZ2V0Qml0bWFza1wiLHRoaXMpLmNhbGwodGhpcyl8dGhpcy5zdWJjb25kaXRpb24uZ2V0Qml0bWFzaygpfX0se2tleTpcIndyaXRlSGFzaFBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5zdWJjb25kaXRpb24pdGhyb3cgbmV3IGQoXCJSZXF1aXJlcyBzdWJjb25kaXRpb25cIik7dC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMucHJlZml4KSx0LndyaXRlKHRoaXMuc3ViY29uZGl0aW9uIGluc3RhbmNlb2Ygcz90aGlzLnN1YmNvbmRpdGlvbi5zZXJpYWxpemVCaW5hcnkoKTp0aGlzLnN1YmNvbmRpdGlvbi5nZXRDb25kaXRpb25CaW5hcnkoKSl9fSx7a2V5OlwiY2FsY3VsYXRlTWF4RnVsZmlsbG1lbnRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc3ViY29uZGl0aW9uIGluc3RhbmNlb2Ygcz90aGlzLnN1YmNvbmRpdGlvbi5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpOnRoaXMuc3ViY29uZGl0aW9uLmdldENvbmRpdGlvbigpLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCksZT1uZXcgYztyZXR1cm4gZS53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMucHJlZml4KSxlLnNraXAodCksZS5nZXRTaXplKCl9fSx7a2V5OlwicGFyc2VQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZXRQcmVmaXgodC5yZWFkVmFyT2N0ZXRTdHJpbmcoKSksdGhpcy5zZXRTdWJmdWxmaWxsbWVudCh1LmZyb21CaW5hcnkodCkpfX0se2tleTpcIndyaXRlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCEodGhpcy5zdWJjb25kaXRpb24gaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJjb25kaXRpb24gbXVzdCBiZSBmdWxmaWxsZWRcIik7dC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMucHJlZml4KSx0LndyaXRlKHRoaXMuc3ViY29uZGl0aW9uLnNlcmlhbGl6ZUJpbmFyeSgpKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCEodGhpcy5zdWJjb25kaXRpb24gaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJjb25kaXRpb24gaXMgbm90IGEgZnVsZmlsbG1lbnRcIik7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IEVycm9yKFwiTWVzc2FnZSBtdXN0IGJlIHByb3ZpZGVkIGFzIGEgQnVmZmVyLCB3YXM6IFwiK3QpO3JldHVybiB0aGlzLnN1YmNvbmRpdGlvbi52YWxpZGF0ZShlLmNvbmNhdChbdGhpcy5wcmVmaXgsdF0pKX19XSkscn0oaCk7bC5UWVBFX0lEPTEsbC5GRUFUVVJFX0JJVE1BU0s9NSxsLnByb3RvdHlwZS5zZXRTdWJjb25kaXRpb25Vcmk9bC5wcm90b3R5cGUuc2V0U3ViY29uZGl0aW9uLGwucHJvdG90eXBlLnNldFN1YmZ1bGZpbGxtZW50VXJpPWwucHJvdG90eXBlLnNldFN1YmZ1bGZpbGxtZW50LHQuZXhwb3J0cz1sfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1yKDc2KSxzPXIoNTMpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcigpe3JldHVybiBuKHRoaXMsciksaSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKHIsdCksYShyLFt7a2V5Olwid3JpdGVIYXNoUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnByZWltYWdlKXRocm93IG5ldyBzKFwiQ291bGQgbm90IGNhbGN1bGF0ZSBoYXNoLCBubyBwcmVpbWFnZSBwcm92aWRlZFwiKTt0LndyaXRlKHRoaXMucHJlaW1hZ2UpfX0se2tleTpcInNldFByZWltYWdlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByZWltYWdlIG11c3QgYmUgYSBidWZmZXIsIHdhczogXCIrdCk7dGhpcy5wcmVpbWFnZT10fX0se2tleTpcInBhcnNlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5zZXRQcmVpbWFnZSh0LnJlYWQoZSkpfX0se2tleTpcIndyaXRlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnByZWltYWdlKXRocm93IG5ldyBzKFwiUHJlaW1hZ2UgbXVzdCBiZSBzcGVjaWZpZWRcIik7dC53cml0ZSh0aGlzLnByZWltYWdlKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEwfX1dKSxyfShmKTt1LlRZUEVfSUQ9MCx1LkZFQVRVUkVfQklUTUFTSz0zLHQuZXhwb3J0cz11fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1yKDI2MCkscz1yKDE2MSksdT1yKDc2KSxoPXIoOTApLGM9cig1MyksZD1yKDE2MCksbD1uZXcgZixwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtuKHRoaXMscik7dmFyIHQ9aSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5tb2R1bHVzPW51bGwsdC5zaWduYXR1cmU9bnVsbCx0fXJldHVybiBvKHIsdCksYShyLFt7a2V5Olwid3JpdGVDb21tb25IZWFkZXJcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5tb2R1bHVzKXRocm93IG5ldyBjKFwiUmVxdWlyZXMgYSBwdWJsaWMgbW9kdWx1c1wiKTt0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5tb2R1bHVzKX19LHtrZXk6XCJzZXRQdWJsaWNNb2R1bHVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1vZHVsdXMgbXVzdCBiZSBhIGJ1ZmZlciwgd2FzOiBcIit0KTtpZigwPT09dFswXSl0aHJvdyBuZXcgRXJyb3IoXCJNb2R1bHVzIG1heSBub3QgY29udGFpbiBsZWFkaW5nIHplcm9zXCIpO2lmKHQubGVuZ3RoPjUxMnx8dC5sZW5ndGg8MTI4KXRocm93IG5ldyBFcnJvcihcIk1vZHVsdXMgbXVzdCBiZSBiZXR3ZWVuIDEyOCBieXRlcyAoMTAxNyBiaXRzKSBhbmQgNTEyIGJ5dGVzICg0MDk2IGJpdHMpLCB3YXM6IFwiK3QubGVuZ3RoK1wiIGJ5dGVzXCIpO3RoaXMubW9kdWx1cz10fX0se2tleTpcInNldFNpZ25hdHVyZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTaWduYXR1cmUgbXVzdCBiZSBhIGJ1ZmZlciwgd2FzOiBcIit0KTt0aGlzLnNpZ25hdHVyZT10fX0se2tleTpcInNpZ25cIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMubW9kdWx1c3x8dGhpcy5zZXRQdWJsaWNNb2R1bHVzKHMubW9kdWx1c0Zyb21Qcml2YXRlS2V5KGUpKSx0aGlzLnNpZ25hdHVyZT1sLnNpZ24oZSx0KX19LHtrZXk6XCJ3cml0ZUhhc2hQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy53cml0ZUNvbW1vbkhlYWRlcih0KX19LHtrZXk6XCJwYXJzZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNldFB1YmxpY01vZHVsdXModC5yZWFkVmFyT2N0ZXRTdHJpbmcoKSksdGhpcy5zZXRTaWduYXR1cmUodC5yZWFkVmFyT2N0ZXRTdHJpbmcoKSl9fSx7a2V5Olwid3JpdGVQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuc2lnbmF0dXJlKXRocm93IG5ldyBjKFwiUmVxdWlyZXMgYSBzaWduYXR1cmVcIik7dGhpcy53cml0ZUNvbW1vbkhlYWRlcih0KSx0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5zaWduYXR1cmUpfX0se2tleTpcImNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgaDtpZighdGhpcy5tb2R1bHVzKXRocm93IG5ldyBjKFwiUmVxdWlyZXMgYSBwdWJsaWMgbW9kdWx1c1wiKTtyZXR1cm4gdGhpcy53cml0ZUNvbW1vbkhlYWRlcih0KSx0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5tb2R1bHVzKSx0LmdldFNpemUoKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBFcnJvcihcIk1lc3NhZ2UgbXVzdCBiZSBwcm92aWRlZCBhcyBhIEJ1ZmZlciwgd2FzOiBcIit0KTt2YXIgcj1sLnZlcmlmeSh0aGlzLm1vZHVsdXMsdCx0aGlzLnNpZ25hdHVyZSk7aWYoIXIpdGhyb3cgbmV3IGQoXCJJbnZhbGlkIFJTQSBzaWduYXR1cmVcIik7cmV0dXJuITB9fV0pLHJ9KHUpO3AuVFlQRV9JRD0zLHAuRkVBVFVSRV9CSVRNQVNLPTE3LHQuZXhwb3J0cz1wfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1mdW5jdGlvbiB0KGUscixuKXtudWxsPT09ZSYmKGU9RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7aWYodm9pZCAwPT09aSl7dmFyIG89T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09bz92b2lkIDA6dChvLHIsbil9aWYoXCJ2YWx1ZVwiaW4gaSlyZXR1cm4gaS52YWx1ZTt2YXIgYT1pLmdldDtpZih2b2lkIDAhPT1hKXJldHVybiBhLmNhbGwobil9LHM9cig3NSksdT1yKDYzKSxoPXIoNzYpLGM9cig5MCksZD1yKDkxKSxsPXIoNTMpLHA9cigxMTMpLGI9cigxNjIpLHY9bmV3IGUoMCkseT1cImNvbmRpdGlvblwiLG09XCJmdWxmaWxsbWVudFwiLGc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcigpe24odGhpcyxyKTt2YXIgdD1pKHRoaXMsKHIuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YocikpLmNhbGwodGhpcykpO3JldHVybiB0LnRocmVzaG9sZD1udWxsLHQuc3ViY29uZGl0aW9ucz1bXSx0fXJldHVybiBvKHIsdCksYShyLFt7a2V5OlwiYWRkU3ViY29uZGl0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PXMuZnJvbVVyaSh0KTtlbHNlIGlmKCEodCBpbnN0YW5jZW9mIHMpKXRocm93IG5ldyBFcnJvcihcIlN1YmNvbmRpdGlvbnMgbXVzdCBiZSBVUklzIG9yIG9iamVjdHMgb2YgdHlwZSBDb25kaXRpb25cIik7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGUpZT0xO2Vsc2UgaWYoIWIoZSl8fGU8MSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCB3ZWlnaHQsIG5vdCBhbiBpbnRlZ2VyOiBcIitlKTt0aGlzLnN1YmNvbmRpdGlvbnMucHVzaCh7dHlwZTp5LGJvZHk6dCx3ZWlnaHQ6ZX0pfX0se2tleTpcImFkZFN1YmZ1bGZpbGxtZW50XCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PXUuZnJvbVVyaSh0KTtlbHNlIGlmKCEodCBpbnN0YW5jZW9mIHUpKXRocm93IG5ldyBFcnJvcihcIlN1YmZ1bGZpbGxtZW50cyBtdXN0IGJlIFVSSXMgb3Igb2JqZWN0cyBvZiB0eXBlIEZ1bGZpbGxtZW50XCIpO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlKWU9MTtlbHNlIGlmKCFiKGUpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgd2VpZ2h0LCBub3QgYW4gaW50ZWdlcjogXCIrZSk7dGhpcy5zdWJjb25kaXRpb25zLnB1c2goe3R5cGU6bSxib2R5OnQsd2VpZ2h0OmV9KX19LHtrZXk6XCJzZXRUaHJlc2hvbGRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighYih0KXx8dDwxKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaHJlc2hvbGQgbXVzdCBiZSBhIGludGVnZXIgZ3JlYXRlciB0aGFuIHplcm8sIHdhczogXCIrdCk7dGhpcy50aHJlc2hvbGQ9dH19LHtrZXk6XCJnZXRCaXRtYXNrXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1mKHIucHJvdG90eXBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIucHJvdG90eXBlKSxcImdldEJpdG1hc2tcIix0aGlzKS5jYWxsKHRoaXMpLGU9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9dGhpcy5zdWJjb25kaXRpb25zW1N5bWJvbC5pdGVyYXRvcl0oKTshKGU9KG89YS5uZXh0KCkpLmRvbmUpO2U9ITApe3ZhciBzPW8udmFsdWU7dHw9cy5ib2R5LmdldEJpdG1hc2soKX19Y2F0Y2godCl7bj0hMCxpPXR9ZmluYWxseXt0cnl7IWUmJmEucmV0dXJuJiZhLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX1yZXR1cm4gdH19LHtrZXk6XCJ3cml0ZUhhc2hQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuc3ViY29uZGl0aW9ucy5sZW5ndGgpdGhyb3cgbmV3IGwoXCJSZXF1aXJlcyBzdWJjb25kaXRpb25zXCIpO3ZhciBlPXRoaXMuc3ViY29uZGl0aW9ucy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9bmV3IGQ7cmV0dXJuIGUud3JpdGVWYXJVSW50KHQud2VpZ2h0KSxlLndyaXRlKHQudHlwZT09PW0/dC5ib2R5LmdldENvbmRpdGlvbkJpbmFyeSgpOnQuYm9keS5zZXJpYWxpemVCaW5hcnkoKSksZS5nZXRCdWZmZXIoKX0pLHI9dGhpcy5jb25zdHJ1Y3Rvci5zb3J0QnVmZmVycyhlKTt0LndyaXRlVUludDMyKHRoaXMudGhyZXNob2xkKSx0LndyaXRlVmFyVUludChyLmxlbmd0aCksci5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LndyaXRlKGUpfSl9fSx7a2V5OlwiY2FsY3VsYXRlTWF4RnVsZmlsbG1lbnRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT0wLHI9dGhpcy5zdWJjb25kaXRpb25zLm1hcChmdW5jdGlvbihyKXt2YXIgbj10LmNvbnN0cnVjdG9yLnByZWRpY3RTdWJjb25kaXRpb25MZW5ndGgociksaT10LmNvbnN0cnVjdG9yLnByZWRpY3RTdWJmdWxmaWxsbWVudExlbmd0aChyKTtyZXR1cm4gZSs9bix7d2VpZ2h0OnIud2VpZ2h0LHNpemU6aS1ufX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWlnaHQtdC53ZWlnaHR9KSxuPWUrdGhpcy5jb25zdHJ1Y3Rvci5jYWxjdWxhdGVXb3JzdENhc2VMZW5ndGgodGhpcy50aHJlc2hvbGQscik7aWYobj09PS0oMS8wKSl0aHJvdyBuZXcgbChcIkluc3VmZmljaWVudCBzdWJjb25kaXRpb25zL3dlaWdodHMgdG8gbWVldCB0aGUgdGhyZXNob2xkXCIpO3ZhciBpPW5ldyBjO3JldHVybiBpLndyaXRlVUludDMyKHRoaXMudGhyZXNob2xkKSxpLndyaXRlVmFyVUludCh0aGlzLnN1YmNvbmRpdGlvbnMubGVuZ3RoKSx0aGlzLnN1YmNvbmRpdGlvbnMuZm9yRWFjaChmdW5jdGlvbih0KXtpLndyaXRlVUludDgoKSwxIT09dC53ZWlnaHQmJmkud3JpdGVVSW50MzIodC53ZWlnaHQpfSksaS5za2lwKG4pLGkuZ2V0U2l6ZSgpfX0se2tleTpcInBhcnNlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2V0VGhyZXNob2xkKHQucmVhZFZhclVJbnQoKSk7Zm9yKHZhciBlPXQucmVhZFZhclVJbnQoKSxyPTA7cjxlO3IrKyl7dmFyIG49dC5yZWFkVmFyVUludCgpLGk9dC5yZWFkVmFyT2N0ZXRTdHJpbmcoKSxvPXQucmVhZFZhck9jdGV0U3RyaW5nKCk7aWYoaS5sZW5ndGgmJm8ubGVuZ3RoKXRocm93IG5ldyBwKFwiU3ViY29uZGl0aW9ucyBtYXkgbm90IHByb3ZpZGUgYm90aCBzdWJjb25kaXRpb24gYW5kIGZ1bGZpbGxtZW50LlwiKTtpZihpLmxlbmd0aCl0aGlzLmFkZFN1YmZ1bGZpbGxtZW50KHUuZnJvbUJpbmFyeShpKSxuKTtlbHNle2lmKCFvLmxlbmd0aCl0aHJvdyBuZXcgcChcIlN1YmNvbmRpdGlvbnMgbXVzdCBwcm92aWRlIGVpdGhlciBzdWJjb25kaXRpb24gb3IgZnVsZmlsbG1lbnQuXCIpO3RoaXMuYWRkU3ViY29uZGl0aW9uKHMuZnJvbUJpbmFyeShvKSxuKX19fX0se2tleTpcIndyaXRlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3ViY29uZGl0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50eXBlPT09bT9PYmplY3QuYXNzaWduKHt9LHQse2luZGV4OmUsc2l6ZTp0LmJvZHkuc2VyaWFsaXplQmluYXJ5KCkubGVuZ3RoLG9taXRTaXplOnQuYm9keS5nZXRDb25kaXRpb25CaW5hcnkoKS5sZW5ndGh9KTpudWxsfSkuZmlsdGVyKEJvb2xlYW4pLHI9dGhpcy5jb25zdHJ1Y3Rvci5jYWxjdWxhdGVTbWFsbGVzdFZhbGlkRnVsZmlsbG1lbnRTZXQodGhpcy50aHJlc2hvbGQsZSkuc2V0LG49dGhpcy5zdWJjb25kaXRpb25zLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR5cGU9PT1tJiZyLmluZGV4T2YoZSk9PT0tMT9PYmplY3QuYXNzaWduKHt9LHQse3R5cGU6eSxib2R5OnQuYm9keS5nZXRDb25kaXRpb24oKX0pOnR9KSxpPW4ubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBkO3JldHVybiBlLndyaXRlVmFyVUludCh0LndlaWdodCksZS53cml0ZVZhck9jdGV0U3RyaW5nKHQudHlwZT09PW0/dC5ib2R5LnNlcmlhbGl6ZUJpbmFyeSgpOnYpLGUud3JpdGVWYXJPY3RldFN0cmluZyh0LnR5cGU9PT15P3QuYm9keS5zZXJpYWxpemVCaW5hcnkoKTp2KSxlLmdldEJ1ZmZlcigpfSksbz10aGlzLmNvbnN0cnVjdG9yLnNvcnRCdWZmZXJzKGkpO3Qud3JpdGVWYXJVSW50KHRoaXMudGhyZXNob2xkKSx0LndyaXRlVmFyVUludChvLmxlbmd0aCksby5mb3JFYWNoKHQud3JpdGUuYmluZCh0KSl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YmNvbmRpdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT1tfSkscj0xLzAsbj1lLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiByPU1hdGgubWluKHIsZS53ZWlnaHQpLHQrZS53ZWlnaHR9LDApO2lmKG48dGhpcy50aHJlc2hvbGQpdGhyb3cgbmV3IEVycm9yKFwiVGhyZXNob2xkIG5vdCBtZXRcIik7aWYodGhpcy50aHJlc2hvbGQrcjw9bil0aHJvdyBuZXcgRXJyb3IoXCJGdWxmaWxsbWVudCBpcyBub3QgbWluaW1hbFwiKTtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4gZS5ib2R5LnZhbGlkYXRlKHQpfSl9fV0sW3trZXk6XCJwcmVkaWN0U3ViY29uZGl0aW9uTGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PW0/dC5ib2R5LmdldENvbmRpdGlvbkJpbmFyeSgpLmxlbmd0aDp0LmJvZHkuc2VyaWFsaXplQmluYXJ5KCkubGVuZ3RofX0se2tleTpcInByZWRpY3RTdWJmdWxmaWxsbWVudExlbmd0aFwiLFxudmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlPT09bT90LmJvZHkuZ2V0Q29uZGl0aW9uKCkuZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKTp0LmJvZHkuZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKSxyPW5ldyBjO3JldHVybiByLndyaXRlVUludDE2KCksci53cml0ZVZhck9jdGV0U3RyaW5nKHtsZW5ndGg6ZX0pLHIuZ2V0U2l6ZSgpfX0se2tleTpcImNhbGN1bGF0ZVdvcnN0Q2FzZUxlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtpZihyPXJ8fDAsdDw9MClyZXR1cm4gMDtpZihyPGUubGVuZ3RoKXt2YXIgbj1lW3JdO3JldHVybiBNYXRoLm1heChuLnNpemUrdGhpcy5jYWxjdWxhdGVXb3JzdENhc2VMZW5ndGgodC1uLndlaWdodCxlLHIrMSksdGhpcy5jYWxjdWxhdGVXb3JzdENhc2VMZW5ndGgodCxlLHIrMSkpfXJldHVybi0oMS8wKX19LHtrZXk6XCJjYWxjdWxhdGVTbWFsbGVzdFZhbGlkRnVsZmlsbG1lbnRTZXRcIix2YWx1ZTpmdW5jdGlvbih0LGUscil7aWYocj1yfHx7aW5kZXg6MCxzaXplOjAsc2V0OltdfSx0PD0wKXJldHVybntzaXplOnIuc2l6ZSxzZXQ6ci5zZXR9O2lmKHIuaW5kZXg8ZS5sZW5ndGgpe3ZhciBuPWVbci5pbmRleF0saT10aGlzLmNhbGN1bGF0ZVNtYWxsZXN0VmFsaWRGdWxmaWxsbWVudFNldCh0LW4ud2VpZ2h0LGUse3NpemU6ci5zaXplK24uc2l6ZSxpbmRleDpyLmluZGV4KzEsc2V0OnIuc2V0LmNvbmNhdChuLmluZGV4KX0pLG89dGhpcy5jYWxjdWxhdGVTbWFsbGVzdFZhbGlkRnVsZmlsbG1lbnRTZXQodCxlLHtzaXplOnIuc2l6ZStuLm9taXRTaXplLGluZGV4OnIuaW5kZXgrMSxzZXQ6ci5zZXR9KTtyZXR1cm4gaS5zaXplPG8uc2l6ZT9pOm99cmV0dXJue3NpemU6MS8wfX19LHtrZXk6XCJzb3J0QnVmZmVyc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCkuc29ydChmdW5jdGlvbih0LHIpe3JldHVybiB0Lmxlbmd0aCE9PXIubGVuZ3RoP3QubGVuZ3RoLXIubGVuZ3RoOmUuY29tcGFyZSh0LHIpfSl9fV0pLHJ9KGgpO2cuVFlQRV9JRD0yLGcuRkVBVFVSRV9CSVRNQVNLPTksZy5wcm90b3R5cGUuYWRkU3ViY29uZGl0aW9uVXJpPWcucHJvdG90eXBlLmFkZFN1YmNvbmRpdGlvbixnLnByb3RvdHlwZS5hZGRTdWJmdWxmaWxsbWVudFVyaT1nLnByb3RvdHlwZS5hZGRTdWJmdWxmaWxsbWVudCx0LmV4cG9ydHM9Z30pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIpe2lmKCFlLmlzQnVmZmVyKHQpfHwhZS5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudHMgbXVzdCBiZSBidWZmZXJzXCIpO2lmKHQubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVycyBtdXN0IGJlIHRoZSBzYW1lIGxlbmd0aFwiKTtmb3IodmFyIG49bmV3IGUodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoO2krKyluW2ldPXRbaV1ecltpXTtyZXR1cm4gbn10LmV4cG9ydHM9cn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxyKXshZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgaT1PYmplY3QuY3JlYXRlKChlfHxvKS5wcm90b3R5cGUpLGE9bmV3IHAobnx8W10pO3JldHVybiBpLl9pbnZva2U9Yyh0LHIsYSksaX1mdW5jdGlvbiBpKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6XCJub3JtYWxcIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOlwidGhyb3dcIixhcmc6dH19fWZ1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYSgpe31mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIHModCl7W1wibmV4dFwiLFwidGhyb3dcIixcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfX0pfWZ1bmN0aW9uIHUodCl7dGhpcy5hcmc9dH1mdW5jdGlvbiBoKHQpe2Z1bmN0aW9uIGUocixuLG8sYSl7dmFyIGY9aSh0W3JdLHQsbik7aWYoXCJ0aHJvd1wiIT09Zi50eXBlKXt2YXIgcz1mLmFyZyxoPXMudmFsdWU7cmV0dXJuIGggaW5zdGFuY2VvZiB1P1Byb21pc2UucmVzb2x2ZShoLmFyZykudGhlbihmdW5jdGlvbih0KXtlKFwibmV4dFwiLHQsbyxhKX0sZnVuY3Rpb24odCl7ZShcInRocm93XCIsdCxvLGEpfSk6UHJvbWlzZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24odCl7cy52YWx1ZT10LG8ocyl9LGEpfWEoZi5hcmcpfWZ1bmN0aW9uIG4odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7ZSh0LHIsbixpKX0pfXJldHVybiBvPW8/by50aGVuKG4sbik6bigpfVwib2JqZWN0XCI9PXR5cGVvZiByJiZyLmRvbWFpbiYmKGU9ci5kb21haW4uYmluZChlKSk7dmFyIG87dGhpcy5faW52b2tlPW59ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49RTtyZXR1cm4gZnVuY3Rpb24obyxhKXtpZihuPT09ayl0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO2lmKG49PT14KXtpZihcInRocm93XCI9PT1vKXRocm93IGE7cmV0dXJuIHYoKX1mb3IoOzspe3ZhciBmPXIuZGVsZWdhdGU7aWYoZil7aWYoXCJyZXR1cm5cIj09PW98fFwidGhyb3dcIj09PW8mJmYuaXRlcmF0b3Jbb109PT15KXtyLmRlbGVnYXRlPW51bGw7dmFyIHM9Zi5pdGVyYXRvci5yZXR1cm47aWYocyl7dmFyIHU9aShzLGYuaXRlcmF0b3IsYSk7aWYoXCJ0aHJvd1wiPT09dS50eXBlKXtvPVwidGhyb3dcIixhPXUuYXJnO2NvbnRpbnVlfX1pZihcInJldHVyblwiPT09byljb250aW51ZX12YXIgdT1pKGYuaXRlcmF0b3Jbb10sZi5pdGVyYXRvcixhKTtpZihcInRocm93XCI9PT11LnR5cGUpe3IuZGVsZWdhdGU9bnVsbCxvPVwidGhyb3dcIixhPXUuYXJnO2NvbnRpbnVlfW89XCJuZXh0XCIsYT15O3ZhciBoPXUuYXJnO2lmKCFoLmRvbmUpcmV0dXJuIG49QSxoO3JbZi5yZXN1bHROYW1lXT1oLnZhbHVlLHIubmV4dD1mLm5leHRMb2Msci5kZWxlZ2F0ZT1udWxsfWlmKFwibmV4dFwiPT09bylyLnNlbnQ9ci5fc2VudD1hO2Vsc2UgaWYoXCJ0aHJvd1wiPT09byl7aWYobj09PUUpdGhyb3cgbj14LGE7ci5kaXNwYXRjaEV4Y2VwdGlvbihhKSYmKG89XCJuZXh0XCIsYT15KX1lbHNlXCJyZXR1cm5cIj09PW8mJnIuYWJydXB0KFwicmV0dXJuXCIsYSk7bj1rO3ZhciB1PWkodCxlLHIpO2lmKFwibm9ybWFsXCI9PT11LnR5cGUpe249ci5kb25lP3g6QTt2YXIgaD17dmFsdWU6dS5hcmcsZG9uZTpyLmRvbmV9O2lmKHUuYXJnIT09SSlyZXR1cm4gaDtyLmRlbGVnYXRlJiZcIm5leHRcIj09PW8mJihhPXkpfWVsc2VcInRocm93XCI9PT11LnR5cGUmJihuPXgsbz1cInRocm93XCIsYT11LmFyZyl9fX1mdW5jdGlvbiBkKHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9XCJub3JtYWxcIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gcCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6XCJyb290XCJ9XSx0LmZvckVhY2goZCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBiKHQpe2lmKHQpe3ZhciBlPXRbd107aWYoZSlyZXR1cm4gZS5jYWxsKHQpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgcj0tMSxuPWZ1bmN0aW9uIGUoKXtmb3IoOysrcjx0Lmxlbmd0aDspaWYobS5jYWxsKHQscikpcmV0dXJuIGUudmFsdWU9dFtyXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT15LGUuZG9uZT0hMCxlfTtyZXR1cm4gbi5uZXh0PW59fXJldHVybntuZXh0OnZ9fWZ1bmN0aW9uIHYoKXtyZXR1cm57dmFsdWU6eSxkb25lOiEwfX12YXIgeSxtPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LHc9Zy5pdGVyYXRvcnx8XCJAQGl0ZXJhdG9yXCIsXz1nLnRvU3RyaW5nVGFnfHxcIkBAdG9TdHJpbmdUYWdcIixNPVwib2JqZWN0XCI9PXR5cGVvZiB0LFM9ZS5yZWdlbmVyYXRvclJ1bnRpbWU7aWYoUylyZXR1cm4gdm9pZChNJiYodC5leHBvcnRzPVMpKTtTPWUucmVnZW5lcmF0b3JSdW50aW1lPU0/dC5leHBvcnRzOnt9LFMud3JhcD1uO3ZhciBFPVwic3VzcGVuZGVkU3RhcnRcIixBPVwic3VzcGVuZGVkWWllbGRcIixrPVwiZXhlY3V0aW5nXCIseD1cImNvbXBsZXRlZFwiLEk9e30sQj1mLnByb3RvdHlwZT1vLnByb3RvdHlwZTthLnByb3RvdHlwZT1CLmNvbnN0cnVjdG9yPWYsZi5jb25zdHJ1Y3Rvcj1hLGZbX109YS5kaXNwbGF5TmFtZT1cIkdlbmVyYXRvckZ1bmN0aW9uXCIsUy5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PWF8fFwiR2VuZXJhdG9yRnVuY3Rpb25cIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sUy5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZik6KHQuX19wcm90b19fPWYsXyBpbiB0fHwodFtfXT1cIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEIpLHR9LFMuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1KHQpfSxzKGgucHJvdG90eXBlKSxTLmFzeW5jPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvPW5ldyBoKG4odCxlLHIsaSkpO3JldHVybiBTLmlzR2VuZXJhdG9yRnVuY3Rpb24oZSk/bzpvLm5leHQoKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTpvLm5leHQoKX0pfSxzKEIpLEJbd109ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQltfXT1cIkdlbmVyYXRvclwiLEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgR2VuZXJhdG9yXVwifSxTLmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlLnJldmVyc2UoKSxmdW5jdGlvbiByKCl7Zm9yKDtlLmxlbmd0aDspe3ZhciBuPWUucG9wKCk7aWYobiBpbiB0KXJldHVybiByLnZhbHVlPW4sci5kb25lPSExLHJ9cmV0dXJuIHIuZG9uZT0hMCxyfX0sUy52YWx1ZXM9YixwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD15LHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy50cnlFbnRyaWVzLmZvckVhY2gobCksIXQpZm9yKHZhciBlIGluIHRoaXMpXCJ0XCI9PT1lLmNoYXJBdCgwKSYmbS5jYWxsKHRoaXMsZSkmJiFpc05hTigrZS5zbGljZSgxKSkmJih0aGlzW2VdPXkpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXSxlPXQuY29tcGxldGlvbjtpZihcInRocm93XCI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBvLnR5cGU9XCJ0aHJvd1wiLG8uYXJnPXQsci5uZXh0PWUsISFufWlmKHRoaXMuZG9uZSl0aHJvdyB0O2Zvcih2YXIgcj10aGlzLG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl0sbz1pLmNvbXBsZXRpb247aWYoXCJyb290XCI9PT1pLnRyeUxvYylyZXR1cm4gZShcImVuZFwiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgYT1tLmNhbGwoaSxcImNhdGNoTG9jXCIpLGY9bS5jYWxsKGksXCJmaW5hbGx5TG9jXCIpO2lmKGEmJmYpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBlKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIGUoaS5maW5hbGx5TG9jKX1lbHNlIGlmKGEpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBlKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWYpdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gZShpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgbj10aGlzLnRyeUVudHJpZXNbcl07aWYobi50cnlMb2M8PXRoaXMucHJldiYmbS5jYWxsKG4sXCJmaW5hbGx5TG9jXCIpJiZ0aGlzLnByZXY8bi5maW5hbGx5TG9jKXt2YXIgaT1uO2JyZWFrfX1pJiYoXCJicmVha1wiPT09dHx8XCJjb250aW51ZVwiPT09dCkmJmkudHJ5TG9jPD1lJiZlPD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGk/dGhpcy5uZXh0PWkuZmluYWxseUxvYzp0aGlzLmNvbXBsZXRlKG8pLEl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoXCJ0aHJvd1wiPT09dC50eXBlKXRocm93IHQuYXJnO1wiYnJlYWtcIj09PXQudHlwZXx8XCJjb250aW51ZVwiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzpcInJldHVyblwiPT09dC50eXBlPyh0aGlzLnJ2YWw9dC5hcmcsdGhpcy5uZXh0PVwiZW5kXCIpOlwibm9ybWFsXCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSl9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksbChyKSxJfX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPT09dCl7dmFyIG49ci5jb21wbGV0aW9uO2lmKFwidGhyb3dcIj09PW4udHlwZSl7dmFyIGk9bi5hcmc7bChyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6Yih0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSxJfX19KFwib2JqZWN0XCI9PXR5cGVvZiBlP2U6XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJvYmplY3RcIj09dHlwZW9mIHNlbGY/c2VsZjp0aGlzKX0pLmNhbGwoZSxyKDM5KSxyKDI2KSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDI5MCksdC5leHBvcnRzPXIoMzIpLlJlZ0V4cC5lc2NhcGV9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChlLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIHQuY2FsbChlLHIsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3JldHVybiB0LmNhbGwoZSxyLG4saSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3NyksaT1yKDE2NSkuZG9jdW1lbnQsbz1uKGkpJiZuKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE2NSksaT1yKDE2Myksbz1yKDI3MiksYT1yKDI3NSksZj1cInByb3RvdHlwZVwiLHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGgsYyxkPXQmcy5GLGw9dCZzLkcscD10JnMuUyxiPXQmcy5QLHY9dCZzLkIseT10JnMuVyxtPWw/aTppW2VdfHwoaVtlXT17fSksZz1tW2ZdLHc9bD9uOnA/bltlXToobltlXXx8e30pW2ZdO2wmJihyPWUpO2Zvcih1IGluIHIpaD0hZCYmdyYmdm9pZCAwIT09d1t1XSxoJiZ1IGluIG18fChjPWg/d1t1XTpyW3VdLG1bdV09bCYmXCJmdW5jdGlvblwiIT10eXBlb2Ygd1t1XT9yW3VdOnYmJmg/byhjLG4pOnkmJndbdV09PWM/ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oZSxyLG4pe2lmKHRoaXMgaW5zdGFuY2VvZiB0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KGUpO2Nhc2UgMjpyZXR1cm4gbmV3IHQoZSxyKX1yZXR1cm4gbmV3IHQoZSxyLG4pfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIGVbZl09dFtmXSxlfShjKTpiJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjP28oRnVuY3Rpb24uY2FsbCxjKTpjLGImJigobS52aXJ0dWFsfHwobS52aXJ0dWFsPXt9KSlbdV09Yyx0JnMuUiYmZyYmIWdbdV0mJmEoZyx1LGMpKSl9O3MuRj0xLHMuRz0yLHMuUz00LHMuUD04LHMuQj0xNixzLlc9MzIscy5VPTY0LHMuUj0xMjgsdC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI3OCksaT1yKDI3OSk7dC5leHBvcnRzPXIoMTE3KT9mdW5jdGlvbih0LGUscil7cmV0dXJuIG4uZih0LGUsaSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoMTE3KSYmIXIoMTY0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigyNzMpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDc3KSxpPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFuKHQpJiZpc0Zpbml0ZSh0KSYmaSh0KT09PXR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNzEpLGk9cigyNzYpLG89cigyODApLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZj1yKDExNyk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLGU9byhlLCEwKSxuKHIpLGkpdHJ5e3JldHVybiBhKHQsZSxyKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIHJ8fFwic2V0XCJpbiByKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiByJiYodFtlXT1yLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIW4odCkpcmV0dXJuIHQ7dmFyIHIsaTtpZihlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnZhbHVlT2YpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoIWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNzQpO24obi5TLFwiTnVtYmVyXCIse2lzSW50ZWdlcjpyKDI3Nyl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDEyNiksbz1yKDcpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIGkodCkmJihlPXQuY29uc3RydWN0b3IsXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8ZSE9PUFycmF5JiYhaShlLnByb3RvdHlwZSl8fChlPXZvaWQgMCksbihlKSYmKGU9ZVtvXSxudWxsPT09ZSYmKGU9dm9pZCAwKSkpLHZvaWQgMD09PWU/QXJyYXk6ZX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI4Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhuKHQpKShlKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDMpLGk9cigyOSksbz1cIm51bWJlclwiO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcInN0cmluZ1wiIT09dCYmdCE9PW8mJlwiZGVmYXVsdFwiIT09dCl0aHJvdyBUeXBlRXJyb3IoXCJJbmNvcnJlY3QgaGludFwiKTtyZXR1cm4gaShuKHRoaXMpLHQhPW8pfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDQpLGk9cig4Niksbz1yKDY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0KSxyPWkuZjtpZihyKWZvcih2YXIgYSxmPXIodCkscz1vLmYsdT0wO2YubGVuZ3RoPnU7KXMuY2FsbCh0LGE9Zlt1KytdKSYmZS5wdXNoKGEpO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDQpLGk9cigxNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG89aSh0KSxhPW4obyksZj1hLmxlbmd0aCxzPTA7Zj5zOylpZihvW3I9YVtzKytdXT09PWUpcmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigyODgpLGk9cig4Miksbz1yKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9byh0aGlzKSxlPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShlKSxhPTAsZj1uLl8scz0hMTtlPmE7KShyW2FdPWFyZ3VtZW50c1thKytdKT09PWYmJihzPSEwKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbixvPXRoaXMsYT1hcmd1bWVudHMubGVuZ3RoLHU9MCxoPTA7aWYoIXMmJiFhKXJldHVybiBpKHQscixvKTtpZihuPXIuc2xpY2UoKSxzKWZvcig7ZT51O3UrKyluW3VdPT09ZiYmKG5bdV09YXJndW1lbnRzW2grK10pO2Zvcig7YT5oOyluLnB1c2goYXJndW1lbnRzW2grK10pO3JldHVybiBpKHQsbixvKX19fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoNCl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT09PU9iamVjdChlKT9mdW5jdGlvbih0KXtyZXR1cm4gZVt0XX06ZTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKHQscil9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDI4OSkoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLFwiXFxcXCQmXCIpO24obi5TLFwiUmVnRXhwXCIse2VzY2FwZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlAsXCJBcnJheVwiLHtjb3B5V2l0aGluOnIoMTY3KX0pLHIoNTQpKFwiY29weVdpdGhpblwiKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSg0KTtuKG4uUCtuLkYqIXIoMjUpKFtdLmV2ZXJ5LCEwKSxcIkFycmF5XCIse2V2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUCxcIkFycmF5XCIse2ZpbGw6cigxMTgpfSkscig1NCkoXCJmaWxsXCIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDIpO24obi5QK24uRiohcigyNSkoW10uZmlsdGVyLCEwKSxcIkFycmF5XCIse2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSg2KSxvPVwiZmluZEluZGV4XCIsYT0hMDtvIGluW10mJkFycmF5KDEpW29dKGZ1bmN0aW9uKCl7YT0hMX0pLG4obi5QK24uRiphLFwiQXJyYXlcIix7ZmluZEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSkscig1NCkobyl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoNSksbz1cImZpbmRcIixhPSEwO28gaW5bXSYmQXJyYXkoMSlbb10oZnVuY3Rpb24oKXthPSExfSksbihuLlArbi5GKmEsXCJBcnJheVwiLHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSkscig1NCkobyl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoMCksbz1yKDI1KShbXS5mb3JFYWNoLCEwKTtuKG4uUCtuLkYqIW8sXCJBcnJheVwiLHtmb3JFYWNoOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigzMyksaT1yKDApLG89cigxMSksYT1yKDE3NiksZj1yKDEyNSkscz1yKDEwKSx1PXIoMTE5KSxoPXIoMTQyKTtpKGkuUytpLkYqIXIoODQpKGZ1bmN0aW9uKHQpe0FycmF5LmZyb20odCl9KSxcIkFycmF5XCIse2Zyb206ZnVuY3Rpb24odCl7dmFyIGUscixpLGMsZD1vKHQpLGw9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LHA9YXJndW1lbnRzLmxlbmd0aCxiPXA+MT9hcmd1bWVudHNbMV06dm9pZCAwLHY9dm9pZCAwIT09Yix5PTAsbT1oKGQpO2lmKHYmJihiPW4oYixwPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksdm9pZCAwPT1tfHxsPT1BcnJheSYmZihtKSlmb3IoZT1zKGQubGVuZ3RoKSxyPW5ldyBsKGUpO2U+eTt5KyspdShyLHksdj9iKGRbeV0seSk6ZFt5XSk7ZWxzZSBmb3IoYz1tLmNhbGwoZCkscj1uZXcgbDshKGk9Yy5uZXh0KCkpLmRvbmU7eSsrKXUocix5LHY/YShjLGIsW2kudmFsdWUseV0sITApOmkudmFsdWUpO3JldHVybiByLmxlbmd0aD15LHJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cig3OCkoITEpLG89W10uaW5kZXhPZixhPSEhbyYmMS9bMV0uaW5kZXhPZigxLC0wKTwwO24obi5QK24uRiooYXx8IXIoMjUpKG8pKSxcIkFycmF5XCIse2luZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGE/by5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA6aSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJBcnJheVwiLHtpc0FycmF5OnIoMTI2KX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTcpLG89W10uam9pbjtuKG4uUCtuLkYqKHIoNjUpIT1PYmplY3R8fCFyKDI1KShvKSksXCJBcnJheVwiLHtqb2luOmZ1bmN0aW9uKHQpe3JldHVybiBvLmNhbGwoaSh0aGlzKSx2b2lkIDA9PT10P1wiLFwiOnQpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTcpLG89cigzOCksYT1yKDEwKSxmPVtdLmxhc3RJbmRleE9mLHM9ISFmJiYxL1sxXS5sYXN0SW5kZXhPZigxLC0wKTwwO24obi5QK24uRiooc3x8IXIoMjUpKGYpKSxcIkFycmF5XCIse2xhc3RJbmRleE9mOmZ1bmN0aW9uKHQpe2lmKHMpcmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwO3ZhciBlPWkodGhpcykscj1hKGUubGVuZ3RoKSxuPXItMTtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYobj1NYXRoLm1pbihuLG8oYXJndW1lbnRzWzFdKSkpLG48MCYmKG49cituKTtuPj0wO24tLSlpZihuIGluIGUmJmVbbl09PT10KXJldHVybiBufHwwO3JldHVybi0xfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDEpO24obi5QK24uRiohcigyNSkoW10ubWFwLCEwKSxcIkFycmF5XCIse21hcDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExOSk7bihuLlMrbi5GKnIoNSkoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoQXJyYXkub2YuY2FsbCh0KWluc3RhbmNlb2YgdCl9KSxcIkFycmF5XCIse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3KFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSkoZSk7ZT50OylpKHIsdCxhcmd1bWVudHNbdCsrXSk7cmV0dXJuIHIubGVuZ3RoPWUscn19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE2OSk7bihuLlArbi5GKiFyKDI1KShbXS5yZWR1Y2VSaWdodCwhMCksXCJBcnJheVwiLHtyZWR1Y2VSaWdodDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHNbMV0sITApfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTY5KTtuKG4uUCtuLkYqIXIoMjUpKFtdLnJlZHVjZSwhMCksXCJBcnJheVwiLHtyZWR1Y2U6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCExKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEyMyksbz1yKDIzKSxhPXIoNDcpLGY9cigxMCkscz1bXS5zbGljZTtuKG4uUCtuLkYqcig1KShmdW5jdGlvbigpe2kmJnMuY2FsbChpKX0pLFwiQXJyYXlcIix7c2xpY2U6ZnVuY3Rpb24odCxlKXt2YXIgcj1mKHRoaXMubGVuZ3RoKSxuPW8odGhpcyk7aWYoZT12b2lkIDA9PT1lP3I6ZSxcIkFycmF5XCI9PW4pcmV0dXJuIHMuY2FsbCh0aGlzLHQsZSk7Zm9yKHZhciBpPWEodCxyKSx1PWEoZSxyKSxoPWYodS1pKSxjPUFycmF5KGgpLGQ9MDtkPGg7ZCsrKWNbZF09XCJTdHJpbmdcIj09bj90aGlzLmNoYXJBdChpK2QpOnRoaXNbaStkXTtyZXR1cm4gY319KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSgzKTtuKG4uUCtuLkYqIXIoMjUpKFtdLnNvbWUsITApLFwiQXJyYXlcIix7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEzKSxvPXIoMTEpLGE9cig1KSxmPVtdLnNvcnQscz1bMSwyLDNdO24obi5QK24uRiooYShmdW5jdGlvbigpe3Muc29ydCh2b2lkIDApfSl8fCFhKGZ1bmN0aW9uKCl7cy5zb3J0KG51bGwpfSl8fCFyKDI1KShmKSksXCJBcnJheVwiLHtzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P2YuY2FsbChvKHRoaXMpKTpmLmNhbGwobyh0aGlzKSxpKHQpKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoNDYpKFwiQXJyYXlcIil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiRGF0ZVwiLHtub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDUpLG89RGF0ZS5wcm90b3R5cGUuZ2V0VGltZSxhPWZ1bmN0aW9uKHQpe3JldHVybiB0Pjk/dDpcIjBcIit0fTtuKG4uUCtuLkYqKGkoZnVuY3Rpb24oKXtyZXR1cm5cIjAzODUtMDctMjVUMDc6MDY6MzkuOTk5WlwiIT1uZXcgRGF0ZSgtNWUxMy0xKS50b0lTT1N0cmluZygpfSl8fCFpKGZ1bmN0aW9uKCl7bmV3IERhdGUoTmFOKS50b0lTT1N0cmluZygpfSkpLFwiRGF0ZVwiLHt0b0lTT1N0cmluZzpmdW5jdGlvbigpe2lmKCFpc0Zpbml0ZShvLmNhbGwodGhpcykpKXRocm93IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHRpbWUgdmFsdWVcIik7dmFyIHQ9dGhpcyxlPXQuZ2V0VVRDRnVsbFllYXIoKSxyPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksbj1lPDA/XCItXCI6ZT45OTk5P1wiK1wiOlwiXCI7cmV0dXJuIG4rKFwiMDAwMDBcIitNYXRoLmFicyhlKSkuc2xpY2Uobj8tNjotNCkrXCItXCIrYSh0LmdldFVUQ01vbnRoKCkrMSkrXCItXCIrYSh0LmdldFVUQ0RhdGUoKSkrXCJUXCIrYSh0LmdldFVUQ0hvdXJzKCkpK1wiOlwiK2EodC5nZXRVVENNaW51dGVzKCkpK1wiOlwiK2EodC5nZXRVVENTZWNvbmRzKCkpK1wiLlwiKyhyPjk5P3I6XCIwXCIrYShyKSkrXCJaXCJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMSksbz1yKDI5KTtuKG4uUCtuLkYqcig1KShmdW5jdGlvbigpe3JldHVybiBudWxsIT09bmV3IERhdGUoTmFOKS50b0pTT04oKXx8MSE9PURhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHt0b0lTT1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAxfX0pfSksXCJEYXRlXCIse3RvSlNPTjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLHI9byhlKTtyZXR1cm5cIm51bWJlclwiIT10eXBlb2Ygcnx8aXNGaW5pdGUocik/ZS50b0lTT1N0cmluZygpOm51bGx9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDcpKFwidG9QcmltaXRpdmVcIiksaT1EYXRlLnByb3RvdHlwZTtuIGluIGl8fHIoMTQpKGksbixyKDI4NCkpfSxmdW5jdGlvbih0LGUscil7dmFyIG49RGF0ZS5wcm90b3R5cGUsaT1cIkludmFsaWQgRGF0ZVwiLG89XCJ0b1N0cmluZ1wiLGE9bltvXSxmPW4uZ2V0VGltZTtuZXcgRGF0ZShOYU4pK1wiXCIhPWkmJnIoMTUpKG4sbyxmdW5jdGlvbigpe3ZhciB0PWYuY2FsbCh0aGlzKTtyZXR1cm4gdD09PXQ/YS5jYWxsKHRoaXMpOml9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlAsXCJGdW5jdGlvblwiLHtiaW5kOnIoMTcwKX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig2KSxpPXIoMjEpLG89cig3KShcImhhc0luc3RhbmNlXCIpLGE9RnVuY3Rpb24ucHJvdG90eXBlO28gaW4gYXx8cig5KS5mKGEsbyx7dmFsdWU6ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpc3x8IW4odCkpcmV0dXJuITE7aWYoIW4odGhpcy5wcm90b3R5cGUpKXJldHVybiB0IGluc3RhbmNlb2YgdGhpcztmb3IoO3Q9aSh0KTspaWYodGhpcy5wcm90b3R5cGU9PT10KXJldHVybiEwO3JldHVybiExfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig5KS5mLGk9cigzNyksbz1yKDEyKSxhPUZ1bmN0aW9uLnByb3RvdHlwZSxmPS9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLyxzPVwibmFtZVwiLHU9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH07cyBpbiBhfHxyKDgpJiZuKGEscyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXt2YXIgdD10aGlzLGU9KFwiXCIrdCkubWF0Y2goZilbMV07cmV0dXJuIG8odCxzKXx8IXUodCl8fG4odCxzLGkoNSxlKSksZX1jYXRjaCh0KXtyZXR1cm5cIlwifX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE3OCksbz1NYXRoLnNxcnQsYT1NYXRoLmFjb3NoO24obi5TK24uRiohKGEmJjcxMD09TWF0aC5mbG9vcihhKE51bWJlci5NQVhfVkFMVUUpKSYmYSgxLzApPT0xLzApLFwiTWF0aFwiLHthY29zaDpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk8MT9OYU46dD45NDkwNjI2NS42MjQyNTE1Nj9NYXRoLmxvZyh0KStNYXRoLkxOMjppKHQtMStvKHQtMSkqbyh0KzEpKX19KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGlzRmluaXRlKHQ9K3QpJiYwIT10P3Q8MD8tbigtdCk6TWF0aC5sb2codCtNYXRoLnNxcnQodCp0KzEpKTp0fXZhciBpPXIoMCksbz1NYXRoLmFzaW5oO2koaS5TK2kuRiohKG8mJjEvbygwKT4wKSxcIk1hdGhcIix7YXNpbmg6bn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPU1hdGguYXRhbmg7bihuLlMrbi5GKiEoaSYmMS9pKC0wKTwwKSxcIk1hdGhcIix7YXRhbmg6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KT90Ok1hdGgubG9nKCgxK3QpLygxLXQpKS8yfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTMwKTtuKG4uUyxcIk1hdGhcIix7Y2JydDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0PSt0KSpNYXRoLnBvdyhNYXRoLmFicyh0KSwxLzMpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7Y2x6MzI6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+Pj49MCk/MzEtTWF0aC5mbG9vcihNYXRoLmxvZyh0Ky41KSpNYXRoLkxPRzJFKTozMn19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1NYXRoLmV4cDtuKG4uUyxcIk1hdGhcIix7Y29zaDpmdW5jdGlvbih0KXtyZXR1cm4oaSh0PSt0KStpKC10KSkvMn19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEyOSk7bihuLlMrbi5GKihpIT1NYXRoLmV4cG0xKSxcIk1hdGhcIix7ZXhwbTE6aX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTMwKSxvPU1hdGgucG93LGE9bygyLC01MiksZj1vKDIsLTIzKSxzPW8oMiwxMjcpKigyLWYpLHU9bygyLC0xMjYpLGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQrMS9hLTEvYX07bihuLlMsXCJNYXRoXCIse2Zyb3VuZDpmdW5jdGlvbih0KXt2YXIgZSxyLG49TWF0aC5hYnModCksbz1pKHQpO3JldHVybiBuPHU/bypoKG4vdS9mKSp1KmY6KGU9KDErZi9hKSpuLHI9ZS0oZS1uKSxyPnN8fHIhPXI/byooMS8wKTpvKnIpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPU1hdGguYWJzO24obi5TLFwiTWF0aFwiLHtoeXBvdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLG89MCxhPTAsZj1hcmd1bWVudHMubGVuZ3RoLHM9MDthPGY7KXI9aShhcmd1bWVudHNbYSsrXSksczxyPyhuPXMvcixvPW8qbipuKzEscz1yKTpyPjA/KG49ci9zLG8rPW4qbik6bys9cjtyZXR1cm4gcz09PTEvMD8xLzA6cypNYXRoLnNxcnQobyl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9TWF0aC5pbXVsO24obi5TK24uRipyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIGkoNDI5NDk2NzI5NSw1KSE9LTV8fDIhPWkubGVuZ3RofSksXCJNYXRoXCIse2ltdWw6ZnVuY3Rpb24odCxlKXt2YXIgcj02NTUzNSxuPSt0LGk9K2Usbz1yJm4sYT1yJmk7cmV0dXJuIDB8byphKygociZuPj4+MTYpKmErbyoociZpPj4+MTYpPDwxNj4+PjApfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7bG9nMTA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2xvZzFwOnIoMTc4KX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7bG9nMjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtzaWduOnIoMTMwKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTI5KSxvPU1hdGguZXhwO24obi5TK24uRipyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIU1hdGguc2luaCgtMmUtMTcpIT0tMmUtMTd9KSxcIk1hdGhcIix7c2luaDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModD0rdCk8MT8oaSh0KS1pKC10KSkvMjoobyh0LTEpLW8oLXQtMSkpKihNYXRoLkUvMil9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMjkpLG89TWF0aC5leHA7bihuLlMsXCJNYXRoXCIse3Rhbmg6ZnVuY3Rpb24odCl7dmFyIGU9aSh0PSt0KSxyPWkoLXQpO3JldHVybiBlPT0xLzA/MTpyPT0xLzA/LTE6KGUtcikvKG8odCkrbygtdCkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7dHJ1bmM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MD9NYXRoLmZsb29yOk1hdGguY2VpbCkodCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQpLGk9cigxMiksbz1yKDIzKSxhPXIoMTI0KSxmPXIoMjkpLHM9cig1KSx1PXIoNDMpLmYsaD1yKDIwKS5mLGM9cig5KS5mLGQ9cig1OCkudHJpbSxsPVwiTnVtYmVyXCIscD1uW2xdLGI9cCx2PXAucHJvdG90eXBlLHk9byhyKDQyKSh2KSk9PWwsbT1cInRyaW1cImluIFN0cmluZy5wcm90b3R5cGUsZz1mdW5jdGlvbih0KXt2YXIgZT1mKHQsITEpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLmxlbmd0aD4yKXtlPW0/ZS50cmltKCk6ZChlLDMpO3ZhciByLG4saSxvPWUuY2hhckNvZGVBdCgwKTtpZig0Mz09PW98fDQ1PT09byl7aWYocj1lLmNoYXJDb2RlQXQoMiksODg9PT1yfHwxMjA9PT1yKXJldHVybiBOYU59ZWxzZSBpZig0OD09PW8pe3N3aXRjaChlLmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpuPTIsaT00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOm49OCxpPTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK2V9Zm9yKHZhciBhLHM9ZS5zbGljZSgyKSx1PTAsaD1zLmxlbmd0aDt1PGg7dSsrKWlmKGE9cy5jaGFyQ29kZUF0KHUpLGE8NDh8fGE+aSlyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChzLG4pfX1yZXR1cm4rZX07aWYoIXAoXCIgMG8xXCIpfHwhcChcIjBiMVwiKXx8cChcIisweDFcIikpe3A9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwxPzA6dCxyPXRoaXM7cmV0dXJuIHIgaW5zdGFuY2VvZiBwJiYoeT9zKGZ1bmN0aW9uKCl7di52YWx1ZU9mLmNhbGwocil9KTpvKHIpIT1sKT9hKG5ldyBiKGcoZSkpLHIscCk6ZyhlKX07Zm9yKHZhciB3LF89cig4KT91KGIpOlwiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXJcIi5zcGxpdChcIixcIiksTT0wO18ubGVuZ3RoPk07TSsrKWkoYix3PV9bTV0pJiYhaShwLHcpJiZjKHAsdyxoKGIsdykpO3AucHJvdG90eXBlPXYsdi5jb25zdHJ1Y3Rvcj1wLHIoMTUpKG4sbCxwKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTnVtYmVyXCIse0VQU0lMT046TWF0aC5wb3coMiwtNTIpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cig0KS5pc0Zpbml0ZTtuKG4uUyxcIk51bWJlclwiLHtpc0Zpbml0ZTpmdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdCYmaSh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJOdW1iZXJcIix7aXNJbnRlZ2VyOnIoMTc1KX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk51bWJlclwiLHtpc05hTjpmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE3NSksbz1NYXRoLmFicztuKG4uUyxcIk51bWJlclwiLHtpc1NhZmVJbnRlZ2VyOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiZvKHQpPD05MDA3MTk5MjU0NzQwOTkxfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk51bWJlclwiLHtNQVhfU0FGRV9JTlRFR0VSOjkwMDcxOTkyNTQ3NDA5OTF9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJOdW1iZXJcIix7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTg1KTtuKG4uUytuLkYqKE51bWJlci5wYXJzZUZsb2F0IT1pKSxcIk51bWJlclwiLHtwYXJzZUZsb2F0Oml9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4Nik7bihuLlMrbi5GKihOdW1iZXIucGFyc2VJbnQhPWkpLFwiTnVtYmVyXCIse3BhcnNlSW50Oml9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDM4KSxvPXIoMTY2KSxhPXIoMTM3KSxmPTEuLnRvRml4ZWQscz1NYXRoLmZsb29yLHU9WzAsMCwwLDAsMCwwXSxoPVwiTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiLGM9XCIwXCIsZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPWU7KytyPDY7KW4rPXQqdVtyXSx1W3JdPW4lMWU3LG49cyhuLzFlNyl9LGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTYscj0wOy0tZT49MDspcis9dVtlXSx1W2VdPXMoci90KSxyPXIldCoxZTd9LHA9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9NixlPVwiXCI7LS10Pj0wOylpZihcIlwiIT09ZXx8MD09PXR8fDAhPT11W3RdKXt2YXIgcj1TdHJpbmcodVt0XSk7ZT1cIlwiPT09ZT9yOmUrYS5jYWxsKGMsNy1yLmxlbmd0aCkrcn1yZXR1cm4gZX0sYj1mdW5jdGlvbih0LGUscil7cmV0dXJuIDA9PT1lP3I6ZSUyPT09MT9iKHQsZS0xLHIqdCk6Yih0KnQsZS8yLHIpfSx2PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtyPj00MDk2OyllKz0xMixyLz00MDk2O2Zvcig7cj49MjspZSs9MSxyLz0yO3JldHVybiBlfTtuKG4uUCtuLkYqKCEhZiYmKFwiMC4wMDBcIiE9PThlLTUudG9GaXhlZCgzKXx8XCIxXCIhPT0uOS50b0ZpeGVkKDApfHxcIjEuMjVcIiE9PTEuMjU1LnRvRml4ZWQoMil8fFwiMTAwMDAwMDAwMDAwMDAwMDEyOFwiIT09KDB4ZGUwYjZiM2E3NjQwMDgwKS50b0ZpeGVkKDApKXx8IXIoNSkoZnVuY3Rpb24oKXtmLmNhbGwoe30pfSkpLFwiTnVtYmVyXCIse3RvRml4ZWQ6ZnVuY3Rpb24odCl7dmFyIGUscixuLGYscz1vKHRoaXMsaCksdT1pKHQpLHk9XCJcIixtPWM7aWYodTwwfHx1PjIwKXRocm93IFJhbmdlRXJyb3IoaCk7aWYocyE9cylyZXR1cm5cIk5hTlwiO2lmKHM8PS0xZTIxfHxzPj0xZTIxKXJldHVybiBTdHJpbmcocyk7aWYoczwwJiYoeT1cIi1cIixzPS1zKSxzPjFlLTIxKWlmKGU9dihzKmIoMiw2OSwxKSktNjkscj1lPDA/cypiKDIsLWUsMSk6cy9iKDIsZSwxKSxyKj00NTAzNTk5NjI3MzcwNDk2LGU9NTItZSxlPjApe2ZvcihkKDAsciksbj11O24+PTc7KWQoMWU3LDApLG4tPTc7Zm9yKGQoYigxMCxuLDEpLDApLG49ZS0xO24+PTIzOylsKDE8PDIzKSxuLT0yMztsKDE8PG4pLGQoMSwxKSxsKDIpLG09cCgpfWVsc2UgZCgwLHIpLGQoMTw8LWUsMCksbT1wKCkrYS5jYWxsKGMsdSk7cmV0dXJuIHU+MD8oZj1tLmxlbmd0aCxtPXkrKGY8PXU/XCIwLlwiK2EuY2FsbChjLHUtZikrbTptLnNsaWNlKDAsZi11KStcIi5cIittLnNsaWNlKGYtdSkpKTptPXkrbSxtfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoNSksbz1yKDE2NiksYT0xLi50b1ByZWNpc2lvbjtuKG4uUCtuLkYqKGkoZnVuY3Rpb24oKXtyZXR1cm5cIjFcIiE9PWEuY2FsbCgxLHZvaWQgMCl9KXx8IWkoZnVuY3Rpb24oKXthLmNhbGwoe30pfSkpLFwiTnVtYmVyXCIse3RvUHJlY2lzaW9uOmZ1bmN0aW9uKHQpe3ZhciBlPW8odGhpcyxcIk51bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hXCIpO3JldHVybiB2b2lkIDA9PT10P2EuY2FsbChlKTphLmNhbGwoZSx0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMrbi5GLFwiT2JqZWN0XCIse2Fzc2lnbjpyKDE3OSl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJPYmplY3RcIix7Y3JlYXRlOnIoNDIpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TK24uRiohcig4KSxcIk9iamVjdFwiLHtkZWZpbmVQcm9wZXJ0aWVzOnIoMTgwKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUytuLkYqIXIoOCksXCJPYmplY3RcIix7ZGVmaW5lUHJvcGVydHk6cig5KS5mfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigzNikub25GcmVlemU7cigyOCkoXCJmcmVlemVcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm4oZSk/dChpKGUpKTplfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxNyksaT1yKDIwKS5mO3IoMjgpKFwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuKHQpLGUpfX0pfSxmdW5jdGlvbih0LGUscil7cigyOCkoXCJnZXRPd25Qcm9wZXJ0eU5hbWVzXCIsZnVuY3Rpb24oKXtyZXR1cm4gcigxODEpLmZ9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTEpLGk9cigyMSk7cigyOCkoXCJnZXRQcm90b3R5cGVPZlwiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KTtyKDI4KShcImlzRXh0ZW5zaWJsZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4hIW4oZSkmJighdHx8dChlKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpO3IoMjgpKFwiaXNGcm96ZW5cIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIW4oZSl8fCEhdCYmdChlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNik7cigyOCkoXCJpc1NlYWxlZFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4hbihlKXx8ISF0JiZ0KGUpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk9iamVjdFwiLHtpczpyKDE4Nyl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTEpLGk9cig0NCk7cigyOCkoXCJrZXlzXCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigzNikub25GcmVlemU7cigyOCkoXCJwcmV2ZW50RXh0ZW5zaW9uc1wiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCYmbihlKT90KGkoZSkpOmV9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigzNikub25GcmVlemU7cigyOCkoXCJzZWFsXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiZuKGUpP3QoaShlKSk6ZX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJPYmplY3RcIix7c2V0UHJvdG90eXBlT2Y6cigxMzIpLnNldH0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig2NCksaT17fTtpW3IoNykoXCJ0b1N0cmluZ1RhZ1wiKV09XCJ6XCIsaStcIlwiIT1cIltvYmplY3Qgel1cIiYmcigxNSkoT2JqZWN0LnByb3RvdHlwZSxcInRvU3RyaW5nXCIsZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgXCIrbih0aGlzKStcIl1cIn0sITApfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTg1KTtuKG4uRytuLkYqKHBhcnNlRmxvYXQhPWkpLHtwYXJzZUZsb2F0Oml9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4Nik7bihuLkcrbi5GKihwYXJzZUludCE9aSkse3BhcnNlSW50Oml9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGksbyxhPXIoNDEpLGY9cig0KSxzPXIoMzMpLHU9cig2NCksaD1yKDApLGM9cig2KSxkPXIoMTMpLGw9cig0MCkscD1yKDU1KSxiPXIoMTM0KSx2PXIoMTM5KS5zZXQseT1yKDEzMSkoKSxtPVwiUHJvbWlzZVwiLGc9Zi5UeXBlRXJyb3Isdz1mLnByb2Nlc3MsXz1mW21dLHc9Zi5wcm9jZXNzLE09XCJwcm9jZXNzXCI9PXUodyksUz1mdW5jdGlvbigpe30sRT0hIWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PV8ucmVzb2x2ZSgxKSxlPSh0LmNvbnN0cnVjdG9yPXt9KVtyKDcpKFwic3BlY2llc1wiKV09ZnVuY3Rpb24odCl7dChTLFMpfTtyZXR1cm4oTXx8XCJmdW5jdGlvblwiPT10eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50KSYmdC50aGVuKFMpaW5zdGFuY2VvZiBlfWNhdGNoKHQpe319KCksQT1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dD09PV8mJmU9PT1vfSxrPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiEoIWModCl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mKGU9dC50aGVuKSkmJmV9LHg9ZnVuY3Rpb24odCl7cmV0dXJuIEEoXyx0KT9uZXcgSSh0KTpuZXcgaSh0KX0sST1pPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5wcm9taXNlPW5ldyB0KGZ1bmN0aW9uKHQsbil7aWYodm9pZCAwIT09ZXx8dm9pZCAwIT09cil0aHJvdyBnKFwiQmFkIFByb21pc2UgY29uc3RydWN0b3JcIik7ZT10LHI9bn0pLHRoaXMucmVzb2x2ZT1kKGUpLHRoaXMucmVqZWN0PWQocil9LEI9ZnVuY3Rpb24odCl7dHJ5e3QoKX1jYXRjaCh0KXtyZXR1cm57ZXJyb3I6dH19fSxPPWZ1bmN0aW9uKHQsZSl7aWYoIXQuX24pe3QuX249ITA7dmFyIHI9dC5fYzt5KGZ1bmN0aW9uKCl7Zm9yKHZhciBuPXQuX3YsaT0xPT10Ll9zLG89MCxhPWZ1bmN0aW9uKGUpe3ZhciByLG8sYT1pP2Uub2s6ZS5mYWlsLGY9ZS5yZXNvbHZlLHM9ZS5yZWplY3QsdT1lLmRvbWFpbjt0cnl7YT8oaXx8KDI9PXQuX2gmJlQodCksdC5faD0xKSxhPT09ITA/cj1uOih1JiZ1LmVudGVyKCkscj1hKG4pLHUmJnUuZXhpdCgpKSxyPT09ZS5wcm9taXNlP3MoZyhcIlByb21pc2UtY2hhaW4gY3ljbGVcIikpOihvPWsocikpP28uY2FsbChyLGYscyk6ZihyKSk6cyhuKX1jYXRjaCh0KXtzKHQpfX07ci5sZW5ndGg+bzspYShyW28rK10pO3QuX2M9W10sdC5fbj0hMSxlJiYhdC5faCYmUih0KX0pfX0sUj1mdW5jdGlvbih0KXt2LmNhbGwoZixmdW5jdGlvbigpe3ZhciBlLHIsbixpPXQuX3Y7aWYoUCh0KSYmKGU9QihmdW5jdGlvbigpe00/dy5lbWl0KFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsaSx0KToocj1mLm9udW5oYW5kbGVkcmVqZWN0aW9uKT9yKHtwcm9taXNlOnQscmVhc29uOml9KToobj1mLmNvbnNvbGUpJiZuLmVycm9yJiZuLmVycm9yKFwiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXCIsaSl9KSx0Ll9oPU18fFAodCk/MjoxKSx0Ll9hPXZvaWQgMCxlKXRocm93IGUuZXJyb3J9KX0sUD1mdW5jdGlvbih0KXtpZigxPT10Ll9oKXJldHVybiExO2Zvcih2YXIgZSxyPXQuX2F8fHQuX2Msbj0wO3IubGVuZ3RoPm47KWlmKGU9cltuKytdLGUuZmFpbHx8IVAoZS5wcm9taXNlKSlyZXR1cm4hMTtyZXR1cm4hMH0sVD1mdW5jdGlvbih0KXt2LmNhbGwoZixmdW5jdGlvbigpe3ZhciBlO00/dy5lbWl0KFwicmVqZWN0aW9uSGFuZGxlZFwiLHQpOihlPWYub25yZWplY3Rpb25oYW5kbGVkKSYmZSh7cHJvbWlzZTp0LHJlYXNvbjp0Ll92fSl9KX0saj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2UuX2R8fChlLl9kPSEwLGU9ZS5fd3x8ZSxlLl92PXQsZS5fcz0yLGUuX2F8fChlLl9hPWUuX2Muc2xpY2UoKSksTyhlLCEwKSl9LEM9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzO2lmKCFyLl9kKXtyLl9kPSEwLHI9ci5fd3x8cjt0cnl7aWYocj09PXQpdGhyb3cgZyhcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpOyhlPWsodCkpP3koZnVuY3Rpb24oKXt2YXIgbj17X3c6cixfZDohMX07dHJ5e2UuY2FsbCh0LHMoQyxuLDEpLHMoaixuLDEpKX1jYXRjaCh0KXtqLmNhbGwobix0KX19KTooci5fdj10LHIuX3M9MSxPKHIsITEpKX1jYXRjaCh0KXtqLmNhbGwoe193OnIsX2Q6ITF9LHQpfX19O0V8fChfPWZ1bmN0aW9uKHQpe2wodGhpcyxfLG0sXCJfaFwiKSxkKHQpLG4uY2FsbCh0aGlzKTt0cnl7dChzKEMsdGhpcywxKSxzKGosdGhpcywxKSl9Y2F0Y2godCl7ai5jYWxsKHRoaXMsdCl9fSxuPWZ1bmN0aW9uKHQpe3RoaXMuX2M9W10sdGhpcy5fYT12b2lkIDAsdGhpcy5fcz0wLHRoaXMuX2Q9ITEsdGhpcy5fdj12b2lkIDAsdGhpcy5faD0wLHRoaXMuX249ITF9LG4ucHJvdG90eXBlPXIoNDUpKF8ucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uKHQsZSl7dmFyIHI9eChiKHRoaXMsXykpO3JldHVybiByLm9rPVwiZnVuY3Rpb25cIiE9dHlwZW9mIHR8fHQsci5mYWlsPVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUsci5kb21haW49TT93LmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKHIpLHRoaXMuX2EmJnRoaXMuX2EucHVzaChyKSx0aGlzLl9zJiZPKHRoaXMsITEpLHIucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9fSksST1mdW5jdGlvbigpe3ZhciB0PW5ldyBuO3RoaXMucHJvbWlzZT10LHRoaXMucmVzb2x2ZT1zKEMsdCwxKSx0aGlzLnJlamVjdD1zKGosdCwxKX0pLGgoaC5HK2guVytoLkYqIUUse1Byb21pc2U6X30pLHIoNTcpKF8sbSkscig0NikobSksbz1yKDMyKVttXSxoKGguUytoLkYqIUUsbSx7cmVqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXgodGhpcykscj1lLnJlamVjdDtyZXR1cm4gcih0KSxlLnByb21pc2V9fSksaChoLlMraC5GKihhfHwhRSksbSx7cmVzb2x2ZTpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgXyYmQSh0LmNvbnN0cnVjdG9yLHRoaXMpKXJldHVybiB0O3ZhciBlPXgodGhpcykscj1lLnJlc29sdmU7cmV0dXJuIHIodCksZS5wcm9taXNlfX0pLGgoaC5TK2guRiohKEUmJnIoODQpKGZ1bmN0aW9uKHQpe18uYWxsKHQpLmNhdGNoKFMpfSkpLG0se2FsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9eChlKSxuPXIucmVzb2x2ZSxpPXIucmVqZWN0LG89QihmdW5jdGlvbigpe3ZhciByPVtdLG89MCxhPTE7cCh0LCExLGZ1bmN0aW9uKHQpe3ZhciBmPW8rKyxzPSExO3IucHVzaCh2b2lkIDApLGErKyxlLnJlc29sdmUodCkudGhlbihmdW5jdGlvbih0KXtzfHwocz0hMCxyW2ZdPXQsLS1hfHxuKHIpKX0saSl9KSwtLWF8fG4ocil9KTtyZXR1cm4gbyYmaShvLmVycm9yKSxyLnByb21pc2V9LHJhY2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXgoZSksbj1yLnJlamVjdCxpPUIoZnVuY3Rpb24oKXtwKHQsITEsZnVuY3Rpb24odCl7ZS5yZXNvbHZlKHQpLnRoZW4oci5yZXNvbHZlLG4pfSl9KTtyZXR1cm4gaSYmbihpLmVycm9yKSxyLnByb21pc2V9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMyksbz1yKDMpLGE9KHIoNCkuUmVmbGVjdHx8e30pLmFwcGx5LGY9RnVuY3Rpb24uYXBwbHk7bihuLlMrbi5GKiFyKDUpKGZ1bmN0aW9uKCl7YShmdW5jdGlvbigpe30pfSksXCJSZWZsZWN0XCIse2FwcGx5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pKHQpLHM9byhyKTtyZXR1cm4gYT9hKG4sZSxzKTpmLmNhbGwobixlLHMpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoNDIpLG89cigxMyksYT1yKDMpLGY9cig2KSxzPXIoNSksdT1yKDE3MCksaD0ocig0KS5SZWZsZWN0fHx7fSkuY29uc3RydWN0LGM9cyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIShoKGZ1bmN0aW9uKCl7fSxbXSx0KWluc3RhbmNlb2YgdCl9KSxkPSFzKGZ1bmN0aW9uKCl7aChmdW5jdGlvbigpe30pfSk7bihuLlMrbi5GKihjfHxkKSxcIlJlZmxlY3RcIix7Y29uc3RydWN0OmZ1bmN0aW9uKHQsZSl7byh0KSxhKGUpO3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mz90Om8oYXJndW1lbnRzWzJdKTtpZihkJiYhYylyZXR1cm4gaCh0LGUscik7aWYodD09cil7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQoZVswXSk7Y2FzZSAyOnJldHVybiBuZXcgdChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0sZVszXSl9dmFyIG49W251bGxdO3JldHVybiBuLnB1c2guYXBwbHkobixlKSxuZXcodS5hcHBseSh0LG4pKX12YXIgcz1yLnByb3RvdHlwZSxsPWkoZihzKT9zOk9iamVjdC5wcm90b3R5cGUpLHA9RnVuY3Rpb24uYXBwbHkuY2FsbCh0LGwsZSk7cmV0dXJuIGYocCk/cDpsfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig5KSxpPXIoMCksbz1yKDMpLGE9cigyOSk7aShpLlMraS5GKnIoNSkoZnVuY3Rpb24oKXtSZWZsZWN0LmRlZmluZVByb3BlcnR5KG4uZih7fSwxLHt2YWx1ZToxfSksMSx7dmFsdWU6Mn0pfSksXCJSZWZsZWN0XCIse2RlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtvKHQpLGU9YShlLCEwKSxvKHIpO3RyeXtyZXR1cm4gbi5mKHQsZSxyKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigyMCkuZixvPXIoMyk7bihuLlMsXCJSZWZsZWN0XCIse2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7dmFyIHI9aShvKHQpLGUpO3JldHVybiEociYmIXIuY29uZmlndXJhYmxlKSYmZGVsZXRlIHRbZV19fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigzKSxvPWZ1bmN0aW9uKHQpe3RoaXMuX3Q9aSh0KSx0aGlzLl9pPTA7dmFyIGUscj10aGlzLl9rPVtdO2ZvcihlIGluIHQpci5wdXNoKGUpfTtyKDEyNykobyxcIk9iamVjdFwiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLHI9ZS5faztkbyBpZihlLl9pPj1yLmxlbmd0aClyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9O3doaWxlKCEoKHQ9cltlLl9pKytdKWluIGUuX3QpKTtyZXR1cm57dmFsdWU6dCxkb25lOiExfX0pLG4obi5TLFwiUmVmbGVjdFwiLHtlbnVtZXJhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMCksaT1yKDApLG89cigzKTtpKGkuUyxcIlJlZmxlY3RcIix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uZihvKHQpLGUpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMjEpLG89cigzKTtuKG4uUyxcIlJlZmxlY3RcIix7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGkobyh0KSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsZixoPWFyZ3VtZW50cy5sZW5ndGg8Mz90OmFyZ3VtZW50c1syXTtyZXR1cm4gdSh0KT09PWg/dFtlXToocj1pLmYodCxlKSk/YShyLFwidmFsdWVcIik/ci52YWx1ZTp2b2lkIDAhPT1yLmdldD9yLmdldC5jYWxsKGgpOnZvaWQgMDpzKGY9byh0KSk/bihmLGUsaCk6dm9pZCAwfXZhciBpPXIoMjApLG89cigyMSksYT1yKDEyKSxmPXIoMCkscz1yKDYpLHU9cigzKTtmKGYuUyxcIlJlZmxlY3RcIix7Z2V0Om59KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJSZWZsZWN0XCIse2hhczpmdW5jdGlvbih0LGUpe3JldHVybiBlIGluIHR9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigzKSxvPU9iamVjdC5pc0V4dGVuc2libGU7bihuLlMsXCJSZWZsZWN0XCIse2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSwhb3x8byh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJSZWZsZWN0XCIse293bktleXM6cigxODQpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigzKSxvPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztuKG4uUyxcIlJlZmxlY3RcIix7cHJldmVudEV4dGVuc2lvbnM6ZnVuY3Rpb24odCl7aSh0KTt0cnl7cmV0dXJuIG8mJm8odCksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTMyKTtpJiZuKG4uUyxcIlJlZmxlY3RcIix7c2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCxlKXtpLmNoZWNrKHQsZSk7dHJ5e3JldHVybiBpLnNldCh0LGUpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBzLGQsbD1hcmd1bWVudHMubGVuZ3RoPDQ/dDphcmd1bWVudHNbM10scD1vLmYoaCh0KSxlKTtpZighcCl7aWYoYyhkPWEodCkpKXJldHVybiBuKGQsZSxyLGwpO3A9dSgwKX1yZXR1cm4gZihwLFwidmFsdWVcIik/IShwLndyaXRhYmxlPT09ITF8fCFjKGwpKSYmKHM9by5mKGwsZSl8fHUoMCkscy52YWx1ZT1yLGkuZihsLGUscyksITApOnZvaWQgMCE9PXAuc2V0JiYocC5zZXQuY2FsbChsLHIpLCEwKX12YXIgaT1yKDkpLG89cigyMCksYT1yKDIxKSxmPXIoMTIpLHM9cigwKSx1PXIoMzcpLGg9cigzKSxjPXIoNik7cyhzLlMsXCJSZWZsZWN0XCIse3NldDpufSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigxMjQpLG89cig5KS5mLGE9cig0MykuZixmPXIoODMpLHM9cig4MSksdT1uLlJlZ0V4cCxoPXUsYz11LnByb3RvdHlwZSxkPS9hL2csbD0vYS9nLHA9bmV3IHUoZCkhPT1kO2lmKHIoOCkmJighcHx8cig1KShmdW5jdGlvbigpe3JldHVybiBsW3IoNykoXCJtYXRjaFwiKV09ITEsdShkKSE9ZHx8dShsKT09bHx8XCIvYS9pXCIhPXUoZCxcImlcIil9KSkpe3U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzIGluc3RhbmNlb2YgdSxuPWYodCksbz12b2lkIDA9PT1lO3JldHVybiFyJiZuJiZ0LmNvbnN0cnVjdG9yPT09dSYmbz90OmkocD9uZXcgaChuJiYhbz90LnNvdXJjZTp0LGUpOmgoKG49dCBpbnN0YW5jZW9mIHUpP3Quc291cmNlOnQsbiYmbz9zLmNhbGwodCk6ZSkscj90aGlzOmMsdSl9O2Zvcih2YXIgYj0oZnVuY3Rpb24odCl7dCBpbiB1fHxvKHUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoW3RdfSxzZXQ6ZnVuY3Rpb24oZSl7aFt0XT1lfX0pfSksdj1hKGgpLHk9MDt2Lmxlbmd0aD55OyliKHZbeSsrXSk7Yy5jb25zdHJ1Y3Rvcj11LHUucHJvdG90eXBlPWMscigxNSkobixcIlJlZ0V4cFwiLHUpfXIoNDYpKFwiUmVnRXhwXCIpfSxmdW5jdGlvbih0LGUscil7cig4MCkoXCJtYXRjaFwiLDEsZnVuY3Rpb24odCxlLHIpe3JldHVybltmdW5jdGlvbihyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KHRoaXMpLGk9dm9pZCAwPT1yP3ZvaWQgMDpyW2VdO3JldHVybiB2b2lkIDAhPT1pP2kuY2FsbChyLG4pOm5ldyBSZWdFeHAocilbZV0oU3RyaW5nKG4pKX0scl19KX0sZnVuY3Rpb24odCxlLHIpe1xucig4MCkoXCJyZXBsYWNlXCIsMixmdW5jdGlvbih0LGUscil7cmV0dXJuW2Z1bmN0aW9uKG4saSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dCh0aGlzKSxhPXZvaWQgMD09bj92b2lkIDA6bltlXTtyZXR1cm4gdm9pZCAwIT09YT9hLmNhbGwobixvLGkpOnIuY2FsbChTdHJpbmcobyksbixpKX0scl19KX0sZnVuY3Rpb24odCxlLHIpe3IoODApKFwic2VhcmNoXCIsMSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2Z1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQodGhpcyksaT12b2lkIDA9PXI/dm9pZCAwOnJbZV07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKHIsbik6bmV3IFJlZ0V4cChyKVtlXShTdHJpbmcobikpfSxyXX0pfSxmdW5jdGlvbih0LGUscil7cig4MCkoXCJzcGxpdFwiLDIsZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciBpPXIoODMpLG89bixhPVtdLnB1c2gsZj1cInNwbGl0XCIscz1cImxlbmd0aFwiLHU9XCJsYXN0SW5kZXhcIjtpZihcImNcIj09XCJhYmJjXCJbZl0oLyhiKSovKVsxXXx8NCE9XCJ0ZXN0XCJbZl0oLyg/OikvLC0xKVtzXXx8MiE9XCJhYlwiW2ZdKC8oPzphYikqLylbc118fDQhPVwiLlwiW2ZdKC8oLj8pKC4/KS8pW3NdfHxcIi5cIltmXSgvKCkoKS8pW3NdPjF8fFwiXCJbZl0oLy4/Lylbc10pe3ZhciBoPXZvaWQgMD09PS8oKT8/Ly5leGVjKFwiXCIpWzFdO249ZnVuY3Rpb24odCxlKXt2YXIgcj1TdHJpbmcodGhpcyk7aWYodm9pZCAwPT09dCYmMD09PWUpcmV0dXJuW107aWYoIWkodCkpcmV0dXJuIG8uY2FsbChyLHQsZSk7dmFyIG4sZixjLGQsbCxwPVtdLGI9KHQuaWdub3JlQ2FzZT9cImlcIjpcIlwiKSsodC5tdWx0aWxpbmU/XCJtXCI6XCJcIikrKHQudW5pY29kZT9cInVcIjpcIlwiKSsodC5zdGlja3k/XCJ5XCI6XCJcIiksdj0wLHk9dm9pZCAwPT09ZT80Mjk0OTY3Mjk1OmU+Pj4wLG09bmV3IFJlZ0V4cCh0LnNvdXJjZSxiK1wiZ1wiKTtmb3IoaHx8KG49bmV3IFJlZ0V4cChcIl5cIittLnNvdXJjZStcIiQoPyFcXFxccylcIixiKSk7KGY9bS5leGVjKHIpKSYmKGM9Zi5pbmRleCtmWzBdW3NdLCEoYz52JiYocC5wdXNoKHIuc2xpY2UodixmLmluZGV4KSksIWgmJmZbc10+MSYmZlswXS5yZXBsYWNlKG4sZnVuY3Rpb24oKXtmb3IobD0xO2w8YXJndW1lbnRzW3NdLTI7bCsrKXZvaWQgMD09PWFyZ3VtZW50c1tsXSYmKGZbbF09dm9pZCAwKX0pLGZbc10+MSYmZi5pbmRleDxyW3NdJiZhLmFwcGx5KHAsZi5zbGljZSgxKSksZD1mWzBdW3NdLHY9YyxwW3NdPj15KSkpOyltW3VdPT09Zi5pbmRleCYmbVt1XSsrO3JldHVybiB2PT09cltzXT8hZCYmbS50ZXN0KFwiXCIpfHxwLnB1c2goXCJcIik6cC5wdXNoKHIuc2xpY2UodikpLHBbc10+eT9wLnNsaWNlKDAseSk6cH19ZWxzZVwiMFwiW2ZdKHZvaWQgMCwwKVtzXSYmKG49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dCYmMD09PWU/W106by5jYWxsKHRoaXMsdCxlKX0pO3JldHVybltmdW5jdGlvbihyLGkpe3ZhciBvPXQodGhpcyksYT12b2lkIDA9PXI/dm9pZCAwOnJbZV07cmV0dXJuIHZvaWQgMCE9PWE/YS5jYWxsKHIsbyxpKTpuLmNhbGwoU3RyaW5nKG8pLHIsaSl9LG5dfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE5MSk7dmFyIG49cigzKSxpPXIoODEpLG89cig4KSxhPVwidG9TdHJpbmdcIixmPS8uL1thXSxzPWZ1bmN0aW9uKHQpe3IoMTUpKFJlZ0V4cC5wcm90b3R5cGUsYSx0LCEwKX07cig1KShmdW5jdGlvbigpe3JldHVyblwiL2EvYlwiIT1mLmNhbGwoe3NvdXJjZTpcImFcIixmbGFnczpcImJcIn0pfSk/cyhmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7cmV0dXJuXCIvXCIuY29uY2F0KHQuc291cmNlLFwiL1wiLFwiZmxhZ3NcImluIHQ/dC5mbGFnczohbyYmdCBpbnN0YW5jZW9mIFJlZ0V4cD9pLmNhbGwodCk6dm9pZCAwKX0pOmYubmFtZSE9YSYmcyhmdW5jdGlvbigpe3JldHVybiBmLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiYW5jaG9yXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsXCJhXCIsXCJuYW1lXCIsZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImJpZ1wiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJiaWdcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJibGlua1wiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJibGlua1wiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImJvbGRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwiYlwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMzUpKCExKTtuKG4uUCxcIlN0cmluZ1wiLHtjb2RlUG9pbnRBdDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTApLG89cigxMzYpLGE9XCJlbmRzV2l0aFwiLGY9XCJcIlthXTtuKG4uUCtuLkYqcigxMjIpKGEpLFwiU3RyaW5nXCIse2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPW8odGhpcyx0LGEpLHI9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbj1pKGUubGVuZ3RoKSxzPXZvaWQgMD09PXI/bjpNYXRoLm1pbihpKHIpLG4pLHU9U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLHUscyk6ZS5zbGljZShzLXUubGVuZ3RoLHMpPT09dX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiZml4ZWRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwidHRcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJmb250Y29sb3JcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcyxcImZvbnRcIixcImNvbG9yXCIsZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImZvbnRzaXplXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsXCJmb250XCIsXCJzaXplXCIsZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cig0Nyksbz1TdHJpbmcuZnJvbUNoYXJDb2RlLGE9U3RyaW5nLmZyb21Db2RlUG9pbnQ7bihuLlMrbi5GKighIWEmJjEhPWEubGVuZ3RoKSxcIlN0cmluZ1wiLHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG49YXJndW1lbnRzLmxlbmd0aCxhPTA7bj5hOyl7aWYoZT0rYXJndW1lbnRzW2ErK10saShlLDExMTQxMTEpIT09ZSl0aHJvdyBSYW5nZUVycm9yKGUrXCIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludFwiKTtyLnB1c2goZTw2NTUzNj9vKGUpOm8oKChlLT02NTUzNik+PjEwKSs1NTI5NixlJTEwMjQrNTYzMjApKX1yZXR1cm4gci5qb2luKFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTM2KSxvPVwiaW5jbHVkZXNcIjtuKG4uUCtuLkYqcigxMjIpKG8pLFwiU3RyaW5nXCIse2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEhfmkodGhpcyx0LG8pLmluZGV4T2YodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcIml0YWxpY3NcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwiaVwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDEzNSkoITApO3IoMTI4KShTdHJpbmcsXCJTdHJpbmdcIixmdW5jdGlvbih0KXt0aGlzLl90PVN0cmluZyh0KSx0aGlzLl9pPTB9LGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLl90LHI9dGhpcy5faTtyZXR1cm4gcj49ZS5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD1uKGUsciksdGhpcy5faSs9dC5sZW5ndGgse3ZhbHVlOnQsZG9uZTohMX0pfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImxpbmtcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcyxcImFcIixcImhyZWZcIixlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE3KSxvPXIoMTApO24obi5TLFwiU3RyaW5nXCIse3JhdzpmdW5jdGlvbih0KXtmb3IodmFyIGU9aSh0LnJhdykscj1vKGUubGVuZ3RoKSxuPWFyZ3VtZW50cy5sZW5ndGgsYT1bXSxmPTA7cj5mOylhLnB1c2goU3RyaW5nKGVbZisrXSkpLGY8biYmYS5wdXNoKFN0cmluZyhhcmd1bWVudHNbZl0pKTtyZXR1cm4gYS5qb2luKFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUCxcIlN0cmluZ1wiLHtyZXBlYXQ6cigxMzcpfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcInNtYWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcInNtYWxsXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEwKSxvPXIoMTM2KSxhPVwic3RhcnRzV2l0aFwiLGY9XCJcIlthXTtuKG4uUCtuLkYqcigxMjIpKGEpLFwiU3RyaW5nXCIse3N0YXJ0c1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzLHQsYSkscj1pKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGUubGVuZ3RoKSksbj1TdHJpbmcodCk7cmV0dXJuIGY/Zi5jYWxsKGUsbixyKTplLnNsaWNlKHIscituLmxlbmd0aCk9PT1ufX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJzdHJpa2VcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwic3RyaWtlXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwic3ViXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcInN1YlwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcInN1cFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJzdXBcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cig1OCkoXCJ0cmltXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcywzKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDEyKSxvPXIoOCksYT1yKDApLGY9cigxNSkscz1yKDM2KS5LRVksdT1yKDUpLGg9cig4NyksYz1yKDU3KSxkPXIoNDgpLGw9cig3KSxwPXIoMTg5KSxiPXIoMTQxKSx2PXIoMjg2KSx5PXIoMjg1KSxtPXIoMTI2KSxnPXIoMyksdz1yKDE3KSxfPXIoMjkpLE09cigzNyksUz1yKDQyKSxFPXIoMTgxKSxBPXIoMjApLGs9cig5KSx4PXIoNDQpLEk9QS5mLEI9ay5mLE89RS5mLFI9bi5TeW1ib2wsUD1uLkpTT04sVD1QJiZQLnN0cmluZ2lmeSxqPVwicHJvdG90eXBlXCIsQz1sKFwiX2hpZGRlblwiKSxOPWwoXCJ0b1ByaW1pdGl2ZVwiKSxMPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLFU9aChcInN5bWJvbC1yZWdpc3RyeVwiKSx6PWgoXCJzeW1ib2xzXCIpLEQ9aChcIm9wLXN5bWJvbHNcIikscT1PYmplY3Rbal0sRj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBSLEs9bi5RT2JqZWN0LEc9IUt8fCFLW2pdfHwhS1tqXS5maW5kQ2hpbGQsVj1vJiZ1KGZ1bmN0aW9uKCl7cmV0dXJuIDchPVMoQih7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIodGhpcyxcImFcIix7dmFsdWU6N30pLmF9fSkpLmF9KT9mdW5jdGlvbih0LGUscil7dmFyIG49SShxLGUpO24mJmRlbGV0ZSBxW2VdLEIodCxlLHIpLG4mJnQhPT1xJiZCKHEsZSxuKX06QixIPWZ1bmN0aW9uKHQpe3ZhciBlPXpbdF09UyhSW2pdKTtyZXR1cm4gZS5faz10LGV9LFg9RiYmXCJzeW1ib2xcIj09dHlwZW9mIFIuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUn0sWT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9PT1xJiZZKEQsZSxyKSxnKHQpLGU9XyhlLCEwKSxnKHIpLGkoeixlKT8oci5lbnVtZXJhYmxlPyhpKHQsQykmJnRbQ11bZV0mJih0W0NdW2VdPSExKSxyPVMocix7ZW51bWVyYWJsZTpNKDAsITEpfSkpOihpKHQsQyl8fEIodCxDLE0oMSx7fSkpLHRbQ11bZV09ITApLFYodCxlLHIpKTpCKHQsZSxyKX0sVz1mdW5jdGlvbih0LGUpe2codCk7Zm9yKHZhciByLG49eShlPXcoZSkpLGk9MCxvPW4ubGVuZ3RoO28+aTspWSh0LHI9bltpKytdLGVbcl0pO3JldHVybiB0fSxaPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/Uyh0KTpXKFModCksZSl9LEo9ZnVuY3Rpb24odCl7dmFyIGU9TC5jYWxsKHRoaXMsdD1fKHQsITApKTtyZXR1cm4hKHRoaXM9PT1xJiZpKHosdCkmJiFpKEQsdCkpJiYoIShlfHwhaSh0aGlzLHQpfHwhaSh6LHQpfHxpKHRoaXMsQykmJnRoaXNbQ11bdF0pfHxlKX0sJD1mdW5jdGlvbih0LGUpe2lmKHQ9dyh0KSxlPV8oZSwhMCksdCE9PXF8fCFpKHosZSl8fGkoRCxlKSl7dmFyIHI9SSh0LGUpO3JldHVybiFyfHwhaSh6LGUpfHxpKHQsQykmJnRbQ11bZV18fChyLmVudW1lcmFibGU9ITApLHJ9fSxRPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPU8odyh0KSksbj1bXSxvPTA7ci5sZW5ndGg+bzspaSh6LGU9cltvKytdKXx8ZT09Q3x8ZT09c3x8bi5wdXNoKGUpO3JldHVybiBufSx0dD1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10PT09cSxuPU8ocj9EOncodCkpLG89W10sYT0wO24ubGVuZ3RoPmE7KSFpKHosZT1uW2ErK10pfHxyJiYhaShxLGUpfHxvLnB1c2goeltlXSk7cmV0dXJuIG99O0Z8fChSPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFIpdGhyb3cgVHlwZUVycm9yKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIVwiKTt2YXIgdD1kKGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKSxlPWZ1bmN0aW9uKHIpe3RoaXM9PT1xJiZlLmNhbGwoRCxyKSxpKHRoaXMsQykmJmkodGhpc1tDXSx0KSYmKHRoaXNbQ11bdF09ITEpLFYodGhpcyx0LE0oMSxyKSl9O3JldHVybiBvJiZHJiZWKHEsdCx7Y29uZmlndXJhYmxlOiEwLHNldDplfSksSCh0KX0sZihSW2pdLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSksQS5mPSQsay5mPVkscig0MykuZj1FLmY9USxyKDY2KS5mPUoscig4NikuZj10dCxvJiYhcig0MSkmJmYocSxcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsSiwhMCkscC5mPWZ1bmN0aW9uKHQpe3JldHVybiBIKGwodCkpfSksYShhLkcrYS5XK2EuRiohRix7U3ltYm9sOlJ9KTtmb3IodmFyIGV0PVwiaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXNcIi5zcGxpdChcIixcIikscnQ9MDtldC5sZW5ndGg+cnQ7KWwoZXRbcnQrK10pO2Zvcih2YXIgZXQ9eChsLnN0b3JlKSxydD0wO2V0Lmxlbmd0aD5ydDspYihldFtydCsrXSk7YShhLlMrYS5GKiFGLFwiU3ltYm9sXCIse2ZvcjpmdW5jdGlvbih0KXtyZXR1cm4gaShVLHQrPVwiXCIpP1VbdF06VVt0XT1SKHQpfSxrZXlGb3I6ZnVuY3Rpb24odCl7aWYoWCh0KSlyZXR1cm4gdihVLHQpO3Rocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIHN5bWJvbCFcIil9LHVzZVNldHRlcjpmdW5jdGlvbigpe0c9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe0c9ITF9fSksYShhLlMrYS5GKiFGLFwiT2JqZWN0XCIse2NyZWF0ZTpaLGRlZmluZVByb3BlcnR5OlksZGVmaW5lUHJvcGVydGllczpXLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjokLGdldE93blByb3BlcnR5TmFtZXM6USxnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6dHR9KSxQJiZhKGEuUythLkYqKCFGfHx1KGZ1bmN0aW9uKCl7dmFyIHQ9UigpO3JldHVyblwiW251bGxdXCIhPVQoW3RdKXx8XCJ7fVwiIT1UKHthOnR9KXx8XCJ7fVwiIT1UKE9iamVjdCh0KSl9KSksXCJKU09OXCIse3N0cmluZ2lmeTpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT10JiYhWCh0KSl7Zm9yKHZhciBlLHIsbj1bdF0saT0xO2FyZ3VtZW50cy5sZW5ndGg+aTspbi5wdXNoKGFyZ3VtZW50c1tpKytdKTtyZXR1cm4gZT1uWzFdLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihyPWUpLCFyJiZtKGUpfHwoZT1mdW5jdGlvbih0LGUpe2lmKHImJihlPXIuY2FsbCh0aGlzLHQsZSkpLCFYKGUpKXJldHVybiBlfSksblsxXT1lLFQuYXBwbHkoUCxuKX19fSksUltqXVtOXXx8cigxNCkoUltqXSxOLFJbal0udmFsdWVPZiksYyhSLFwiU3ltYm9sXCIpLGMoTWF0aCxcIk1hdGhcIiwhMCksYyhuLkpTT04sXCJKU09OXCIsITApfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoODgpLG89cigxNDApLGE9cigzKSxmPXIoNDcpLHM9cigxMCksdT1yKDYpLGg9cig0KS5BcnJheUJ1ZmZlcixjPXIoMTM0KSxkPW8uQXJyYXlCdWZmZXIsbD1vLkRhdGFWaWV3LHA9aS5BQlYmJmguaXNWaWV3LGI9ZC5wcm90b3R5cGUuc2xpY2Usdj1pLlZJRVcseT1cIkFycmF5QnVmZmVyXCI7bihuLkcrbi5XK24uRiooaCE9PWQpLHtBcnJheUJ1ZmZlcjpkfSksbihuLlMrbi5GKiFpLkNPTlNUUix5LHtpc1ZpZXc6ZnVuY3Rpb24odCl7cmV0dXJuIHAmJnAodCl8fHUodCkmJnYgaW4gdH19KSxuKG4uUCtuLlUrbi5GKnIoNSkoZnVuY3Rpb24oKXtyZXR1cm4hbmV3IGQoMikuc2xpY2UoMSx2b2lkIDApLmJ5dGVMZW5ndGh9KSx5LHtzbGljZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWImJnZvaWQgMD09PWUpcmV0dXJuIGIuY2FsbChhKHRoaXMpLHQpO2Zvcih2YXIgcj1hKHRoaXMpLmJ5dGVMZW5ndGgsbj1mKHQsciksaT1mKHZvaWQgMD09PWU/cjplLHIpLG89bmV3KGModGhpcyxkKSkocyhpLW4pKSx1PW5ldyBsKHRoaXMpLGg9bmV3IGwobykscD0wO248aTspaC5zZXRVaW50OChwKyssdS5nZXRVaW50OChuKyspKTtyZXR1cm4gb319KSxyKDQ2KSh5KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLkcrbi5XK24uRiohcig4OCkuQUJWLHtEYXRhVmlldzpyKDE0MCkuRGF0YVZpZXd9KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiRmxvYXQzMlwiLDQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiRmxvYXQ2NFwiLDgsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiSW50MTZcIiwyLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIkludDMyXCIsNCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJJbnQ4XCIsMSxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJVaW50MTZcIiwyLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIlVpbnQzMlwiLDQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiVWludDhcIiwxLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIlVpbnQ4XCIsMSxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0sITApfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxNzMpO3IoNzkpKFwiV2Vha1NldFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gbi5kZWYodGhpcyx0LCEwKX19LG4sITEsITApfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoNzgpKCEwKTtuKG4uUCxcIkFycmF5XCIse2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSkscig1NCkoXCJpbmNsdWRlc1wiKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzMSkoKSxvPXIoNCkucHJvY2VzcyxhPVwicHJvY2Vzc1wiPT1yKDIzKShvKTtuKG4uRyx7YXNhcDpmdW5jdGlvbih0KXt2YXIgZT1hJiZvLmRvbWFpbjtpKGU/ZS5iaW5kKHQpOnQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMjMpO24obi5TLFwiRXJyb3JcIix7aXNFcnJvcjpmdW5jdGlvbih0KXtyZXR1cm5cIkVycm9yXCI9PT1pKHQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUCtuLlIsXCJNYXBcIix7dG9KU09OOnIoMTcyKShcIk1hcFwiKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7aWFkZGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dD4+PjAsbz1lPj4+MCxhPXI+Pj4wO3JldHVybiBvKyhuPj4+MCkrKChpJmF8KGl8YSkmfihpK2E+Pj4wKSk+Pj4zMSl8MH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2ltdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9NjU1MzUsbj0rdCxpPStlLG89biZyLGE9aSZyLGY9bj4+MTYscz1pPj4xNix1PShmKmE+Pj4wKSsobyphPj4+MTYpO3JldHVybiBmKnMrKHU+PjE2KSsoKG8qcz4+PjApKyh1JnIpPj4xNil9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtpc3ViaDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Pj4+MCxvPWU+Pj4wLGE9cj4+PjA7cmV0dXJuIG8tKG4+Pj4wKS0oKH5pJmF8fihpXmEpJmktYT4+PjApPj4+MzEpfDB9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHt1bXVsaDpmdW5jdGlvbih0LGUpe3ZhciByPTY1NTM1LG49K3QsaT0rZSxvPW4mcixhPWkmcixmPW4+Pj4xNixzPWk+Pj4xNix1PShmKmE+Pj4wKSsobyphPj4+MTYpO3JldHVybiBmKnMrKHU+Pj4xNikrKChvKnM+Pj4wKSsodSZyKT4+PjE2KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExKSxvPXIoMTMpLGE9cig5KTtyKDgpJiZuKG4uUCtyKDg1KSxcIk9iamVjdFwiLHtfX2RlZmluZUdldHRlcl9fOmZ1bmN0aW9uKHQsZSl7YS5mKGkodGhpcyksdCx7Z2V0Om8oZSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExKSxvPXIoMTMpLGE9cig5KTtyKDgpJiZuKG4uUCtyKDg1KSxcIk9iamVjdFwiLHtfX2RlZmluZVNldHRlcl9fOmZ1bmN0aW9uKHQsZSl7YS5mKGkodGhpcyksdCx7c2V0Om8oZSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4MykoITApO24obi5TLFwiT2JqZWN0XCIse2VudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODQpLG89cigxNyksYT1yKDIwKSxmPXIoMTE5KTtuKG4uUyxcIk9iamVjdFwiLHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPW8odCksbj1hLmYscz1pKHIpLHU9e30saD0wO3MubGVuZ3RoPmg7KWYodSxlPXNbaCsrXSxuKHIsZSkpO3JldHVybiB1fX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTEpLG89cigyOSksYT1yKDIxKSxmPXIoMjApLmY7cig4KSYmbihuLlArcig4NSksXCJPYmplY3RcIix7X19sb29rdXBHZXR0ZXJfXzpmdW5jdGlvbih0KXt2YXIgZSxyPWkodGhpcyksbj1vKHQsITApO2RvIGlmKGU9ZihyLG4pKXJldHVybiBlLmdldDt3aGlsZShyPWEocikpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTEpLG89cigyOSksYT1yKDIxKSxmPXIoMjApLmY7cig4KSYmbihuLlArcig4NSksXCJPYmplY3RcIix7X19sb29rdXBTZXR0ZXJfXzpmdW5jdGlvbih0KXt2YXIgZSxyPWkodGhpcyksbj1vKHQsITApO2RvIGlmKGU9ZihyLG4pKXJldHVybiBlLnNldDt3aGlsZShyPWEocikpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTgzKSghMSk7bihuLlMsXCJPYmplY3RcIix7dmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoNCksbz1yKDMyKSxhPXIoMTMxKSgpLGY9cig3KShcIm9ic2VydmFibGVcIikscz1yKDEzKSx1PXIoMyksaD1yKDQwKSxjPXIoNDUpLGQ9cigxNCksbD1yKDU1KSxwPWwuUkVUVVJOLGI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnModCl9LHY9ZnVuY3Rpb24odCl7dmFyIGU9dC5fYztlJiYodC5fYz12b2lkIDAsZSgpKX0seT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dC5fb30sbT1mdW5jdGlvbih0KXt5KHQpfHwodC5fbz12b2lkIDAsdih0KSl9LGc9ZnVuY3Rpb24odCxlKXt1KHQpLHRoaXMuX2M9dm9pZCAwLHRoaXMuX289dCx0PW5ldyB3KHRoaXMpO3RyeXt2YXIgcj1lKHQpLG49cjtudWxsIT1yJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygci51bnN1YnNjcmliZT9yPWZ1bmN0aW9uKCl7bi51bnN1YnNjcmliZSgpfTpzKHIpLHRoaXMuX2M9cil9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5lcnJvcihlKX15KHRoaXMpJiZ2KHRoaXMpfTtnLnByb3RvdHlwZT1jKHt9LHt1bnN1YnNjcmliZTpmdW5jdGlvbigpe20odGhpcyl9fSk7dmFyIHc9ZnVuY3Rpb24odCl7dGhpcy5fcz10fTt3LnByb3RvdHlwZT1jKHt9LHtuZXh0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3M7aWYoIXkoZSkpe3ZhciByPWUuX287dHJ5e3ZhciBuPWIoci5uZXh0KTtpZihuKXJldHVybiBuLmNhbGwocix0KX1jYXRjaCh0KXt0cnl7bShlKX1maW5hbGx5e3Rocm93IHR9fX19LGVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3M7aWYoeShlKSl0aHJvdyB0O3ZhciByPWUuX287ZS5fbz12b2lkIDA7dHJ5e3ZhciBuPWIoci5lcnJvcik7aWYoIW4pdGhyb3cgdDt0PW4uY2FsbChyLHQpfWNhdGNoKHQpe3RyeXt2KGUpfWZpbmFsbHl7dGhyb3cgdH19cmV0dXJuIHYoZSksdH0sY29tcGxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcztpZigheShlKSl7dmFyIHI9ZS5fbztlLl9vPXZvaWQgMDt0cnl7dmFyIG49YihyLmNvbXBsZXRlKTt0PW4/bi5jYWxsKHIsdCk6dm9pZCAwfWNhdGNoKHQpe3RyeXt2KGUpfWZpbmFsbHl7dGhyb3cgdH19cmV0dXJuIHYoZSksdH19fSk7dmFyIF89ZnVuY3Rpb24odCl7aCh0aGlzLF8sXCJPYnNlcnZhYmxlXCIsXCJfZlwiKS5fZj1zKHQpfTtjKF8ucHJvdG90eXBlLHtzdWJzY3JpYmU6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnKHQsdGhpcy5fZil9LGZvckVhY2g6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3KG8uUHJvbWlzZXx8aS5Qcm9taXNlKShmdW5jdGlvbihyLG4pe3ModCk7dmFyIGk9ZS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiB0KGUpfWNhdGNoKHQpe24odCksaS51bnN1YnNjcmliZSgpfX0sZXJyb3I6bixjb21wbGV0ZTpyfSl9KX19KSxjKF8se2Zyb206ZnVuY3Rpb24odCl7dmFyIGU9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcz90aGlzOl8scj1iKHUodClbZl0pO2lmKHIpe3ZhciBuPXUoci5jYWxsKHQpKTtyZXR1cm4gbi5jb25zdHJ1Y3Rvcj09PWU/bjpuZXcgZShmdW5jdGlvbih0KXtyZXR1cm4gbi5zdWJzY3JpYmUodCl9KX1yZXR1cm4gbmV3IGUoZnVuY3Rpb24oZSl7dmFyIHI9ITE7cmV0dXJuIGEoZnVuY3Rpb24oKXtpZighcil7dHJ5e2lmKGwodCwhMSxmdW5jdGlvbih0KXtpZihlLm5leHQodCkscilyZXR1cm4gcH0pPT09cClyZXR1cm59Y2F0Y2godCl7aWYocil0aHJvdyB0O3JldHVybiB2b2lkIGUuZXJyb3IodCl9ZS5jb21wbGV0ZSgpfX0pLGZ1bmN0aW9uKCl7cj0hMH19KX0sb2Y6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShlKTt0PGU7KXJbdF09YXJndW1lbnRzW3QrK107cmV0dXJuIG5ldyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzP3RoaXM6XykoZnVuY3Rpb24odCl7dmFyIGU9ITE7cmV0dXJuIGEoZnVuY3Rpb24oKXtpZighZSl7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24paWYodC5uZXh0KHJbbl0pLGUpcmV0dXJuO3QuY29tcGxldGUoKX19KSxmdW5jdGlvbigpe2U9ITB9fSl9fSksZChfLnByb3RvdHlwZSxmLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxuKG4uRyx7T2JzZXJ2YWJsZTpffSkscig0NikoXCJPYnNlcnZhYmxlXCIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89bi5rZXksYT1uLnNldDtuLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24odCxlLHIsbil7YSh0LGUsaShyKSxvKG4pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPW4ua2V5LGE9bi5tYXAsZj1uLnN0b3JlO24uZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6byhhcmd1bWVudHNbMl0pLG49YShpKGUpLHIsITEpO2lmKHZvaWQgMD09PW58fCFuLmRlbGV0ZSh0KSlyZXR1cm4hMTtpZihuLnNpemUpcmV0dXJuITA7dmFyIHM9Zi5nZXQoZSk7cmV0dXJuIHMuZGVsZXRlKHIpLCEhcy5zaXplfHxmLmRlbGV0ZShlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTkyKSxpPXIoMTY4KSxvPXIoMzQpLGE9cigzKSxmPXIoMjEpLHM9by5rZXlzLHU9by5rZXksaD1mdW5jdGlvbih0LGUpe3ZhciByPXModCxlKSxvPWYodCk7aWYobnVsbD09PW8pcmV0dXJuIHI7dmFyIGE9aChvLGUpO3JldHVybiBhLmxlbmd0aD9yLmxlbmd0aD9pKG5ldyBuKHIuY29uY2F0KGEpKSk6YTpyfTtvLmV4cCh7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBoKGEodCksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDp1KGFyZ3VtZW50c1sxXSkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89cigyMSksYT1uLmhhcyxmPW4uZ2V0LHM9bi5rZXksdT1mdW5jdGlvbih0LGUscil7dmFyIG49YSh0LGUscik7aWYobilyZXR1cm4gZih0LGUscik7dmFyIGk9byhlKTtyZXR1cm4gbnVsbCE9PWk/dSh0LGkscik6dm9pZCAwfTtuLmV4cCh7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdSh0LGkoZSksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpzKGFyZ3VtZW50c1syXSkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89bi5rZXlzLGE9bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6YShhcmd1bWVudHNbMV0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPW4uZ2V0LGE9bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odCxpKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPXIoMjEpLGE9bi5oYXMsZj1uLmtleSxzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hKHQsZSxyKTtpZihuKXJldHVybiEwO3ZhciBpPW8oZSk7cmV0dXJuIG51bGwhPT1pJiZzKHQsaSxyKX07bi5leHAoe2hhc01ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModCxpKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Zihhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPW4uaGFzLGE9bi5rZXk7bi5leHAoe2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odCxpKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPXIoMTMpLGE9bi5rZXksZj1uLnNldDtuLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtmKHQsZSwodm9pZCAwIT09bj9pOm8pKHIpLGEobikpfX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlArbi5SLFwiU2V0XCIse3RvSlNPTjpyKDE3MikoXCJTZXRcIil9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEzNSkoITApO24obi5QLFwiU3RyaW5nXCIse2F0OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNCksbz1yKDEwKSxhPXIoODMpLGY9cig4MSkscz1SZWdFeHAucHJvdG90eXBlLHU9ZnVuY3Rpb24odCxlKXt0aGlzLl9yPXQsdGhpcy5fcz1lfTtyKDEyNykodSxcIlJlZ0V4cCBTdHJpbmdcIixmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3IuZXhlYyh0aGlzLl9zKTtyZXR1cm57dmFsdWU6dCxkb25lOm51bGw9PT10fX0pLG4obi5QLFwiU3RyaW5nXCIse21hdGNoQWxsOmZ1bmN0aW9uKHQpe2lmKGkodGhpcyksIWEodCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgcmVnZXhwIVwiKTt2YXIgZT1TdHJpbmcodGhpcykscj1cImZsYWdzXCJpbiBzP1N0cmluZyh0LmZsYWdzKTpmLmNhbGwodCksbj1uZXcgUmVnRXhwKHQuc291cmNlLH5yLmluZGV4T2YoXCJnXCIpP3I6XCJnXCIrcik7cmV0dXJuIG4ubGFzdEluZGV4PW8odC5sYXN0SW5kZXgpLG5ldyB1KG4sZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxODgpO24obi5QLFwiU3RyaW5nXCIse3BhZEVuZDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsITEpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTg4KTtuKG4uUCxcIlN0cmluZ1wiLHtwYWRTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsITApfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cig1OCkoXCJ0cmltTGVmdFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsMSl9fSxcInRyaW1TdGFydFwiKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoNTgpKFwidHJpbVJpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcywyKX19LFwidHJpbUVuZFwiKX0sZnVuY3Rpb24odCxlLHIpe3IoMTQxKShcImFzeW5jSXRlcmF0b3JcIil9LGZ1bmN0aW9uKHQsZSxyKXtyKDE0MSkoXCJvYnNlcnZhYmxlXCIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIlN5c3RlbVwiLHtnbG9iYWw6cig0KX0pfSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIoMTQzKSxpPXIoMTUpLG89cig0KSxhPXIoMTQpLGY9cig1Nikscz1yKDcpLHU9cyhcIml0ZXJhdG9yXCIpLGg9cyhcInRvU3RyaW5nVGFnXCIpLGM9Zi5BcnJheSxkPVtcIk5vZGVMaXN0XCIsXCJET01Ub2tlbkxpc3RcIixcIk1lZGlhTGlzdFwiLFwiU3R5bGVTaGVldExpc3RcIixcIkNTU1J1bGVMaXN0XCJdLGw9MDtsPDU7bCsrKXt2YXIgcCxiPWRbbF0sdj1vW2JdLHk9diYmdi5wcm90b3R5cGU7aWYoeSl7eVt1XXx8YSh5LHUsYykseVtoXXx8YSh5LGgsYiksZltiXT1jO2ZvcihwIGluIG4peVtwXXx8aSh5LHAsbltwXSwhMCl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzOSk7bihuLkcrbi5CLHtzZXRJbW1lZGlhdGU6aS5zZXQsY2xlYXJJbW1lZGlhdGU6aS5jbGVhcn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPXIoMCksbz1yKDgyKSxhPXIoMjg3KSxmPW4ubmF2aWdhdG9yLHM9ISFmJiYvTVNJRSAuXFwuLy50ZXN0KGYudXNlckFnZW50KSx1PWZ1bmN0aW9uKHQpe3JldHVybiBzP2Z1bmN0aW9uKGUscil7cmV0dXJuIHQobyhhLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpGdW5jdGlvbihlKSkscil9OnR9O2koaS5HK2kuQitpLkYqcyx7c2V0VGltZW91dDp1KG4uc2V0VGltZW91dCksc2V0SW50ZXJ2YWw6dShuLnNldEludGVydmFsKX0pfSxmdW5jdGlvbih0LGUscil7cig0MTApLHIoMzQ5KSxyKDM1MSkscigzNTApLHIoMzUzKSxyKDM1NSkscigzNjApLHIoMzU0KSxyKDM1MikscigzNjIpLHIoMzYxKSxyKDM1NykscigzNTgpLHIoMzU2KSxyKDM0OCkscigzNTkpLHIoMzYzKSxyKDM2NCkscigzMTYpLHIoMzE4KSxyKDMxNykscigzNjYpLHIoMzY1KSxyKDMzNikscigzNDYpLHIoMzQ3KSxyKDMzNykscigzMzgpLHIoMzM5KSxyKDM0MCkscigzNDEpLHIoMzQyKSxyKDM0MykscigzNDQpLHIoMzQ1KSxyKDMxOSkscigzMjApLHIoMzIxKSxyKDMyMikscigzMjMpLHIoMzI0KSxyKDMyNSkscigzMjYpLHIoMzI3KSxyKDMyOCkscigzMjkpLHIoMzMwKSxyKDMzMSkscigzMzIpLHIoMzMzKSxyKDMzNCkscigzMzUpLHIoMzk3KSxyKDQwMikscig0MDkpLHIoNDAwKSxyKDM5MikscigzOTMpLHIoMzk4KSxyKDQwMykscig0MDUpLHIoMzg4KSxyKDM4OSkscigzOTApLHIoMzkxKSxyKDM5NCkscigzOTUpLHIoMzk2KSxyKDM5OSkscig0MDEpLHIoNDA0KSxyKDQwNikscig0MDcpLHIoNDA4KSxyKDMxMSkscigzMTMpLHIoMzEyKSxyKDMxNSkscigzMTQpLHIoMzAwKSxyKDI5OCkscigzMDQpLHIoMzAxKSxyKDMwNykscigzMDkpLHIoMjk3KSxyKDMwMykscigyOTQpLHIoMzA4KSxyKDI5MikscigzMDYpLHIoMzA1KSxyKDI5OSkscigzMDIpLHIoMjkxKSxyKDI5MykscigyOTYpLHIoMjk1KSxyKDMxMCkscigxNDMpLHIoMzgyKSxyKDM4NykscigxOTEpLHIoMzgzKSxyKDM4NCkscigzODUpLHIoMzg2KSxyKDM2NykscigxOTApLHIoMTkyKSxyKDE5Mykscig0MjIpLHIoNDExKSxyKDQxMikscig0MTcpLHIoNDIwKSxyKDQyMSkscig0MTUpLHIoNDE4KSxyKDQxNikscig0MTkpLHIoNDEzKSxyKDQxNCkscigzNjgpLHIoMzY5KSxyKDM3MCkscigzNzEpLHIoMzcyKSxyKDM3NSkscigzNzMpLHIoMzc0KSxyKDM3NikscigzNzcpLHIoMzc4KSxyKDM3OSkscigzODEpLHIoMzgwKSxyKDQyMykscig0NDkpLHIoNDUyKSxyKDQ1MSkscig0NTMpLHIoNDU0KSxyKDQ1MCkscig0NTUpLHIoNDU2KSxyKDQzNCkscig0MzcpLHIoNDMzKSxyKDQzMSkscig0MzIpLHIoNDM1KSxyKDQzNikscig0MjYpLHIoNDQ4KSxyKDQ1Nykscig0MjUpLHIoNDI3KSxyKDQyOSkscig0MjgpLHIoNDMwKSxyKDQzOSkscig0NDApLHIoNDQyKSxyKDQ0MSkscig0NDQpLHIoNDQzKSxyKDQ0NSkscig0NDYpLHIoNDQ3KSxyKDQyNCkscig0MzgpLHIoNDYwKSxyKDQ1OSkscig0NTgpLHQuZXhwb3J0cz1yKDMyKX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDQ2MykoXCJlZDI1NTE5XCIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKG4saSl7ZnVuY3Rpb24gbyh0KXtcInN0cmluZ1wiPT10eXBlb2YgdD90PXtiaW5kaW5nczp0fTp0fHwodD17fSksdC5fX3Byb3RvX189Yyx0Lm1vZHVsZV9yb290fHwodC5tb2R1bGVfcm9vdD1lLmdldFJvb3QoZS5nZXRGaWxlTmFtZSgpKSksXCIubm9kZVwiIT1mLmV4dG5hbWUodC5iaW5kaW5ncykmJih0LmJpbmRpbmdzKz1cIi5ub2RlXCIpO2Zvcih2YXIgcixuLGksbz1bXSxhPTAsdT10LnRyeS5sZW5ndGg7YTx1O2ErKyl7cj1zLmFwcGx5KG51bGwsdC50cnlbYV0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfHxlfSkpLG8ucHVzaChyKTt0cnl7cmV0dXJuIG49dC5wYXRoPyFmdW5jdGlvbigpe3ZhciB0PW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlIFwiLlwiJyk7dGhyb3cgdC5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLHR9KCk6IWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEVycm9yKCdDYW5ub3QgZmluZCBtb2R1bGUgXCIuXCInKTt0aHJvdyB0LmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsdH0oKSx0LnBhdGh8fChuLnBhdGg9ciksbn1jYXRjaCh0KXtpZighL25vdCBmaW5kL2kudGVzdCh0Lm1lc3NhZ2UpKXRocm93IHR9fXRocm93IGk9bmV3IEVycm9yKFwiQ291bGQgbm90IGxvY2F0ZSB0aGUgYmluZGluZ3MgZmlsZS4gVHJpZWQ6XFxuXCIrby5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXJyb3crZX0pLmpvaW4oXCJcXG5cIikpLGkudHJpZXM9byxpfXZhciBhPXIoNDg5KSxmPXIoNTk0KSxzPWYuam9pbix1PWYuZGlybmFtZSxoPWEuZXhpc3RzU3luY3x8Zi5leGlzdHNTeW5jLGM9e2Fycm93Om4uZW52Lk5PREVfQklORElOR1NfQVJST1d8fFwiIOKGkiBcIixjb21waWxlZDpuLmVudi5OT0RFX0JJTkRJTkdTX0NPTVBJTEVEX0RJUnx8XCJjb21waWxlZFwiLHBsYXRmb3JtOm4ucGxhdGZvcm0sYXJjaDpuLmFyY2gsdmVyc2lvbjpuLnZlcnNpb25zLm5vZGUsYmluZGluZ3M6XCJiaW5kaW5ncy5ub2RlXCIsdHJ5OltbXCJtb2R1bGVfcm9vdFwiLFwiYnVpbGRcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJidWlsZFwiLFwiRGVidWdcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJidWlsZFwiLFwiUmVsZWFzZVwiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcIm91dFwiLFwiRGVidWdcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJEZWJ1Z1wiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcIm91dFwiLFwiUmVsZWFzZVwiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcIlJlbGVhc2VcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJidWlsZFwiLFwiZGVmYXVsdFwiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcImNvbXBpbGVkXCIsXCJ2ZXJzaW9uXCIsXCJwbGF0Zm9ybVwiLFwiYXJjaFwiLFwiYmluZGluZ3NcIl1dfTt0LmV4cG9ydHM9ZT1vLGUuZ2V0RmlsZU5hbWU9ZnVuY3Rpb24odCl7dmFyIGUscj1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZSxuPUVycm9yLnN0YWNrVHJhY2VMaW1pdCxvPXt9O3JldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ9MTAsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9ZnVuY3Rpb24ocixuKXtmb3IodmFyIG89MCxhPW4ubGVuZ3RoO288YTtvKyspaWYoZT1uW29dLmdldEZpbGVOYW1lKCksZSE9PWkpe2lmKCF0KXJldHVybjtpZihlIT09dClyZXR1cm59fSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvKSxvLnN0YWNrLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPXIsRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PW4sZX0sZS5nZXRSb290PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXUodCk7Oyl7aWYoXCIuXCI9PT1yJiYocj1uLmN3ZCgpKSxoKHMocixcInBhY2thZ2UuanNvblwiKSl8fGgocyhyLFwibm9kZV9tb2R1bGVzXCIpKSlyZXR1cm4gcjtpZihlPT09cil0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIG1vZHVsZSByb290IGdpdmVuIGZpbGU6IFwiJyt0KydcIi4gRG8geW91IGhhdmUgYSBgcGFja2FnZS5qc29uYCBmaWxlPyAnKTtlPXIscj1zKHIsXCIuLlwiKX19fSkuY2FsbChlLHIoMjYpLFwiL2luZGV4LmpzXCIpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17T19SRE9OTFk6MCxPX1dST05MWToxLE9fUkRXUjoyLFNfSUZNVDo2MTQ0MCxTX0lGUkVHOjMyNzY4LFNfSUZESVI6MTYzODQsU19JRkNIUjo4MTkyLFNfSUZCTEs6MjQ1NzYsU19JRklGTzo0MDk2LFNfSUZMTks6NDA5NjAsU19JRlNPQ0s6NDkxNTIsT19DUkVBVDo1MTIsT19FWENMOjIwNDgsT19OT0NUVFk6MTMxMDcyLE9fVFJVTkM6MTAyNCxPX0FQUEVORDo4LE9fRElSRUNUT1JZOjEwNDg1NzYsT19OT0ZPTExPVzoyNTYsT19TWU5DOjEyOCxPX1NZTUxJTks6MjA5NzE1MixPX05PTkJMT0NLOjQsU19JUldYVTo0NDgsU19JUlVTUjoyNTYsU19JV1VTUjoxMjgsU19JWFVTUjo2NCxTX0lSV1hHOjU2LFNfSVJHUlA6MzIsU19JV0dSUDoxNixTX0lYR1JQOjgsU19JUldYTzo3LFNfSVJPVEg6NCxTX0lXT1RIOjIsU19JWE9USDoxLEUyQklHOjcsRUFDQ0VTOjEzLEVBRERSSU5VU0U6NDgsRUFERFJOT1RBVkFJTDo0OSxFQUZOT1NVUFBPUlQ6NDcsRUFHQUlOOjM1LEVBTFJFQURZOjM3LEVCQURGOjksRUJBRE1TRzo5NCxFQlVTWToxNixFQ0FOQ0VMRUQ6ODksRUNISUxEOjEwLEVDT05OQUJPUlRFRDo1MyxFQ09OTlJFRlVTRUQ6NjEsRUNPTk5SRVNFVDo1NCxFREVBRExLOjExLEVERVNUQUREUlJFUTozOSxFRE9NOjMzLEVEUVVPVDo2OSxFRVhJU1Q6MTcsRUZBVUxUOjE0LEVGQklHOjI3LEVIT1NUVU5SRUFDSDo2NSxFSURSTTo5MCxFSUxTRVE6OTIsRUlOUFJPR1JFU1M6MzYsRUlOVFI6NCxFSU5WQUw6MjIsRUlPOjUsRUlTQ09OTjo1NixFSVNESVI6MjEsRUxPT1A6NjIsRU1GSUxFOjI0LEVNTElOSzozMSxFTVNHU0laRTo0MCxFTVVMVElIT1A6OTUsRU5BTUVUT09MT05HOjYzLEVORVRET1dOOjUwLEVORVRSRVNFVDo1MixFTkVUVU5SRUFDSDo1MSxFTkZJTEU6MjMsRU5PQlVGUzo1NSxFTk9EQVRBOjk2LEVOT0RFVjoxOSxFTk9FTlQ6MixFTk9FWEVDOjgsRU5PTENLOjc3LEVOT0xJTks6OTcsRU5PTUVNOjEyLEVOT01TRzo5MSxFTk9QUk9UT09QVDo0MixFTk9TUEM6MjgsRU5PU1I6OTgsRU5PU1RSOjk5LEVOT1NZUzo3OCxFTk9UQ09OTjo1NyxFTk9URElSOjIwLEVOT1RFTVBUWTo2NixFTk9UU09DSzozOCxFTk9UU1VQOjQ1LEVOT1RUWToyNSxFTlhJTzo2LEVPUE5PVFNVUFA6MTAyLEVPVkVSRkxPVzo4NCxFUEVSTToxLEVQSVBFOjMyLEVQUk9UTzoxMDAsRVBST1RPTk9TVVBQT1JUOjQzLEVQUk9UT1RZUEU6NDEsRVJBTkdFOjM0LEVST0ZTOjMwLEVTUElQRToyOSxFU1JDSDozLEVTVEFMRTo3MCxFVElNRToxMDEsRVRJTUVET1VUOjYwLEVUWFRCU1k6MjYsRVdPVUxEQkxPQ0s6MzUsRVhERVY6MTgsU0lHSFVQOjEsU0lHSU5UOjIsU0lHUVVJVDozLFNJR0lMTDo0LFNJR1RSQVA6NSxTSUdBQlJUOjYsU0lHSU9UOjYsU0lHQlVTOjEwLFNJR0ZQRTo4LFNJR0tJTEw6OSxTSUdVU1IxOjMwLFNJR1NFR1Y6MTEsU0lHVVNSMjozMSxTSUdQSVBFOjEzLFNJR0FMUk06MTQsU0lHVEVSTToxNSxTSUdDSExEOjIwLFNJR0NPTlQ6MTksU0lHU1RPUDoxNyxTSUdUU1RQOjE4LFNJR1RUSU46MjEsU0lHVFRPVToyMixTSUdVUkc6MTYsU0lHWENQVToyNCxTSUdYRlNaOjI1LFNJR1ZUQUxSTToyNixTSUdQUk9GOjI3LFNJR1dJTkNIOjI4LFNJR0lPOjIzLFNJR1NZUzoxMixTU0xfT1BfQUxMOjIxNDc0ODY3MTksU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTjoyNjIxNDQsU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRTo0MTk0MzA0LFNTTF9PUF9DSVNDT19BTllDT05ORUNUOjMyNzY4LFNTTF9PUF9DT09LSUVfRVhDSEFOR0U6ODE5MixTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUc6MjE0NzQ4MzY0OCxTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTOjIwNDgsU1NMX09QX0VQSEVNRVJBTF9SU0E6MCxTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUOjQsU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSOjMyLFNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUc6MSxTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORzowLFNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUc6NTM2ODcwOTEyLFNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHOjIsU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUc6MTA3Mzc0MTgyNCxTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUc6OCxTU0xfT1BfTk9fQ09NUFJFU1NJT046MTMxMDcyLFNTTF9PUF9OT19RVUVSWV9NVFU6NDA5NixTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT046NjU1MzYsU1NMX09QX05PX1NTTHYyOjE2Nzc3MjE2LFNTTF9PUF9OT19TU0x2MzozMzU1NDQzMixTU0xfT1BfTk9fVElDS0VUOjE2Mzg0LFNTTF9PUF9OT19UTFN2MTo2NzEwODg2NCxTU0xfT1BfTk9fVExTdjFfMToyNjg0MzU0NTYsU1NMX09QX05PX1RMU3YxXzI6MTM0MjE3NzI4LFNTTF9PUF9QS0NTMV9DSEVDS18xOjAsU1NMX09QX1BLQ1MxX0NIRUNLXzI6MCxTU0xfT1BfU0lOR0xFX0RIX1VTRToxMDQ4NTc2LFNTTF9PUF9TSU5HTEVfRUNESF9VU0U6NTI0Mjg4LFNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUc6MTI4LFNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUc6MCxTU0xfT1BfVExTX0JMT0NLX1BBRERJTkdfQlVHOjUxMixTU0xfT1BfVExTX0Q1X0JVRzoyNTYsU1NMX09QX1RMU19ST0xMQkFDS19CVUc6ODM4ODYwOCxFTkdJTkVfTUVUSE9EX0RTQToyLEVOR0lORV9NRVRIT0RfREg6NCxFTkdJTkVfTUVUSE9EX1JBTkQ6OCxFTkdJTkVfTUVUSE9EX0VDREg6MTYsRU5HSU5FX01FVEhPRF9FQ0RTQTozMixFTkdJTkVfTUVUSE9EX0NJUEhFUlM6NjQsRU5HSU5FX01FVEhPRF9ESUdFU1RTOjEyOCxFTkdJTkVfTUVUSE9EX1NUT1JFOjI1NixFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFM6NTEyLEVOR0lORV9NRVRIT0RfUEtFWV9BU04xX01FVEhTOjEwMjQsRU5HSU5FX01FVEhPRF9BTEw6NjU1MzUsRU5HSU5FX01FVEhPRF9OT05FOjAsREhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6NixGX09LOjAsUl9PSzo0LFdfT0s6MixYX09LOjEsVVZfVURQX1JFVVNFQUREUjo0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e25hbWU6XCJlbGxpcHRpY1wiLHZlcnNpb246XCI2LjMuMlwiLGRlc2NyaXB0aW9uOlwiRUMgY3J5cHRvZ3JhcGh5XCIsbWFpbjpcImxpYi9lbGxpcHRpYy5qc1wiLGZpbGVzOltcImxpYlwiXSxzY3JpcHRzOntqc2NzOlwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLGpzaGludDpcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixsaW50OlwibnBtIHJ1biBqc2NzICYmIG5wbSBydW4ganNoaW50XCIsdW5pdDpcImlzdGFuYnVsIHRlc3QgX21vY2hhIC0tcmVwb3J0ZXI9c3BlYyB0ZXN0L2luZGV4LmpzXCIsdGVzdDpcIm5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXRcIix2ZXJzaW9uOlwiZ3J1bnQgZGlzdCAmJiBnaXQgYWRkIGRpc3QvXCJ9LHJlcG9zaXRvcnk6e3R5cGU6XCJnaXRcIix1cmw6XCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy5naXRcIn0sa2V5d29yZHM6W1wiRUNcIixcIkVsbGlwdGljXCIsXCJjdXJ2ZVwiLFwiQ3J5cHRvZ3JhcGh5XCJdLGF1dGhvcjp7bmFtZTpcIkZlZG9yIEluZHV0bnlcIixlbWFpbDpcImZlZG9yQGluZHV0bnkuY29tXCJ9LGxpY2Vuc2U6XCJNSVRcIixidWdzOnt1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy9pc3N1ZXNcIn0saG9tZXBhZ2U6XCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpY1wiLGRldkRlcGVuZGVuY2llczp7YnJmczpcIl4xLjQuM1wiLGNvdmVyYWxsczpcIl4yLjExLjNcIixncnVudDpcIl4wLjQuNVwiLFwiZ3J1bnQtYnJvd3NlcmlmeVwiOlwiXjUuMC4wXCIsXCJncnVudC1jb250cmliLWNvbm5lY3RcIjpcIl4xLjAuMFwiLFwiZ3J1bnQtY29udHJpYi1jb3B5XCI6XCJeMS4wLjBcIixcImdydW50LWNvbnRyaWItdWdsaWZ5XCI6XCJeMS4wLjFcIixcImdydW50LW1vY2hhLWlzdGFuYnVsXCI6XCJeMy4wLjFcIixcImdydW50LXNhdWNlbGFic1wiOlwiXjguNi4yXCIsaXN0YW5idWw6XCJeMC40LjJcIixqc2NzOlwiXjIuOS4wXCIsanNoaW50OlwiXjIuNi4wXCIsbW9jaGE6XCJeMi4xLjBcIn0sZGVwZW5kZW5jaWVzOntcImJuLmpzXCI6XCJeNC40LjBcIixicm9yYW5kOlwiXjEuMC4xXCIsXCJoYXNoLmpzXCI6XCJeMS4wLjBcIixpbmhlcml0czpcIl4yLjAuMVwifSxnaXRIZWFkOlwiY2JhY2U0NjgzYTRhNTQ4ZGMwMzA2ZWYzNjc1NjE1MWEyMDI5OWNkNVwiLF9pZDpcImVsbGlwdGljQDYuMy4yXCIsX3NoYXN1bTpcImU0YzgxZTA4MjljZjBhNjVhYjcwZTk5OGI4MjMyNzIzYjVjMWJjNDhcIixfZnJvbTpcImVsbGlwdGljQD49Ni4wLjAgPDcuMC4wXCIsX25wbVZlcnNpb246XCIzLjEwLjNcIixfbm9kZVZlcnNpb246XCI2LjMuMFwiLF9ucG1Vc2VyOntuYW1lOlwiaW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn0sZGlzdDp7c2hhc3VtOlwiZTRjODFlMDgyOWNmMGE2NWFiNzBlOTk4YjgyMzI3MjNiNWMxYmM0OFwiLHRhcmJhbGw6XCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuMy4yLnRnelwifSxtYWludGFpbmVyczpbe25hbWU6XCJpbmR1dG55XCIsZW1haWw6XCJmZWRvckBpbmR1dG55LmNvbVwifV0sX25wbU9wZXJhdGlvbmFsSW50ZXJuYWw6e2hvc3Q6XCJwYWNrYWdlcy0xNi1lYXN0LmludGVybmFsLm5wbWpzLmNvbVwiLHRtcDpcInRtcC9lbGxpcHRpYy02LjMuMi50Z3pfMTQ3MzkzODgzNzIwNV8wLjMxMDg5MDM0NjI5OTg1NjlcIn0sZGlyZWN0b3JpZXM6e30sX3Jlc29sdmVkOlwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjMuMi50Z3pcIn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjFcIjpcImFlcy0xMjgtZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yXCI6XCJhZXMtMTI4LWNiY1wiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuM1wiOlwiYWVzLTEyOC1vZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjRcIjpcImFlcy0xMjgtY2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMVwiOlwiYWVzLTE5Mi1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIyXCI6XCJhZXMtMTkyLWNiY1wiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjNcIjpcImFlcy0xOTItb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNFwiOlwiYWVzLTE5Mi1jZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxXCI6XCJhZXMtMjU2LWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDJcIjpcImFlcy0yNTYtY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40M1wiOlwiYWVzLTI1Ni1vZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0XCI6XCJhZXMtMjU2LWNmYlwifX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e25hbWU6XCJlbGxpcHRpY1wiLHZlcnNpb246XCI2LjMuMlwiLGRlc2NyaXB0aW9uOlwiRUMgY3J5cHRvZ3JhcGh5XCIsbWFpbjpcImxpYi9lbGxpcHRpYy5qc1wiLGZpbGVzOltcImxpYlwiXSxzY3JpcHRzOntqc2NzOlwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLGpzaGludDpcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixsaW50OlwibnBtIHJ1biBqc2NzICYmIG5wbSBydW4ganNoaW50XCIsdW5pdDpcImlzdGFuYnVsIHRlc3QgX21vY2hhIC0tcmVwb3J0ZXI9c3BlYyB0ZXN0L2luZGV4LmpzXCIsdGVzdDpcIm5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXRcIix2ZXJzaW9uOlwiZ3J1bnQgZGlzdCAmJiBnaXQgYWRkIGRpc3QvXCJ9LHJlcG9zaXRvcnk6e3R5cGU6XCJnaXRcIix1cmw6XCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy5naXRcIn0sa2V5d29yZHM6W1wiRUNcIixcIkVsbGlwdGljXCIsXCJjdXJ2ZVwiLFwiQ3J5cHRvZ3JhcGh5XCJdLGF1dGhvcjp7bmFtZTpcIkZlZG9yIEluZHV0bnlcIixlbWFpbDpcImZlZG9yQGluZHV0bnkuY29tXCJ9LGxpY2Vuc2U6XCJNSVRcIixidWdzOnt1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy9pc3N1ZXNcIn0saG9tZXBhZ2U6XCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpY1wiLGRldkRlcGVuZGVuY2llczp7YnJmczpcIl4xLjQuM1wiLGNvdmVyYWxsczpcIl4yLjExLjNcIixncnVudDpcIl4wLjQuNVwiLFwiZ3J1bnQtYnJvd3NlcmlmeVwiOlwiXjUuMC4wXCIsXCJncnVudC1jb250cmliLWNvbm5lY3RcIjpcIl4xLjAuMFwiLFwiZ3J1bnQtY29udHJpYi1jb3B5XCI6XCJeMS4wLjBcIixcImdydW50LWNvbnRyaWItdWdsaWZ5XCI6XCJeMS4wLjFcIixcImdydW50LW1vY2hhLWlzdGFuYnVsXCI6XCJeMy4wLjFcIixcImdydW50LXNhdWNlbGFic1wiOlwiXjguNi4yXCIsaXN0YW5idWw6XCJeMC40LjJcIixqc2NzOlwiXjIuOS4wXCIsanNoaW50OlwiXjIuNi4wXCIsbW9jaGE6XCJeMi4xLjBcIn0sZGVwZW5kZW5jaWVzOntcImJuLmpzXCI6XCJeNC40LjBcIixicm9yYW5kOlwiXjEuMC4xXCIsXCJoYXNoLmpzXCI6XCJeMS4wLjBcIixpbmhlcml0czpcIl4yLjAuMVwifSxnaXRIZWFkOlwiY2JhY2U0NjgzYTRhNTQ4ZGMwMzA2ZWYzNjc1NjE1MWEyMDI5OWNkNVwiLF9pZDpcImVsbGlwdGljQDYuMy4yXCIsX3NoYXN1bTpcImU0YzgxZTA4MjljZjBhNjVhYjcwZTk5OGI4MjMyNzIzYjVjMWJjNDhcIixfZnJvbTpcImVsbGlwdGljQD49Ni4wLjAgPDcuMC4wXCIsX25wbVZlcnNpb246XCIzLjEwLjNcIixfbm9kZVZlcnNpb246XCI2LjMuMFwiLF9ucG1Vc2VyOntuYW1lOlwiaW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn0sZGlzdDp7c2hhc3VtOlwiZTRjODFlMDgyOWNmMGE2NWFiNzBlOTk4YjgyMzI3MjNiNWMxYmM0OFwiLHRhcmJhbGw6XCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuMy4yLnRnelwifSxtYWludGFpbmVyczpbe25hbWU6XCJpbmR1dG55XCIsZW1haWw6XCJmZWRvckBpbmR1dG55LmNvbVwifV0sX25wbU9wZXJhdGlvbmFsSW50ZXJuYWw6e2hvc3Q6XCJwYWNrYWdlcy0xNi1lYXN0LmludGVybmFsLm5wbWpzLmNvbVwiLHRtcDpcInRtcC9lbGxpcHRpYy02LjMuMi50Z3pfMTQ3MzkzODgzNzIwNV8wLjMxMDg5MDM0NjI5OTg1NjlcIn0sZGlyZWN0b3JpZXM6e30sX3Jlc29sdmVkOlwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjMuMi50Z3pcIn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXttb2RwMTp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwMjp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDU6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDE0OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDE1OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHAxNjp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmZcIlxufSxtb2RwMTc6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDE4OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmZcIn19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17XCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xXCI6XCJhZXMtMTI4LWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMlwiOlwiYWVzLTEyOC1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjNcIjpcImFlcy0xMjgtb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40XCI6XCJhZXMtMTI4LWNmYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjFcIjpcImFlcy0xOTItZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMlwiOlwiYWVzLTE5Mi1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzXCI6XCJhZXMtMTkyLW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjRcIjpcImFlcy0xOTItY2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MVwiOlwiYWVzLTI1Ni1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyXCI6XCJhZXMtMjU2LWNiY1wiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDNcIjpcImFlcy0yNTYtb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NFwiOlwiYWVzLTI1Ni1jZmJcIn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoMTk1KSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcyxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDE5NSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cigxOTYpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpLHRoaXMuc2l6ZT0wfXJldHVybiBpKHQsW3trZXk6XCJ3cml0ZVVJbnRcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2l6ZSs9ZX19LHtrZXk6XCJ3cml0ZVZhclVJbnRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZihlLmlzQnVmZmVyKHQpKXJldHVybiB2b2lkIHRoaXMud3JpdGVWYXJPY3RldFN0cmluZyh0KTtpZighbyh0KSl0aHJvdyBuZXcgRXJyb3IoXCJVSW50IG11c3QgYmUgYW4gaW50ZWdlclwiKTtpZih0PDApdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIHBvc2l0aXZlXCIpO3ZhciByPU1hdGguY2VpbCh0LnRvU3RyaW5nKDIpLmxlbmd0aC84KTt0aGlzLndyaXRlVmFyT2N0ZXRTdHJpbmcoe2xlbmd0aDpyfSl9fSx7a2V5Olwid3JpdGVPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5za2lwKGUpfX0se2tleTpcIndyaXRlVmFyT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLnNraXAoMSksdC5sZW5ndGg+MTI3KXt2YXIgZT1NYXRoLmNlaWwodC5sZW5ndGgudG9TdHJpbmcoMikubGVuZ3RoLzgpO3RoaXMuc2tpcChlKX10aGlzLnNraXAodC5sZW5ndGgpfX0se2tleTpcIndyaXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zaXplKz10Lmxlbmd0aH19LHtrZXk6XCJza2lwXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zaXplKz10fX0se2tleTpcImdldFNpemVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9fV0pLHR9KCk7WzEsMiw0LDhdLmZvckVhY2goZnVuY3Rpb24odCl7YS5wcm90b3R5cGVbXCJ3cml0ZVVJbnRcIis4KnRdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLndyaXRlVUludChlLHQpfX0pLHQuZXhwb3J0cz1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cig0NzEpLGE9cig0NzApLGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe24odGhpcyx0KSx0aGlzLmJ1ZmZlcj1lLHRoaXMuY3Vyc29yPTAsdGhpcy5ib29rbWFya3M9W119cmV0dXJuIGkodCxbe2tleTpcImJvb2ttYXJrXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJvb2ttYXJrcy5wdXNoKHRoaXMuY3Vyc29yKX19LHtrZXk6XCJyZXN0b3JlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmN1cnNvcj10aGlzLmJvb2ttYXJrcy5wb3AoKX19LHtrZXk6XCJlbnN1cmVBdmFpbGFibGVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmJ1ZmZlci5sZW5ndGg8dGhpcy5jdXJzb3IrdCl0aHJvdyBuZXcgbyhcIlRyaWVkIHRvIHJlYWQgXCIrdCtcIiBieXRlcywgYnV0IG9ubHkgXCIrKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmN1cnNvcikrXCIgYnl0ZXMgYXZhaWxhYmxlXCIpfX0se2tleTpcInJlYWRVSW50XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wZWVrVUludCh0KTtyZXR1cm4gdGhpcy5jdXJzb3IrPXQsZX19LHtrZXk6XCJwZWVrVUludFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDA9PT1lKXJldHVybiAwO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoXCJUcmllZCB0byByZWFkIGludGVnZXIgd2l0aCBuZWdhdGl2ZSBsZW5ndGggKHByb3ZpZGVkOiBcIitlK1wiKVwiKTtpZihlPnQuTUFYX0lOVF9CWVRFUyl0aHJvdyBuZXcgRXJyb3IoXCJUcmllZCB0byByZWFkIHRvbyBsYXJnZSBpbnRlZ2VyIChyZXF1ZXN0ZWQ6IFwiK2UrXCIsIG1heDogXCIrdC5NQVhfSU5UX0JZVEVTK1wiKVwiKTt0aGlzLmVuc3VyZUF2YWlsYWJsZShlKTt2YXIgcj10aGlzLmJ1ZmZlci5yZWFkVUludEJFKHRoaXMuY3Vyc29yLGUpO3JldHVybiByfX0se2tleTpcInNraXBVSW50XCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5za2lwKHQpfX0se2tleTpcInJlYWRVSW50NjRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt0aGlzLnJlYWRVSW50MzIoKSx0aGlzLnJlYWRVSW50MzIoKV19fSx7a2V5OlwicGVla1VJbnQ2NFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ib29rbWFyaygpO3ZhciB0PXRoaXMucmVhZFVJbnQ2NCgpO3JldHVybiB0aGlzLnJlc3RvcmUoKSx0fX0se2tleTpcInNraXBVSW50NjRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2tpcCg4KX19LHtrZXk6XCJyZWFkVmFyVUludFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVmFyT2N0ZXRTdHJpbmcoKTtpZihlLmxlbmd0aD50Lk1BWF9JTlRfQllURVMpdGhyb3cgbmV3IGEoXCJVSW50IG9mIGxlbmd0aCBcIitlLmxlbmd0aCtcIiB0b28gbGFyZ2UgdG8gcGFyc2UgYXMgaW50ZWdlciAobWF4OiBcIit0Lk1BWF9JTlRfQllURVMrXCIpXCIpO2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgYShcIlVJbnQgb2YgbGVuZ3RoIDAgaXMgaW52YWxpZFwiKTtyZXR1cm4gZS5yZWFkVUludEJFKDAsZS5sZW5ndGgpfX0se2tleTpcInBlZWtWYXJVSW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJvb2ttYXJrKCk7dmFyIHQ9dGhpcy5yZWFkVmFyVUludCgpO3JldHVybiB0aGlzLnJlc3RvcmUoKSx0fX0se2tleTpcInNraXBWYXJVSW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNraXBWYXJPY3RldFN0cmluZygpfX0se2tleTpcInJlYWRPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlYWQodCl9fSx7a2V5OlwicGVla09jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGVlayh0KX19LHtrZXk6XCJza2lwT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5za2lwKHQpfX0se2tleTpcInJlYWRMZW5ndGhQcmVmaXhcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVJbnQ4KCk7aWYoZSZ0LkhJR0hfQklUKXt2YXIgcj1lJnQuTE9XRVJfU0VWRU5fQklUUyxuPXRoaXMucmVhZFVJbnQociksaT1NYXRoLm1heCgxMjgsMTw8OCooci0xKSk7aWYobjxpKXRocm93IG5ldyBhKFwiTGVuZ3RoIHByZWZpeCBlbmNvZGluZyBpcyBub3QgY2Fub25pY2FsOiBcIituK1wiIGVuY29kZWQgaW4gXCIrcitcIiBieXRlc1wiKTtyZXR1cm4gbn1yZXR1cm4gZX19LHtrZXk6XCJyZWFkVmFyT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZExlbmd0aFByZWZpeCgpO3JldHVybiB0aGlzLnJlYWQodCl9fSx7a2V5OlwicGVla1Zhck9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJvb2ttYXJrKCk7dmFyIHQ9dGhpcy5yZWFkVmFyT2N0ZXRTdHJpbmcoKTtyZXR1cm4gdGhpcy5yZXN0b3JlKCksdH19LHtrZXk6XCJza2lwVmFyT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZExlbmd0aFByZWZpeCgpO3JldHVybiB0aGlzLnNraXAodCl9fSx7a2V5OlwicmVhZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZW5zdXJlQXZhaWxhYmxlKHQpO3ZhciBlPXRoaXMuYnVmZmVyLnNsaWNlKHRoaXMuY3Vyc29yLHRoaXMuY3Vyc29yK3QpO3JldHVybiB0aGlzLmN1cnNvcis9dCxlfX0se2tleTpcInBlZWtcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lbnN1cmVBdmFpbGFibGUodCksdGhpcy5idWZmZXIuc2xpY2UodGhpcy5jdXJzb3IsdGhpcy5jdXJzb3IrdCl9fSx7a2V5Olwic2tpcFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZW5zdXJlQXZhaWxhYmxlKHQpLHRoaXMuY3Vyc29yKz10fX1dLFt7a2V5OlwiZnJvbVwiLHZhbHVlOmZ1bmN0aW9uKHIpe2lmKGUuaXNCdWZmZXIocikpcmV0dXJuIG5ldyB0KHIpO2lmKHIgaW5zdGFuY2VvZiB0KXJldHVybiBuZXcgdChyLmJ1ZmZlci5zbGljZShyLmN1cnNvcikpO3Rocm93IG5ldyBFcnJvcihcIlJlYWRlciBtdXN0IGJlIGdpdmVuIGEgQnVmZmVyXCIpfX1dKSx0fSgpO2YuSElHSF9CSVQ9MTI4LGYuTE9XRVJfU0VWRU5fQklUUz0xMjcsZi5NQVhfSU5UX0JZVEVTPTYsW1wicmVhZFwiLFwicGVla1wiLFwic2tpcFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1sxLDIsNF0uZm9yRWFjaChmdW5jdGlvbihlKXtmLnByb3RvdHlwZVt0K1wiVUludFwiKzgqZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0K1wiVUludFwiXShlKX19KX0pLHQuZXhwb3J0cz1mfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cigxOTYpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpLHRoaXMuY29tcG9uZW50cz1bXX1yZXR1cm4gaSh0LFt7a2V5Olwid3JpdGVVSW50XCIsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZighbyh0KSl0aHJvdyBuZXcgRXJyb3IoXCJVSW50IG11c3QgYmUgYW4gaW50ZWdlclwiKTtpZih0PDApdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIHBvc2l0aXZlXCIpO2lmKHI8PTApdGhyb3cgbmV3IEVycm9yKFwiVUludCBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyb1wiKTtpZih0LnRvU3RyaW5nKDIpLmxlbmd0aD44KnIpdGhyb3cgbmV3IEVycm9yKFwiVUludCBcIit0K1wiIGRvZXMgbm90IGZpdCBpbiBcIityK1wiIGJ5dGVzXCIpO3ZhciBuPW5ldyBlKHIpO24ud3JpdGVVSW50QkUodCwwLHIpLHRoaXMud3JpdGUobil9fSx7a2V5Olwid3JpdGVWYXJVSW50XCIsdmFsdWU6ZnVuY3Rpb24ocil7aWYoZS5pc0J1ZmZlcihyKSlyZXR1cm4gdm9pZCB0aGlzLndyaXRlVmFyT2N0ZXRTdHJpbmcocik7aWYoIW8ocikpdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIGFuIGludGVnZXJcIik7aWYocjwwKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbXVzdCBiZSBwb3NpdGl2ZVwiKTtpZihyPnQuTUFYX1NBRkVfSU5URUdFUil0aHJvdyBuZXcgRXJyb3IoXCJVSW50IGlzIHRvbyBsYXJnZVwiKTt2YXIgbj1NYXRoLmNlaWwoci50b1N0cmluZygyKS5sZW5ndGgvOCksaT1uZXcgZShuKTtpLndyaXRlVUludEJFKHIsMCxuKSx0aGlzLndyaXRlVmFyT2N0ZXRTdHJpbmcoaSl9fSx7a2V5Olwid3JpdGVVSW50NjRcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihvKGUpJiZlPD10Lk1BWF9TQUZFX0lOVEVHRVIpcmV0dXJuIHRoaXMud3JpdGVVSW50MzIoTWF0aC5mbG9vcihlLzQyOTQ5NjcyOTYpKSx2b2lkIHRoaXMud3JpdGVVSW50MzIoNDI5NDk2NzI5NSZlKTtpZighQXJyYXkuaXNBcnJheShlKXx8MiE9PWUubGVuZ3RofHwhbyhlWzBdKXx8IW8oZVsxXSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIDY0LWJpdCBpbnRlZ2VyIGFzIGFuIGFycmF5IG9mIHR3byAzMi1iaXQgd29yZHNcIik7dGhpcy53cml0ZVVJbnQzMihlWzBdKSx0aGlzLndyaXRlVUludDMyKGVbMV0pfX0se2tleTpcIndyaXRlT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3QgbGVuZ3RoIGZvciBvY3RldCBzdHJpbmcgKGFjdHVhbDogXCIrdC5sZW5ndGgrXCIsIGV4cGVjdGVkOiBcIitlK1wiKVwiKTt0aGlzLndyaXRlKHQpfX0se2tleTpcIndyaXRlVmFyT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0cyBhIGJ1ZmZlclwiKTt2YXIgcj0xMjg7aWYodC5sZW5ndGg8PTEyNyl0aGlzLndyaXRlVUludDgodC5sZW5ndGgpO2Vsc2V7dmFyIG49TWF0aC5jZWlsKHQubGVuZ3RoLnRvU3RyaW5nKDIpLmxlbmd0aC84KTt0aGlzLndyaXRlVUludDgocnxuKSx0aGlzLndyaXRlVUludCh0Lmxlbmd0aCxuKX10aGlzLndyaXRlKHQpfX0se2tleTpcIndyaXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jb21wb25lbnRzLnB1c2godCl9fSx7a2V5OlwiZ2V0QnVmZmVyXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jb25jYXQodGhpcy5jb21wb25lbnRzKX19XSksdH0oKTthLk1BWF9TQUZFX0lOVEVHRVI9cig0NzUpLFsxLDIsNF0uZm9yRWFjaChmdW5jdGlvbih0KXthLnByb3RvdHlwZVtcIndyaXRlVUludFwiKzgqdF09ZnVuY3Rpb24oZSl7dGhpcy53cml0ZVVJbnQoZSx0KX19KSx0LmV4cG9ydHM9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtyKDQ4NyksdC5leHBvcnRzPTkwMDcxOTkyNTQ3NDA5OTF9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ3Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChlLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIHQuY2FsbChlLHIsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3JldHVybiB0LmNhbGwoZSxyLG4saSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4OSksaT1yKDIwMCkuZG9jdW1lbnQsbz1uKGkpJiZuKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ4MyksaT1yKDQ4NCk7dC5leHBvcnRzPXIoMTQ0KT9mdW5jdGlvbih0LGUscil7cmV0dXJuIG4uZih0LGUsaSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoMTQ0KSYmIXIoMTk5KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocig0NzkpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDg5KSxpPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFuKHQpJiZpc0Zpbml0ZSh0KSYmaSh0KT09PXR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0NzcpLGk9cig0ODEpLG89cig0ODUpLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZj1yKDE0NCk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLGU9byhlLCEwKSxuKHIpLGkpdHJ5e3JldHVybiBhKHQsZSxyKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIHJ8fFwic2V0XCJpbiByKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiByJiYodFtlXT1yLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIW4odCkpcmV0dXJuIHQ7dmFyIHIsaTtpZihlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnZhbHVlT2YpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoIWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxOTgpO24obi5TLFwiTnVtYmVyXCIse2lzSW50ZWdlcjpyKDQ4Mil9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTk4KTtuKG4uUyxcIk51bWJlclwiLHtNQVhfU0FGRV9JTlRFR0VSOjkwMDcxOTkyNTQ3NDA5OTF9KX0sZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQsZSxyLG4pe3RbZV09cj4+MjQmMjU1LHRbZSsxXT1yPj4xNiYyNTUsdFtlKzJdPXI+PjgmMjU1LHRbZSszXT0yNTUmcix0W2UrNF09bj4+MjQmMjU1LHRbZSs1XT1uPj4xNiYyNTUsdFtlKzZdPW4+PjgmMjU1LHRbZSs3XT0yNTUmbn1mdW5jdGlvbiBuKHQsZSxyLG4saSl7dmFyIG8sYT0wO2ZvcihvPTA7bzxpO28rKylhfD10W2Urb11ecltuK29dO3JldHVybigxJmEtMT4+PjgpLTF9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbih0LGUscixpLDE2KX1mdW5jdGlvbiBvKHQsZSxyLGkpe3JldHVybiBuKHQsZSxyLGksMzIpfWZ1bmN0aW9uIGEodCxlLHIsbil7Zm9yKHZhciBpLG89MjU1Jm5bMF18KDI1NSZuWzFdKTw8OHwoMjU1Jm5bMl0pPDwxNnwoMjU1Jm5bM10pPDwyNCxhPTI1NSZyWzBdfCgyNTUmclsxXSk8PDh8KDI1NSZyWzJdKTw8MTZ8KDI1NSZyWzNdKTw8MjQsZj0yNTUmcls0XXwoMjU1JnJbNV0pPDw4fCgyNTUmcls2XSk8PDE2fCgyNTUmcls3XSk8PDI0LHM9MjU1JnJbOF18KDI1NSZyWzldKTw8OHwoMjU1JnJbMTBdKTw8MTZ8KDI1NSZyWzExXSk8PDI0LHU9MjU1JnJbMTJdfCgyNTUmclsxM10pPDw4fCgyNTUmclsxNF0pPDwxNnwoMjU1JnJbMTVdKTw8MjQsaD0yNTUmbls0XXwoMjU1Jm5bNV0pPDw4fCgyNTUmbls2XSk8PDE2fCgyNTUmbls3XSk8PDI0LGM9MjU1JmVbMF18KDI1NSZlWzFdKTw8OHwoMjU1JmVbMl0pPDwxNnwoMjU1JmVbM10pPDwyNCxkPTI1NSZlWzRdfCgyNTUmZVs1XSk8PDh8KDI1NSZlWzZdKTw8MTZ8KDI1NSZlWzddKTw8MjQsbD0yNTUmZVs4XXwoMjU1JmVbOV0pPDw4fCgyNTUmZVsxMF0pPDwxNnwoMjU1JmVbMTFdKTw8MjQscD0yNTUmZVsxMl18KDI1NSZlWzEzXSk8PDh8KDI1NSZlWzE0XSk8PDE2fCgyNTUmZVsxNV0pPDwyNCxiPTI1NSZuWzhdfCgyNTUmbls5XSk8PDh8KDI1NSZuWzEwXSk8PDE2fCgyNTUmblsxMV0pPDwyNCx2PTI1NSZyWzE2XXwoMjU1JnJbMTddKTw8OHwoMjU1JnJbMThdKTw8MTZ8KDI1NSZyWzE5XSk8PDI0LHk9MjU1JnJbMjBdfCgyNTUmclsyMV0pPDw4fCgyNTUmclsyMl0pPDwxNnwoMjU1JnJbMjNdKTw8MjQsbT0yNTUmclsyNF18KDI1NSZyWzI1XSk8PDh8KDI1NSZyWzI2XSk8PDE2fCgyNTUmclsyN10pPDwyNCxnPTI1NSZyWzI4XXwoMjU1JnJbMjldKTw8OHwoMjU1JnJbMzBdKTw8MTZ8KDI1NSZyWzMxXSk8PDI0LHc9MjU1Jm5bMTJdfCgyNTUmblsxM10pPDw4fCgyNTUmblsxNF0pPDwxNnwoMjU1Jm5bMTVdKTw8MjQsXz1vLE09YSxTPWYsRT1zLEE9dSxrPWgseD1jLEk9ZCxCPWwsTz1wLFI9YixQPXYsVD15LGo9bSxDPWcsTj13LEw9MDtMPDIwO0wrPTIpaT1fK1R8MCxBXj1pPDw3fGk+Pj4yNSxpPUErX3wwLEJePWk8PDl8aT4+PjIzLGk9QitBfDAsVF49aTw8MTN8aT4+PjE5LGk9VCtCfDAsX149aTw8MTh8aT4+PjE0LGk9aytNfDAsT149aTw8N3xpPj4+MjUsaT1PK2t8MCxqXj1pPDw5fGk+Pj4yMyxpPWorT3wwLE1ePWk8PDEzfGk+Pj4xOSxpPU0ranwwLGtePWk8PDE4fGk+Pj4xNCxpPVIreHwwLENePWk8PDd8aT4+PjI1LGk9QytSfDAsU149aTw8OXxpPj4+MjMsaT1TK0N8MCx4Xj1pPDwxM3xpPj4+MTksaT14K1N8MCxSXj1pPDwxOHxpPj4+MTQsaT1OK1B8MCxFXj1pPDw3fGk+Pj4yNSxpPUUrTnwwLElePWk8PDl8aT4+PjIzLGk9SStFfDAsUF49aTw8MTN8aT4+PjE5LGk9UCtJfDAsTl49aTw8MTh8aT4+PjE0LGk9XytFfDAsTV49aTw8N3xpPj4+MjUsaT1NK198MCxTXj1pPDw5fGk+Pj4yMyxpPVMrTXwwLEVePWk8PDEzfGk+Pj4xOSxpPUUrU3wwLF9ePWk8PDE4fGk+Pj4xNCxpPWsrQXwwLHhePWk8PDd8aT4+PjI1LGk9eCtrfDAsSV49aTw8OXxpPj4+MjMsaT1JK3h8MCxBXj1pPDwxM3xpPj4+MTksaT1BK0l8MCxrXj1pPDwxOHxpPj4+MTQsaT1SK098MCxQXj1pPDw3fGk+Pj4yNSxpPVArUnwwLEJePWk8PDl8aT4+PjIzLGk9QitQfDAsT149aTw8MTN8aT4+PjE5LGk9TytCfDAsUl49aTw8MTh8aT4+PjE0LGk9TitDfDAsVF49aTw8N3xpPj4+MjUsaT1UK058MCxqXj1pPDw5fGk+Pj4yMyxpPWorVHwwLENePWk8PDEzfGk+Pj4xOSxpPUMranwwLE5ePWk8PDE4fGk+Pj4xNDtfPV8rb3wwLE09TSthfDAsUz1TK2Z8MCxFPUUrc3wwLEE9QSt1fDAsaz1rK2h8MCx4PXgrY3wwLEk9SStkfDAsQj1CK2x8MCxPPU8rcHwwLFI9UitifDAsUD1QK3Z8MCxUPVQreXwwLGo9aittfDAsQz1DK2d8MCxOPU4rd3wwLHRbMF09Xz4+PjAmMjU1LHRbMV09Xz4+PjgmMjU1LHRbMl09Xz4+PjE2JjI1NSx0WzNdPV8+Pj4yNCYyNTUsdFs0XT1NPj4+MCYyNTUsdFs1XT1NPj4+OCYyNTUsdFs2XT1NPj4+MTYmMjU1LHRbN109TT4+PjI0JjI1NSx0WzhdPVM+Pj4wJjI1NSx0WzldPVM+Pj44JjI1NSx0WzEwXT1TPj4+MTYmMjU1LHRbMTFdPVM+Pj4yNCYyNTUsdFsxMl09RT4+PjAmMjU1LHRbMTNdPUU+Pj44JjI1NSx0WzE0XT1FPj4+MTYmMjU1LHRbMTVdPUU+Pj4yNCYyNTUsdFsxNl09QT4+PjAmMjU1LHRbMTddPUE+Pj44JjI1NSx0WzE4XT1BPj4+MTYmMjU1LHRbMTldPUE+Pj4yNCYyNTUsdFsyMF09az4+PjAmMjU1LHRbMjFdPWs+Pj44JjI1NSx0WzIyXT1rPj4+MTYmMjU1LHRbMjNdPWs+Pj4yNCYyNTUsdFsyNF09eD4+PjAmMjU1LHRbMjVdPXg+Pj44JjI1NSx0WzI2XT14Pj4+MTYmMjU1LHRbMjddPXg+Pj4yNCYyNTUsdFsyOF09ST4+PjAmMjU1LHRbMjldPUk+Pj44JjI1NSx0WzMwXT1JPj4+MTYmMjU1LHRbMzFdPUk+Pj4yNCYyNTUsdFszMl09Qj4+PjAmMjU1LHRbMzNdPUI+Pj44JjI1NSx0WzM0XT1CPj4+MTYmMjU1LHRbMzVdPUI+Pj4yNCYyNTUsdFszNl09Tz4+PjAmMjU1LHRbMzddPU8+Pj44JjI1NSx0WzM4XT1PPj4+MTYmMjU1LHRbMzldPU8+Pj4yNCYyNTUsdFs0MF09Uj4+PjAmMjU1LHRbNDFdPVI+Pj44JjI1NSx0WzQyXT1SPj4+MTYmMjU1LHRbNDNdPVI+Pj4yNCYyNTUsdFs0NF09UD4+PjAmMjU1LHRbNDVdPVA+Pj44JjI1NSx0WzQ2XT1QPj4+MTYmMjU1LHRbNDddPVA+Pj4yNCYyNTUsdFs0OF09VD4+PjAmMjU1LHRbNDldPVQ+Pj44JjI1NSx0WzUwXT1UPj4+MTYmMjU1LHRbNTFdPVQ+Pj4yNCYyNTUsdFs1Ml09aj4+PjAmMjU1LHRbNTNdPWo+Pj44JjI1NSx0WzU0XT1qPj4+MTYmMjU1LHRbNTVdPWo+Pj4yNCYyNTUsdFs1Nl09Qz4+PjAmMjU1LHRbNTddPUM+Pj44JjI1NSx0WzU4XT1DPj4+MTYmMjU1LHRbNTldPUM+Pj4yNCYyNTUsdFs2MF09Tj4+PjAmMjU1LHRbNjFdPU4+Pj44JjI1NSx0WzYyXT1OPj4+MTYmMjU1LHRbNjNdPU4+Pj4yNCYyNTV9ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGksbz0yNTUmblswXXwoMjU1Jm5bMV0pPDw4fCgyNTUmblsyXSk8PDE2fCgyNTUmblszXSk8PDI0LGE9MjU1JnJbMF18KDI1NSZyWzFdKTw8OHwoMjU1JnJbMl0pPDwxNnwoMjU1JnJbM10pPDwyNCxmPTI1NSZyWzRdfCgyNTUmcls1XSk8PDh8KDI1NSZyWzZdKTw8MTZ8KDI1NSZyWzddKTw8MjQscz0yNTUmcls4XXwoMjU1JnJbOV0pPDw4fCgyNTUmclsxMF0pPDwxNnwoMjU1JnJbMTFdKTw8MjQsdT0yNTUmclsxMl18KDI1NSZyWzEzXSk8PDh8KDI1NSZyWzE0XSk8PDE2fCgyNTUmclsxNV0pPDwyNCxoPTI1NSZuWzRdfCgyNTUmbls1XSk8PDh8KDI1NSZuWzZdKTw8MTZ8KDI1NSZuWzddKTw8MjQsYz0yNTUmZVswXXwoMjU1JmVbMV0pPDw4fCgyNTUmZVsyXSk8PDE2fCgyNTUmZVszXSk8PDI0LGQ9MjU1JmVbNF18KDI1NSZlWzVdKTw8OHwoMjU1JmVbNl0pPDwxNnwoMjU1JmVbN10pPDwyNCxsPTI1NSZlWzhdfCgyNTUmZVs5XSk8PDh8KDI1NSZlWzEwXSk8PDE2fCgyNTUmZVsxMV0pPDwyNCxwPTI1NSZlWzEyXXwoMjU1JmVbMTNdKTw8OHwoMjU1JmVbMTRdKTw8MTZ8KDI1NSZlWzE1XSk8PDI0LGI9MjU1Jm5bOF18KDI1NSZuWzldKTw8OHwoMjU1Jm5bMTBdKTw8MTZ8KDI1NSZuWzExXSk8PDI0LHY9MjU1JnJbMTZdfCgyNTUmclsxN10pPDw4fCgyNTUmclsxOF0pPDwxNnwoMjU1JnJbMTldKTw8MjQseT0yNTUmclsyMF18KDI1NSZyWzIxXSk8PDh8KDI1NSZyWzIyXSk8PDE2fCgyNTUmclsyM10pPDwyNCxtPTI1NSZyWzI0XXwoMjU1JnJbMjVdKTw8OHwoMjU1JnJbMjZdKTw8MTZ8KDI1NSZyWzI3XSk8PDI0LGc9MjU1JnJbMjhdfCgyNTUmclsyOV0pPDw4fCgyNTUmclszMF0pPDwxNnwoMjU1JnJbMzFdKTw8MjQsdz0yNTUmblsxMl18KDI1NSZuWzEzXSk8PDh8KDI1NSZuWzE0XSk8PDE2fCgyNTUmblsxNV0pPDwyNCxfPW8sTT1hLFM9ZixFPXMsQT11LGs9aCx4PWMsST1kLEI9bCxPPXAsUj1iLFA9dixUPXksaj1tLEM9ZyxOPXcsTD0wO0w8MjA7TCs9MilpPV8rVHwwLEFePWk8PDd8aT4+PjI1LGk9QStffDAsQl49aTw8OXxpPj4+MjMsaT1CK0F8MCxUXj1pPDwxM3xpPj4+MTksaT1UK0J8MCxfXj1pPDwxOHxpPj4+MTQsaT1rK018MCxPXj1pPDw3fGk+Pj4yNSxpPU8ra3wwLGpePWk8PDl8aT4+PjIzLGk9aitPfDAsTV49aTw8MTN8aT4+PjE5LGk9TStqfDAsa149aTw8MTh8aT4+PjE0LGk9Uit4fDAsQ149aTw8N3xpPj4+MjUsaT1DK1J8MCxTXj1pPDw5fGk+Pj4yMyxpPVMrQ3wwLHhePWk8PDEzfGk+Pj4xOSxpPXgrU3wwLFJePWk8PDE4fGk+Pj4xNCxpPU4rUHwwLEVePWk8PDd8aT4+PjI1LGk9RStOfDAsSV49aTw8OXxpPj4+MjMsaT1JK0V8MCxQXj1pPDwxM3xpPj4+MTksaT1QK0l8MCxOXj1pPDwxOHxpPj4+MTQsaT1fK0V8MCxNXj1pPDw3fGk+Pj4yNSxpPU0rX3wwLFNePWk8PDl8aT4+PjIzLGk9UytNfDAsRV49aTw8MTN8aT4+PjE5LGk9RStTfDAsX149aTw8MTh8aT4+PjE0LGk9aytBfDAseF49aTw8N3xpPj4+MjUsaT14K2t8MCxJXj1pPDw5fGk+Pj4yMyxpPUkreHwwLEFePWk8PDEzfGk+Pj4xOSxpPUErSXwwLGtePWk8PDE4fGk+Pj4xNCxpPVIrT3wwLFBePWk8PDd8aT4+PjI1LGk9UCtSfDAsQl49aTw8OXxpPj4+MjMsaT1CK1B8MCxPXj1pPDwxM3xpPj4+MTksaT1PK0J8MCxSXj1pPDwxOHxpPj4+MTQsaT1OK0N8MCxUXj1pPDw3fGk+Pj4yNSxpPVQrTnwwLGpePWk8PDl8aT4+PjIzLGk9aitUfDAsQ149aTw8MTN8aT4+PjE5LGk9QytqfDAsTl49aTw8MTh8aT4+PjE0O3RbMF09Xz4+PjAmMjU1LHRbMV09Xz4+PjgmMjU1LHRbMl09Xz4+PjE2JjI1NSx0WzNdPV8+Pj4yNCYyNTUsdFs0XT1rPj4+MCYyNTUsdFs1XT1rPj4+OCYyNTUsdFs2XT1rPj4+MTYmMjU1LHRbN109az4+PjI0JjI1NSx0WzhdPVI+Pj4wJjI1NSx0WzldPVI+Pj44JjI1NSx0WzEwXT1SPj4+MTYmMjU1LHRbMTFdPVI+Pj4yNCYyNTUsdFsxMl09Tj4+PjAmMjU1LHRbMTNdPU4+Pj44JjI1NSx0WzE0XT1OPj4+MTYmMjU1LHRbMTVdPU4+Pj4yNCYyNTUsdFsxNl09eD4+PjAmMjU1LHRbMTddPXg+Pj44JjI1NSx0WzE4XT14Pj4+MTYmMjU1LHRbMTldPXg+Pj4yNCYyNTUsdFsyMF09ST4+PjAmMjU1LHRbMjFdPUk+Pj44JjI1NSx0WzIyXT1JPj4+MTYmMjU1LHRbMjNdPUk+Pj4yNCYyNTUsdFsyNF09Qj4+PjAmMjU1LHRbMjVdPUI+Pj44JjI1NSx0WzI2XT1CPj4+MTYmMjU1LHRbMjddPUI+Pj4yNCYyNTUsdFsyOF09Tz4+PjAmMjU1LHRbMjldPU8+Pj44JjI1NSx0WzMwXT1PPj4+MTYmMjU1LHRbMzFdPU8+Pj4yNCYyNTV9ZnVuY3Rpb24gcyh0LGUscixuKXthKHQsZSxyLG4pfWZ1bmN0aW9uIHUodCxlLHIsbil7Zih0LGUscixuKX1mdW5jdGlvbiBoKHQsZSxyLG4saSxvLGEpe3ZhciBmLHUsaD1uZXcgVWludDhBcnJheSgxNiksYz1uZXcgVWludDhBcnJheSg2NCk7Zm9yKHU9MDt1PDE2O3UrKyloW3VdPTA7Zm9yKHU9MDt1PDg7dSsrKWhbdV09b1t1XTtmb3IoO2k+PTY0Oyl7Zm9yKHMoYyxoLGEsZHQpLHU9MDt1PDY0O3UrKyl0W2UrdV09cltuK3VdXmNbdV07Zm9yKGY9MSx1PTg7dTwxNjt1KyspZj1mKygyNTUmaFt1XSl8MCxoW3VdPTI1NSZmLGY+Pj49ODtpLT02NCxlKz02NCxuKz02NH1pZihpPjApZm9yKHMoYyxoLGEsZHQpLHU9MDt1PGk7dSsrKXRbZSt1XT1yW24rdV1eY1t1XTtyZXR1cm4gMH1mdW5jdGlvbiBjKHQsZSxyLG4saSl7dmFyIG8sYSxmPW5ldyBVaW50OEFycmF5KDE2KSx1PW5ldyBVaW50OEFycmF5KDY0KTtmb3IoYT0wO2E8MTY7YSsrKWZbYV09MDtmb3IoYT0wO2E8ODthKyspZlthXT1uW2FdO2Zvcig7cj49NjQ7KXtmb3Iocyh1LGYsaSxkdCksYT0wO2E8NjQ7YSsrKXRbZSthXT11W2FdO2ZvcihvPTEsYT04O2E8MTY7YSsrKW89bysoMjU1JmZbYV0pfDAsZlthXT0yNTUmbyxvPj4+PTg7ci09NjQsZSs9NjR9aWYocj4wKWZvcihzKHUsZixpLGR0KSxhPTA7YTxyO2ErKyl0W2UrYV09dVthXTtyZXR1cm4gMH1mdW5jdGlvbiBkKHQsZSxyLG4saSl7dmFyIG89bmV3IFVpbnQ4QXJyYXkoMzIpO3UobyxuLGksZHQpO2Zvcih2YXIgYT1uZXcgVWludDhBcnJheSg4KSxmPTA7Zjw4O2YrKylhW2ZdPW5bZisxNl07cmV0dXJuIGModCxlLHIsYSxvKX1mdW5jdGlvbiBsKHQsZSxyLG4saSxvLGEpe3ZhciBmPW5ldyBVaW50OEFycmF5KDMyKTt1KGYsbyxhLGR0KTtmb3IodmFyIHM9bmV3IFVpbnQ4QXJyYXkoOCksYz0wO2M8ODtjKyspc1tjXT1vW2MrMTZdO3JldHVybiBoKHQsZSxyLG4saSxzLGYpfWZ1bmN0aW9uIHAodCxlLHIsbixpLG8pe3ZhciBhPW5ldyBsdChvKTtyZXR1cm4gYS51cGRhdGUocixuLGkpLGEuZmluaXNoKHQsZSksMH1mdW5jdGlvbiBiKHQsZSxyLG4sbyxhKXt2YXIgZj1uZXcgVWludDhBcnJheSgxNik7cmV0dXJuIHAoZiwwLHIsbixvLGEpLGkodCxlLGYsMCl9ZnVuY3Rpb24gdih0LGUscixuLGkpe3ZhciBvO2lmKHI8MzIpcmV0dXJuLTE7Zm9yKGwodCwwLGUsMCxyLG4saSkscCh0LDE2LHQsMzIsci0zMix0KSxvPTA7bzwxNjtvKyspdFtvXT0wO3JldHVybiAwfWZ1bmN0aW9uIHkodCxlLHIsbixpKXt2YXIgbyxhPW5ldyBVaW50OEFycmF5KDMyKTtpZihyPDMyKXJldHVybi0xO2lmKGQoYSwwLDMyLG4saSksMCE9PWIoZSwxNixlLDMyLHItMzIsYSkpcmV0dXJuLTE7Zm9yKGwodCwwLGUsMCxyLG4saSksbz0wO288MzI7bysrKXRbb109MDtyZXR1cm4gMH1mdW5jdGlvbiBtKHQsZSl7dmFyIHI7Zm9yKHI9MDtyPDE2O3IrKyl0W3JdPTB8ZVtyXX1mdW5jdGlvbiBnKHQpe3ZhciBlLHIsbj0xO2ZvcihlPTA7ZTwxNjtlKyspcj10W2VdK24rNjU1MzUsbj1NYXRoLmZsb29yKHIvNjU1MzYpLHRbZV09ci02NTUzNipuO3RbMF0rPW4tMSszNyoobi0xKX1mdW5jdGlvbiB3KHQsZSxyKXtmb3IodmFyIG4saT1+KHItMSksbz0wO288MTY7bysrKW49aSYodFtvXV5lW29dKSx0W29dXj1uLGVbb11ePW59ZnVuY3Rpb24gXyh0LGUpe3ZhciByLG4saSxvPXR0KCksYT10dCgpO2ZvcihyPTA7cjwxNjtyKyspYVtyXT1lW3JdO2ZvcihnKGEpLGcoYSksZyhhKSxuPTA7bjwyO24rKyl7Zm9yKG9bMF09YVswXS02NTUxNyxyPTE7cjwxNTtyKyspb1tyXT1hW3JdLTY1NTM1LShvW3ItMV0+PjE2JjEpLG9bci0xXSY9NjU1MzU7b1sxNV09YVsxNV0tMzI3NjctKG9bMTRdPj4xNiYxKSxpPW9bMTVdPj4xNiYxLG9bMTRdJj02NTUzNSx3KGEsbywxLWkpfWZvcihyPTA7cjwxNjtyKyspdFsyKnJdPTI1NSZhW3JdLHRbMipyKzFdPWFbcl0+Pjh9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPW5ldyBVaW50OEFycmF5KDMyKSxuPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gXyhyLHQpLF8obixlKSxvKHIsMCxuLDApfWZ1bmN0aW9uIFModCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBfKGUsdCksMSZlWzBdfWZ1bmN0aW9uIEUodCxlKXt2YXIgcjtmb3Iocj0wO3I8MTY7cisrKXRbcl09ZVsyKnJdKyhlWzIqcisxXTw8OCk7dFsxNV0mPTMyNzY3fWZ1bmN0aW9uIEEodCxlLHIpe2Zvcih2YXIgbj0wO248MTY7bisrKXRbbl09ZVtuXStyW25dfWZ1bmN0aW9uIGsodCxlLHIpe2Zvcih2YXIgbj0wO248MTY7bisrKXRbbl09ZVtuXS1yW25dfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuLGksbz0wLGE9MCxmPTAscz0wLHU9MCxoPTAsYz0wLGQ9MCxsPTAscD0wLGI9MCx2PTAseT0wLG09MCxnPTAsdz0wLF89MCxNPTAsUz0wLEU9MCxBPTAsaz0wLHg9MCxJPTAsQj0wLE89MCxSPTAsUD0wLFQ9MCxqPTAsQz0wLE49clswXSxMPXJbMV0sVT1yWzJdLHo9clszXSxEPXJbNF0scT1yWzVdLEY9cls2XSxLPXJbN10sRz1yWzhdLFY9cls5XSxIPXJbMTBdLFg9clsxMV0sWT1yWzEyXSxXPXJbMTNdLFo9clsxNF0sSj1yWzE1XTtuPWVbMF0sbys9bipOLGErPW4qTCxmKz1uKlUscys9bip6LHUrPW4qRCxoKz1uKnEsYys9bipGLGQrPW4qSyxsKz1uKkcscCs9bipWLGIrPW4qSCx2Kz1uKlgseSs9bipZLG0rPW4qVyxnKz1uKlosdys9bipKLG49ZVsxXSxhKz1uKk4sZis9bipMLHMrPW4qVSx1Kz1uKnosaCs9bipELGMrPW4qcSxkKz1uKkYsbCs9bipLLHArPW4qRyxiKz1uKlYsdis9bipILHkrPW4qWCxtKz1uKlksZys9bipXLHcrPW4qWixfKz1uKkosbj1lWzJdLGYrPW4qTixzKz1uKkwsdSs9bipVLGgrPW4qeixjKz1uKkQsZCs9bipxLGwrPW4qRixwKz1uKkssYis9bipHLHYrPW4qVix5Kz1uKkgsbSs9bipYLGcrPW4qWSx3Kz1uKlcsXys9bipaLE0rPW4qSixuPWVbM10scys9bipOLHUrPW4qTCxoKz1uKlUsYys9bip6LGQrPW4qRCxsKz1uKnEscCs9bipGLGIrPW4qSyx2Kz1uKkcseSs9bipWLG0rPW4qSCxnKz1uKlgsdys9bipZLF8rPW4qVyxNKz1uKlosUys9bipKLG49ZVs0XSx1Kz1uKk4saCs9bipMLGMrPW4qVSxkKz1uKnosbCs9bipELHArPW4qcSxiKz1uKkYsdis9bipLLHkrPW4qRyxtKz1uKlYsZys9bipILHcrPW4qWCxfKz1uKlksTSs9bipXLFMrPW4qWixFKz1uKkosbj1lWzVdLGgrPW4qTixjKz1uKkwsZCs9bipVLGwrPW4qeixwKz1uKkQsYis9bipxLHYrPW4qRix5Kz1uKkssbSs9bipHLGcrPW4qVix3Kz1uKkgsXys9bipYLE0rPW4qWSxTKz1uKlcsRSs9bipaLEErPW4qSixuPWVbNl0sYys9bipOLGQrPW4qTCxsKz1uKlUscCs9bip6LGIrPW4qRCx2Kz1uKnEseSs9bipGLG0rPW4qSyxnKz1uKkcsdys9bipWLF8rPW4qSCxNKz1uKlgsUys9bipZLEUrPW4qVyxBKz1uKlosays9bipKLG49ZVs3XSxkKz1uKk4sbCs9bipMLHArPW4qVSxiKz1uKnosdis9bipELHkrPW4qcSxtKz1uKkYsZys9bipLLHcrPW4qRyxfKz1uKlYsTSs9bipILFMrPW4qWCxFKz1uKlksQSs9bipXLGsrPW4qWix4Kz1uKkosbj1lWzhdLGwrPW4qTixwKz1uKkwsYis9bipVLHYrPW4qeix5Kz1uKkQsbSs9bipxLGcrPW4qRix3Kz1uKkssXys9bipHLE0rPW4qVixTKz1uKkgsRSs9bipYLEErPW4qWSxrKz1uKlcseCs9bipaLEkrPW4qSixuPWVbOV0scCs9bipOLGIrPW4qTCx2Kz1uKlUseSs9bip6LG0rPW4qRCxnKz1uKnEsdys9bipGLF8rPW4qSyxNKz1uKkcsUys9bipWLEUrPW4qSCxBKz1uKlgsays9bipZLHgrPW4qVyxJKz1uKlosQis9bipKLG49ZVsxMF0sYis9bipOLHYrPW4qTCx5Kz1uKlUsbSs9bip6LGcrPW4qRCx3Kz1uKnEsXys9bipGLE0rPW4qSyxTKz1uKkcsRSs9bipWLEErPW4qSCxrKz1uKlgseCs9bipZLEkrPW4qVyxCKz1uKlosTys9bipKLG49ZVsxMV0sdis9bipOLHkrPW4qTCxtKz1uKlUsZys9bip6LHcrPW4qRCxfKz1uKnEsTSs9bipGLFMrPW4qSyxFKz1uKkcsQSs9bipWLGsrPW4qSCx4Kz1uKlg7SSs9bipZO0IrPW4qVyxPKz1uKlosUis9bipKLG49ZVsxMl0seSs9bipOLG0rPW4qTCxnKz1uKlUsdys9bip6LF8rPW4qRCxNKz1uKnEsUys9bipGLEUrPW4qSyxBKz1uKkcsays9bipWLHgrPW4qSCxJKz1uKlgsQis9bipZLE8rPW4qVyxSKz1uKlosUCs9bipKLG49ZVsxM10sbSs9bipOLGcrPW4qTCx3Kz1uKlUsXys9bip6LE0rPW4qRCxTKz1uKnEsRSs9bipGLEErPW4qSyxrKz1uKkcseCs9bipWLEkrPW4qSCxCKz1uKlgsTys9bipZLFIrPW4qVyxQKz1uKlosVCs9bipKLG49ZVsxNF0sZys9bipOLHcrPW4qTCxfKz1uKlUsTSs9bip6LFMrPW4qRCxFKz1uKnEsQSs9bipGLGsrPW4qSyx4Kz1uKkcsSSs9bipWLEIrPW4qSCxPKz1uKlgsUis9bipZLFArPW4qVyxUKz1uKlosais9bipKLG49ZVsxNV0sdys9bipOLF8rPW4qTCxNKz1uKlUsUys9bip6LEUrPW4qRCxBKz1uKnEsays9bipGLHgrPW4qSyxJKz1uKkcsQis9bipWLE8rPW4qSCxSKz1uKlgsUCs9bipZLFQrPW4qVyxqKz1uKlosQys9bipKLG8rPTM4Kl8sYSs9MzgqTSxmKz0zOCpTLHMrPTM4KkUsdSs9MzgqQSxoKz0zOCprLGMrPTM4KngsZCs9MzgqSSxsKz0zOCpCLHArPTM4Kk8sYis9MzgqUix2Kz0zOCpQLHkrPTM4KlQsbSs9MzgqaixnKz0zOCpDLGk9MSxuPW8raSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksbz1uLTY1NTM2Kmksbj1hK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGE9bi02NTUzNippLG49ZitpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxmPW4tNjU1MzYqaSxuPXMraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikscz1uLTY1NTM2Kmksbj11K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHU9bi02NTUzNippLG49aCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxoPW4tNjU1MzYqaSxuPWMraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksYz1uLTY1NTM2Kmksbj1kK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGQ9bi02NTUzNippLG49bCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxsPW4tNjU1MzYqaSxuPXAraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikscD1uLTY1NTM2Kmksbj1iK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGI9bi02NTUzNippLG49ditpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx2PW4tNjU1MzYqaSxuPXkraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikseT1uLTY1NTM2Kmksbj1tK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLG09bi02NTUzNippLG49ZytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxnPW4tNjU1MzYqaSxuPXcraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksdz1uLTY1NTM2Kmksbys9aS0xKzM3KihpLTEpLGk9MSxuPW8raSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksbz1uLTY1NTM2Kmksbj1hK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGE9bi02NTUzNippLG49ZitpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxmPW4tNjU1MzYqaSxuPXMraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikscz1uLTY1NTM2Kmksbj11K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHU9bi02NTUzNippLG49aCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxoPW4tNjU1MzYqaSxuPWMraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksYz1uLTY1NTM2Kmksbj1kK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGQ9bi02NTUzNippLG49bCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxsPW4tNjU1MzYqaSxuPXAraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikscD1uLTY1NTM2Kmksbj1iK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGI9bi02NTUzNippLG49ditpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx2PW4tNjU1MzYqaSxuPXkraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikseT1uLTY1NTM2Kmksbj1tK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLG09bi02NTUzNippLG49ZytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxnPW4tNjU1MzYqaSxuPXcraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksdz1uLTY1NTM2Kmksbys9aS0xKzM3KihpLTEpLHRbMF09byx0WzFdPWEsdFsyXT1mLHRbM109cyx0WzRdPXUsdFs1XT1oLHRbNl09Yyx0WzddPWQsdFs4XT1sLHRbOV09cCx0WzEwXT1iLHRbMTFdPXYsdFsxMl09eSx0WzEzXT1tO3RbMTRdPWc7dFsxNV09d31mdW5jdGlvbiBJKHQsZSl7eCh0LGUsZSl9ZnVuY3Rpb24gQih0LGUpe3ZhciByLG49dHQoKTtmb3Iocj0wO3I8MTY7cisrKW5bcl09ZVtyXTtmb3Iocj0yNTM7cj49MDtyLS0pSShuLG4pLDIhPT1yJiY0IT09ciYmeChuLG4sZSk7Zm9yKHI9MDtyPDE2O3IrKyl0W3JdPW5bcl19ZnVuY3Rpb24gTyh0LGUpe3ZhciByLG49dHQoKTtmb3Iocj0wO3I8MTY7cisrKW5bcl09ZVtyXTtmb3Iocj0yNTA7cj49MDtyLS0pSShuLG4pLDEhPT1yJiZ4KG4sbixlKTtmb3Iocj0wO3I8MTY7cisrKXRbcl09bltyXX1mdW5jdGlvbiBSKHQsZSxyKXt2YXIgbixpLG89bmV3IFVpbnQ4QXJyYXkoMzIpLGE9bmV3IEZsb2F0NjRBcnJheSg4MCksZj10dCgpLHM9dHQoKSx1PXR0KCksaD10dCgpLGM9dHQoKSxkPXR0KCk7Zm9yKGk9MDtpPDMxO2krKylvW2ldPWVbaV07Zm9yKG9bMzFdPTEyNyZlWzMxXXw2NCxvWzBdJj0yNDgsRShhLHIpLGk9MDtpPDE2O2krKylzW2ldPWFbaV0saFtpXT1mW2ldPXVbaV09MDtmb3IoZlswXT1oWzBdPTEsaT0yNTQ7aT49MDstLWkpbj1vW2k+Pj4zXT4+Pig3JmkpJjEsdyhmLHMsbiksdyh1LGgsbiksQShjLGYsdSksayhmLGYsdSksQSh1LHMsaCksayhzLHMsaCksSShoLGMpLEkoZCxmKSx4KGYsdSxmKSx4KHUscyxjKSxBKGMsZix1KSxrKGYsZix1KSxJKHMsZiksayh1LGgsZCkseChmLHUsYXQpLEEoZixmLGgpLHgodSx1LGYpLHgoZixoLGQpLHgoaCxzLGEpLEkocyxjKSx3KGYscyxuKSx3KHUsaCxuKTtmb3IoaT0wO2k8MTY7aSsrKWFbaSsxNl09ZltpXSxhW2krMzJdPXVbaV0sYVtpKzQ4XT1zW2ldLGFbaSs2NF09aFtpXTt2YXIgbD1hLnN1YmFycmF5KDMyKSxwPWEuc3ViYXJyYXkoMTYpO3JldHVybiBCKGwsbCkseChwLHAsbCksXyh0LHApLDB9ZnVuY3Rpb24gUCh0LGUpe3JldHVybiBSKHQsZSxudCl9ZnVuY3Rpb24gVCh0LGUpe3JldHVybiBldChlLDMyKSxQKHQsZSl9ZnVuY3Rpb24gaih0LGUscil7dmFyIG49bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBSKG4scixlKSx1KHQscnQsbixkdCl9ZnVuY3Rpb24gQyh0LGUscixuLGksbyl7dmFyIGE9bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBqKGEsaSxvKSxwdCh0LGUscixuLGEpfWZ1bmN0aW9uIE4odCxlLHIsbixpLG8pe3ZhciBhPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gaihhLGksbyksYnQodCxlLHIsbixhKX1mdW5jdGlvbiBMKHQsZSxyLG4pe2Zvcih2YXIgaSxvLGEsZixzLHUsaCxjLGQsbCxwLGIsdix5LG0sZyx3LF8sTSxTLEUsQSxrLHgsSSxCLE89bmV3IEludDMyQXJyYXkoMTYpLFI9bmV3IEludDMyQXJyYXkoMTYpLFA9dFswXSxUPXRbMV0saj10WzJdLEM9dFszXSxOPXRbNF0sTD10WzVdLFU9dFs2XSx6PXRbN10sRD1lWzBdLHE9ZVsxXSxGPWVbMl0sSz1lWzNdLEc9ZVs0XSxWPWVbNV0sSD1lWzZdLFg9ZVs3XSxZPTA7bj49MTI4Oyl7Zm9yKE09MDtNPDE2O00rKylTPTgqTStZLE9bTV09cltTKzBdPDwyNHxyW1MrMV08PDE2fHJbUysyXTw8OHxyW1MrM10sUltNXT1yW1MrNF08PDI0fHJbUys1XTw8MTZ8cltTKzZdPDw4fHJbUys3XTtmb3IoTT0wO008ODA7TSsrKWlmKGk9UCxvPVQsYT1qLGY9QyxzPU4sdT1MLGg9VSxjPXosZD1ELGw9cSxwPUYsYj1LLHY9Ryx5PVYsbT1ILGc9WCxFPXosQT1YLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT0oTj4+PjE0fEc8PDE4KV4oTj4+PjE4fEc8PDE0KV4oRz4+Pjl8Tjw8MjMpLEE9KEc+Pj4xNHxOPDwxOCleKEc+Pj4xOHxOPDwxNCleKE4+Pj45fEc8PDIzKSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNixFPU4mTF5+TiZVLEE9RyZWXn5HJkgsays9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYsRT12dFsyKk1dLEE9dnRbMipNKzFdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LEU9T1tNJTE2XSxBPVJbTSUxNl0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdz02NTUzNSZJfEI8PDE2LF89NjU1MzUma3x4PDwxNixFPXcsQT1fLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT0oUD4+PjI4fEQ8PDQpXihEPj4+MnxQPDwzMCleKEQ+Pj43fFA8PDI1KSxBPShEPj4+Mjh8UDw8NCleKFA+Pj4yfEQ8PDMwKV4oUD4+Pjd8RDw8MjUpLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LEU9UCZUXlAmal5UJmosQT1EJnFeRCZGXnEmRixrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNixjPTY1NTM1Jkl8Qjw8MTYsZz02NTUzNSZrfHg8PDE2LEU9ZixBPWIsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXcsQT1fLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LGY9NjU1MzUmSXxCPDwxNixiPTY1NTM1Jmt8eDw8MTYsVD1pLGo9byxDPWEsTj1mLEw9cyxVPXUsej1oLFA9YyxxPWQsRj1sLEs9cCxHPWIsVj12LEg9eSxYPW0sRD1nLE0lMTY9PT0xNSlmb3IoUz0wO1M8MTY7UysrKUU9T1tTXSxBPVJbU10saz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPU9bKFMrOSklMTZdLEE9UlsoUys5KSUxNl0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYsdz1PWyhTKzEpJTE2XSxfPVJbKFMrMSklMTZdLEU9KHc+Pj4xfF88PDMxKV4odz4+Pjh8Xzw8MjQpXnc+Pj43LEE9KF8+Pj4xfHc8PDMxKV4oXz4+Pjh8dzw8MjQpXihfPj4+N3x3PDwyNSksays9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYsdz1PWyhTKzE0KSUxNl0sXz1SWyhTKzE0KSUxNl0sRT0odz4+PjE5fF88PDEzKV4oXz4+PjI5fHc8PDMpXnc+Pj42LEE9KF8+Pj4xOXx3PDwxMyleKHc+Pj4yOXxfPDwzKV4oXz4+PjZ8dzw8MjYpLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LE9bU109NjU1MzUmSXxCPDwxNixSW1NdPTY1NTM1Jmt8eDw8MTY7RT1QLEE9RCxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFswXSxBPWVbMF0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFswXT1QPTY1NTM1Jkl8Qjw8MTYsZVswXT1EPTY1NTM1Jmt8eDw8MTYsRT1ULEE9cSxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFsxXSxBPWVbMV0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFsxXT1UPTY1NTM1Jkl8Qjw8MTYsZVsxXT1xPTY1NTM1Jmt8eDw8MTYsRT1qLEE9RixrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFsyXSxBPWVbMl0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFsyXT1qPTY1NTM1Jkl8Qjw8MTYsZVsyXT1GPTY1NTM1Jmt8eDw8MTYsRT1DLEE9SyxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFszXSxBPWVbM10says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFszXT1DPTY1NTM1Jkl8Qjw8MTYsZVszXT1LPTY1NTM1Jmt8eDw8MTYsRT1OLEE9RyxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFs0XSxBPWVbNF0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFs0XT1OPTY1NTM1Jkl8Qjw8MTYsZVs0XT1HPTY1NTM1Jmt8eDw8MTYsRT1MLEE9VixrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFs1XSxBPWVbNV0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFs1XT1MPTY1NTM1Jkl8Qjw8MTYsZVs1XT1WPTY1NTM1Jmt8eDw8MTYsRT1VLEE9SCxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFs2XSxBPWVbNl0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFs2XT1VPTY1NTM1Jkl8Qjw8MTYsZVs2XT1IPTY1NTM1Jmt8eDw8MTYsRT16LEE9WCxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFs3XSxBPWVbN10says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFs3XT16PTY1NTM1Jkl8Qjw8MTYsZVs3XT1YPTY1NTM1Jmt8eDw8MTYsWSs9MTI4LG4tPTEyOH1yZXR1cm4gbn1mdW5jdGlvbiBVKHQscixuKXt2YXIgaSxvPW5ldyBJbnQzMkFycmF5KDgpLGE9bmV3IEludDMyQXJyYXkoOCksZj1uZXcgVWludDhBcnJheSgyNTYpLHM9bjtmb3Iob1swXT0xNzc5MDMzNzAzLG9bMV09MzE0NDEzNDI3NyxvWzJdPTEwMTM5MDQyNDIsb1szXT0yNzczNDgwNzYyLG9bNF09MTM1OTg5MzExOSxvWzVdPTI2MDA4MjI5MjQsb1s2XT01Mjg3MzQ2MzUsb1s3XT0xNTQxNDU5MjI1LGFbMF09NDA4OTIzNTcyMCxhWzFdPTIyMjc4NzM1OTUsYVsyXT00MjcxMTc1NzIzLGFbM109MTU5NTc1MDEyOSxhWzRdPTI5MTc1NjUxMzcsYVs1XT03MjU1MTExOTksYVs2XT00MjE1Mzg5NTQ3LGFbN109MzI3MDMzMjA5LEwobyxhLHIsbiksbiU9MTI4LGk9MDtpPG47aSsrKWZbaV09cltzLW4raV07Zm9yKGZbbl09MTI4LG49MjU2LTEyOCoobjwxMTI/MTowKSxmW24tOV09MCxlKGYsbi04LHMvNTM2ODcwOTEyfDAsczw8MyksTChvLGEsZixuKSxpPTA7aTw4O2krKyllKHQsOCppLG9baV0sYVtpXSk7cmV0dXJuIDB9ZnVuY3Rpb24geih0LGUpe3ZhciByPXR0KCksbj10dCgpLGk9dHQoKSxvPXR0KCksYT10dCgpLGY9dHQoKSxzPXR0KCksdT10dCgpLGg9dHQoKTtrKHIsdFsxXSx0WzBdKSxrKGgsZVsxXSxlWzBdKSx4KHIscixoKSxBKG4sdFswXSx0WzFdKSxBKGgsZVswXSxlWzFdKSx4KG4sbixoKSx4KGksdFszXSxlWzNdKSx4KGksaSxzdCkseChvLHRbMl0sZVsyXSksQShvLG8sbyksayhhLG4sciksayhmLG8saSksQShzLG8saSksQSh1LG4scikseCh0WzBdLGEsZikseCh0WzFdLHUscykseCh0WzJdLHMsZikseCh0WzNdLGEsdSl9ZnVuY3Rpb24gRCh0LGUscil7dmFyIG47Zm9yKG49MDtuPDQ7bisrKXcodFtuXSxlW25dLHIpfWZ1bmN0aW9uIHEodCxlKXt2YXIgcj10dCgpLG49dHQoKSxpPXR0KCk7QihpLGVbMl0pLHgocixlWzBdLGkpLHgobixlWzFdLGkpLF8odCxuKSx0WzMxXV49UyhyKTw8N31mdW5jdGlvbiBGKHQsZSxyKXt2YXIgbixpO2ZvcihtKHRbMF0saXQpLG0odFsxXSxvdCksbSh0WzJdLG90KSxtKHRbM10saXQpLGk9MjU1O2k+PTA7LS1pKW49cltpLzh8MF0+Pig3JmkpJjEsRCh0LGUsbikseihlLHQpLHoodCx0KSxEKHQsZSxuKX1mdW5jdGlvbiBLKHQsZSl7dmFyIHI9W3R0KCksdHQoKSx0dCgpLHR0KCldO1xubShyWzBdLHV0KSxtKHJbMV0saHQpLG0oclsyXSxvdCkseChyWzNdLHV0LGh0KSxGKHQscixlKX1mdW5jdGlvbiBHKHQsZSxyKXt2YXIgbixpPW5ldyBVaW50OEFycmF5KDY0KSxvPVt0dCgpLHR0KCksdHQoKSx0dCgpXTtmb3Iocnx8ZXQoZSwzMiksVShpLGUsMzIpLGlbMF0mPTI0OCxpWzMxXSY9MTI3LGlbMzFdfD02NCxLKG8saSkscSh0LG8pLG49MDtuPDMyO24rKyllW24rMzJdPXRbbl07cmV0dXJuIDB9ZnVuY3Rpb24gVih0LGUpe3ZhciByLG4saSxvO2ZvcihuPTYzO24+PTMyOy0tbil7Zm9yKHI9MCxpPW4tMzIsbz1uLTEyO2k8bzsrK2kpZVtpXSs9ci0xNiplW25dKnl0W2ktKG4tMzIpXSxyPWVbaV0rMTI4Pj44LGVbaV0tPTI1NipyO2VbaV0rPXIsZVtuXT0wfWZvcihyPTAsaT0wO2k8MzI7aSsrKWVbaV0rPXItKGVbMzFdPj40KSp5dFtpXSxyPWVbaV0+PjgsZVtpXSY9MjU1O2ZvcihpPTA7aTwzMjtpKyspZVtpXS09cip5dFtpXTtmb3Iobj0wO248MzI7bisrKWVbbisxXSs9ZVtuXT4+OCx0W25dPTI1NSZlW25dfWZ1bmN0aW9uIEgodCl7dmFyIGUscj1uZXcgRmxvYXQ2NEFycmF5KDY0KTtmb3IoZT0wO2U8NjQ7ZSsrKXJbZV09dFtlXTtmb3IoZT0wO2U8NjQ7ZSsrKXRbZV09MDtWKHQscil9ZnVuY3Rpb24gWCh0LGUscixuKXt2YXIgaSxvLGE9bmV3IFVpbnQ4QXJyYXkoNjQpLGY9bmV3IFVpbnQ4QXJyYXkoNjQpLHM9bmV3IFVpbnQ4QXJyYXkoNjQpLHU9bmV3IEZsb2F0NjRBcnJheSg2NCksaD1bdHQoKSx0dCgpLHR0KCksdHQoKV07VShhLG4sMzIpLGFbMF0mPTI0OCxhWzMxXSY9MTI3LGFbMzFdfD02NDt2YXIgYz1yKzY0O2ZvcihpPTA7aTxyO2krKyl0WzY0K2ldPWVbaV07Zm9yKGk9MDtpPDMyO2krKyl0WzMyK2ldPWFbMzIraV07Zm9yKFUocyx0LnN1YmFycmF5KDMyKSxyKzMyKSxIKHMpLEsoaCxzKSxxKHQsaCksaT0zMjtpPDY0O2krKyl0W2ldPW5baV07Zm9yKFUoZix0LHIrNjQpLEgoZiksaT0wO2k8NjQ7aSsrKXVbaV09MDtmb3IoaT0wO2k8MzI7aSsrKXVbaV09c1tpXTtmb3IoaT0wO2k8MzI7aSsrKWZvcihvPTA7bzwzMjtvKyspdVtpK29dKz1mW2ldKmFbb107cmV0dXJuIFYodC5zdWJhcnJheSgzMiksdSksY31mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dHQoKSxuPXR0KCksaT10dCgpLG89dHQoKSxhPXR0KCksZj10dCgpLHM9dHQoKTtyZXR1cm4gbSh0WzJdLG90KSxFKHRbMV0sZSksSShpLHRbMV0pLHgobyxpLGZ0KSxrKGksaSx0WzJdKSxBKG8sdFsyXSxvKSxJKGEsbyksSShmLGEpLHgocyxmLGEpLHgocixzLGkpLHgocixyLG8pLE8ocixyKSx4KHIscixpKSx4KHIscixvKSx4KHIscixvKSx4KHRbMF0scixvKSxJKG4sdFswXSkseChuLG4sbyksTShuLGkpJiZ4KHRbMF0sdFswXSxjdCksSShuLHRbMF0pLHgobixuLG8pLE0obixpKT8tMTooUyh0WzBdKT09PWVbMzFdPj43JiZrKHRbMF0saXQsdFswXSkseCh0WzNdLHRbMF0sdFsxXSksMCl9ZnVuY3Rpb24gVyh0LGUscixuKXt2YXIgaSxhLGY9bmV3IFVpbnQ4QXJyYXkoMzIpLHM9bmV3IFVpbnQ4QXJyYXkoNjQpLHU9W3R0KCksdHQoKSx0dCgpLHR0KCldLGg9W3R0KCksdHQoKSx0dCgpLHR0KCldO2lmKGE9LTEscjw2NClyZXR1cm4tMTtpZihZKGgsbikpcmV0dXJuLTE7Zm9yKGk9MDtpPHI7aSsrKXRbaV09ZVtpXTtmb3IoaT0wO2k8MzI7aSsrKXRbaSszMl09bltpXTtpZihVKHMsdCxyKSxIKHMpLEYodSxoLHMpLEsoaCxlLnN1YmFycmF5KDMyKSkseih1LGgpLHEoZix1KSxyLT02NCxvKGUsMCxmLDApKXtmb3IoaT0wO2k8cjtpKyspdFtpXT0wO3JldHVybi0xfWZvcihpPTA7aTxyO2krKyl0W2ldPWVbaSs2NF07cmV0dXJuIGE9cn1mdW5jdGlvbiBaKHQsZSl7aWYodC5sZW5ndGghPT1tdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQga2V5IHNpemVcIik7aWYoZS5sZW5ndGghPT1ndCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgbm9uY2Ugc2l6ZVwiKX1mdW5jdGlvbiBKKHQsZSl7aWYodC5sZW5ndGghPT1FdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcHVibGljIGtleSBzaXplXCIpO2lmKGUubGVuZ3RoIT09QXQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHNlY3JldCBrZXkgc2l6ZVwiKX1mdW5jdGlvbiAkKCl7dmFyIHQsZTtmb3IoZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspaWYoXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCIhPT0odD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzW2VdKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcInVuZXhwZWN0ZWQgdHlwZSBcIit0K1wiLCB1c2UgVWludDhBcnJheVwiKX1mdW5jdGlvbiBRKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09MH12YXIgdHQ9ZnVuY3Rpb24odCl7dmFyIGUscj1uZXcgRmxvYXQ2NEFycmF5KDE2KTtpZih0KWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspcltlXT10W2VdO3JldHVybiByfSxldD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIm5vIFBSTkdcIil9LHJ0PW5ldyBVaW50OEFycmF5KDE2KSxudD1uZXcgVWludDhBcnJheSgzMik7bnRbMF09OTt2YXIgaXQ9dHQoKSxvdD10dChbMV0pLGF0PXR0KFs1NjEyOSwxXSksZnQ9dHQoWzMwODgzLDQ5NTMsMTk5MTQsMzAxODcsNTU0NjcsMTY3MDUsMjYzNywxMTIsNTk1NDQsMzA1ODUsMTY1MDUsMzYwMzksNjUxMzksMTExMTksMjc4ODYsMjA5OTVdKSxzdD10dChbNjE3ODUsOTkwNiwzOTgyOCw2MDM3NCw0NTM5OCwzMzQxMSw1Mjc0LDIyNCw1MzU1Miw2MTE3MSwzMzAxMCw2NTQyLDY0NzQzLDIyMjM5LDU1NzcyLDkyMjJdKSx1dD10dChbNTQ1NTQsMzY2NDUsMTE2MTYsNTE1NDIsNDI5MzAsMzgxODEsNTEwNDAsMjY5MjQsNTY0MTIsNjQ5ODIsNTc5MDUsNDkzMTYsMjE1MDIsNTI1OTAsMTQwMzUsODU1M10pLGh0PXR0KFsyNjIwMCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNF0pLGN0PXR0KFs0MTEzNiwxODk1OCw2OTUxLDUwNDE0LDU4NDg4LDQ0MzM1LDYxNTAsMTIwOTksNTUyMDcsMTU4NjcsMTUzLDExMDg1LDU3MDk5LDIwNDE3LDkzNDQsMTExMzldKSxkdD1uZXcgVWludDhBcnJheShbMTAxLDEyMCwxMTIsOTcsMTEwLDEwMCwzMiw1MSw1MCw0NSw5OCwxMjEsMTE2LDEwMSwzMiwxMDddKSxsdD1mdW5jdGlvbih0KXt0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNiksdGhpcy5yPW5ldyBVaW50MTZBcnJheSgxMCksdGhpcy5oPW5ldyBVaW50MTZBcnJheSgxMCksdGhpcy5wYWQ9bmV3IFVpbnQxNkFycmF5KDgpLHRoaXMubGVmdG92ZXI9MCx0aGlzLmZpbj0wO3ZhciBlLHIsbixpLG8sYSxmLHM7ZT0yNTUmdFswXXwoMjU1JnRbMV0pPDw4LHRoaXMuclswXT04MTkxJmUscj0yNTUmdFsyXXwoMjU1JnRbM10pPDw4LHRoaXMuclsxXT04MTkxJihlPj4+MTN8cjw8Myksbj0yNTUmdFs0XXwoMjU1JnRbNV0pPDw4LHRoaXMuclsyXT03OTM5JihyPj4+MTB8bjw8NiksaT0yNTUmdFs2XXwoMjU1JnRbN10pPDw4LHRoaXMuclszXT04MTkxJihuPj4+N3xpPDw5KSxvPTI1NSZ0WzhdfCgyNTUmdFs5XSk8PDgsdGhpcy5yWzRdPTI1NSYoaT4+PjR8bzw8MTIpLHRoaXMucls1XT1vPj4+MSY4MTkwLGE9MjU1JnRbMTBdfCgyNTUmdFsxMV0pPDw4LHRoaXMucls2XT04MTkxJihvPj4+MTR8YTw8MiksZj0yNTUmdFsxMl18KDI1NSZ0WzEzXSk8PDgsdGhpcy5yWzddPTgwNjUmKGE+Pj4xMXxmPDw1KSxzPTI1NSZ0WzE0XXwoMjU1JnRbMTVdKTw8OCx0aGlzLnJbOF09ODE5MSYoZj4+Pjh8czw8OCksdGhpcy5yWzldPXM+Pj41JjEyNyx0aGlzLnBhZFswXT0yNTUmdFsxNl18KDI1NSZ0WzE3XSk8PDgsdGhpcy5wYWRbMV09MjU1JnRbMThdfCgyNTUmdFsxOV0pPDw4LHRoaXMucGFkWzJdPTI1NSZ0WzIwXXwoMjU1JnRbMjFdKTw8OCx0aGlzLnBhZFszXT0yNTUmdFsyMl18KDI1NSZ0WzIzXSk8PDgsdGhpcy5wYWRbNF09MjU1JnRbMjRdfCgyNTUmdFsyNV0pPDw4LHRoaXMucGFkWzVdPTI1NSZ0WzI2XXwoMjU1JnRbMjddKTw8OCx0aGlzLnBhZFs2XT0yNTUmdFsyOF18KDI1NSZ0WzI5XSk8PDgsdGhpcy5wYWRbN109MjU1JnRbMzBdfCgyNTUmdFszMV0pPDw4fTtsdC5wcm90b3R5cGUuYmxvY2tzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxvLGEsZixzLHUsaCxjLGQsbCxwLGIsdix5LG0sZyx3LF8sTT10aGlzLmZpbj8wOjIwNDgsUz10aGlzLmhbMF0sRT10aGlzLmhbMV0sQT10aGlzLmhbMl0saz10aGlzLmhbM10seD10aGlzLmhbNF0sST10aGlzLmhbNV0sQj10aGlzLmhbNl0sTz10aGlzLmhbN10sUj10aGlzLmhbOF0sUD10aGlzLmhbOV0sVD10aGlzLnJbMF0saj10aGlzLnJbMV0sQz10aGlzLnJbMl0sTj10aGlzLnJbM10sTD10aGlzLnJbNF0sVT10aGlzLnJbNV0sej10aGlzLnJbNl0sRD10aGlzLnJbN10scT10aGlzLnJbOF0sRj10aGlzLnJbOV07cj49MTY7KW49MjU1JnRbZSswXXwoMjU1JnRbZSsxXSk8PDgsUys9ODE5MSZuLGk9MjU1JnRbZSsyXXwoMjU1JnRbZSszXSk8PDgsRSs9ODE5MSYobj4+PjEzfGk8PDMpLG89MjU1JnRbZSs0XXwoMjU1JnRbZSs1XSk8PDgsQSs9ODE5MSYoaT4+PjEwfG88PDYpLGE9MjU1JnRbZSs2XXwoMjU1JnRbZSs3XSk8PDgsays9ODE5MSYobz4+Pjd8YTw8OSksZj0yNTUmdFtlKzhdfCgyNTUmdFtlKzldKTw8OCx4Kz04MTkxJihhPj4+NHxmPDwxMiksSSs9Zj4+PjEmODE5MSxzPTI1NSZ0W2UrMTBdfCgyNTUmdFtlKzExXSk8PDgsQis9ODE5MSYoZj4+PjE0fHM8PDIpLHU9MjU1JnRbZSsxMl18KDI1NSZ0W2UrMTNdKTw8OCxPKz04MTkxJihzPj4+MTF8dTw8NSksaD0yNTUmdFtlKzE0XXwoMjU1JnRbZSsxNV0pPDw4LFIrPTgxOTEmKHU+Pj44fGg8PDgpLFArPWg+Pj41fE0sYz0wLGQ9YyxkKz1TKlQsZCs9RSooNSpGKSxkKz1BKig1KnEpLGQrPWsqKDUqRCksZCs9eCooNSp6KSxjPWQ+Pj4xMyxkJj04MTkxLGQrPUkqKDUqVSksZCs9QiooNSpMKSxkKz1PKig1Kk4pLGQrPVIqKDUqQyksZCs9UCooNSpqKSxjKz1kPj4+MTMsZCY9ODE5MSxsPWMsbCs9UypqLGwrPUUqVCxsKz1BKig1KkYpLGwrPWsqKDUqcSksbCs9eCooNSpEKSxjPWw+Pj4xMyxsJj04MTkxLGwrPUkqKDUqeiksbCs9QiooNSpVKSxsKz1PKig1KkwpLGwrPVIqKDUqTiksbCs9UCooNSpDKSxjKz1sPj4+MTMsbCY9ODE5MSxwPWMscCs9UypDLHArPUUqaixwKz1BKlQscCs9ayooNSpGKSxwKz14Kig1KnEpLGM9cD4+PjEzLHAmPTgxOTEscCs9SSooNSpEKSxwKz1CKig1KnopLHArPU8qKDUqVSkscCs9UiooNSpMKSxwKz1QKig1Kk4pLGMrPXA+Pj4xMyxwJj04MTkxLGI9YyxiKz1TKk4sYis9RSpDLGIrPUEqaixiKz1rKlQsYis9eCooNSpGKSxjPWI+Pj4xMyxiJj04MTkxLGIrPUkqKDUqcSksYis9QiooNSpEKSxiKz1PKig1KnopLGIrPVIqKDUqVSksYis9UCooNSpMKSxjKz1iPj4+MTMsYiY9ODE5MSx2PWMsdis9UypMLHYrPUUqTix2Kz1BKkMsdis9aypqLHYrPXgqVCxjPXY+Pj4xMyx2Jj04MTkxLHYrPUkqKDUqRiksdis9QiooNSpxKSx2Kz1PKig1KkQpLHYrPVIqKDUqeiksdis9UCooNSpVKSxjKz12Pj4+MTMsdiY9ODE5MSx5PWMseSs9UypVLHkrPUUqTCx5Kz1BKk4seSs9aypDLHkrPXgqaixjPXk+Pj4xMyx5Jj04MTkxLHkrPUkqVCx5Kz1CKig1KkYpLHkrPU8qKDUqcSkseSs9UiooNSpEKSx5Kz1QKig1KnopLGMrPXk+Pj4xMyx5Jj04MTkxLG09YyxtKz1TKnosbSs9RSpVLG0rPUEqTCxtKz1rKk4sbSs9eCpDLGM9bT4+PjEzLG0mPTgxOTEsbSs9SSpqLG0rPUIqVCxtKz1PKig1KkYpLG0rPVIqKDUqcSksbSs9UCooNSpEKSxjKz1tPj4+MTMsbSY9ODE5MSxnPWMsZys9UypELGcrPUUqeixnKz1BKlUsZys9aypMLGcrPXgqTixjPWc+Pj4xMyxnJj04MTkxLGcrPUkqQyxnKz1CKmosZys9TypULGcrPVIqKDUqRiksZys9UCooNSpxKSxjKz1nPj4+MTMsZyY9ODE5MSx3PWMsdys9UypxLHcrPUUqRCx3Kz1BKnosdys9aypVLHcrPXgqTCxjPXc+Pj4xMyx3Jj04MTkxLHcrPUkqTix3Kz1CKkMsdys9TypqLHcrPVIqVCx3Kz1QKig1KkYpLGMrPXc+Pj4xMyx3Jj04MTkxLF89YyxfKz1TKkYsXys9RSpxLF8rPUEqRCxfKz1rKnosXys9eCpVLGM9Xz4+PjEzLF8mPTgxOTEsXys9SSpMLF8rPUIqTixfKz1PKkMsXys9UipqLF8rPVAqVCxjKz1fPj4+MTMsXyY9ODE5MSxjPShjPDwyKStjfDAsYz1jK2R8MCxkPTgxOTEmYyxjPj4+PTEzLGwrPWMsUz1kLEU9bCxBPXAsaz1iLHg9dixJPXksQj1tLE89ZyxSPXcsUD1fLGUrPTE2LHItPTE2O3RoaXMuaFswXT1TLHRoaXMuaFsxXT1FLHRoaXMuaFsyXT1BLHRoaXMuaFszXT1rLHRoaXMuaFs0XT14LHRoaXMuaFs1XT1JLHRoaXMuaFs2XT1CLHRoaXMuaFs3XT1PLHRoaXMuaFs4XT1SLHRoaXMuaFs5XT1QfSxsdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLG8sYT1uZXcgVWludDE2QXJyYXkoMTApO2lmKHRoaXMubGVmdG92ZXIpe2ZvcihvPXRoaXMubGVmdG92ZXIsdGhpcy5idWZmZXJbbysrXT0xO288MTY7bysrKXRoaXMuYnVmZmVyW29dPTA7dGhpcy5maW49MSx0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwwLDE2KX1mb3Iocj10aGlzLmhbMV0+Pj4xMyx0aGlzLmhbMV0mPTgxOTEsbz0yO288MTA7bysrKXRoaXMuaFtvXSs9cixyPXRoaXMuaFtvXT4+PjEzLHRoaXMuaFtvXSY9ODE5MTtmb3IodGhpcy5oWzBdKz01KnIscj10aGlzLmhbMF0+Pj4xMyx0aGlzLmhbMF0mPTgxOTEsdGhpcy5oWzFdKz1yLHI9dGhpcy5oWzFdPj4+MTMsdGhpcy5oWzFdJj04MTkxLHRoaXMuaFsyXSs9cixhWzBdPXRoaXMuaFswXSs1LHI9YVswXT4+PjEzLGFbMF0mPTgxOTEsbz0xO288MTA7bysrKWFbb109dGhpcy5oW29dK3Iscj1hW29dPj4+MTMsYVtvXSY9ODE5MTtmb3IoYVs5XS09ODE5MixuPSgxXnIpLTEsbz0wO288MTA7bysrKWFbb10mPW47Zm9yKG49fm4sbz0wO288MTA7bysrKXRoaXMuaFtvXT10aGlzLmhbb10mbnxhW29dO2Zvcih0aGlzLmhbMF09NjU1MzUmKHRoaXMuaFswXXx0aGlzLmhbMV08PDEzKSx0aGlzLmhbMV09NjU1MzUmKHRoaXMuaFsxXT4+PjN8dGhpcy5oWzJdPDwxMCksdGhpcy5oWzJdPTY1NTM1Jih0aGlzLmhbMl0+Pj42fHRoaXMuaFszXTw8NyksdGhpcy5oWzNdPTY1NTM1Jih0aGlzLmhbM10+Pj45fHRoaXMuaFs0XTw8NCksdGhpcy5oWzRdPTY1NTM1Jih0aGlzLmhbNF0+Pj4xMnx0aGlzLmhbNV08PDF8dGhpcy5oWzZdPDwxNCksdGhpcy5oWzVdPTY1NTM1Jih0aGlzLmhbNl0+Pj4yfHRoaXMuaFs3XTw8MTEpLHRoaXMuaFs2XT02NTUzNSYodGhpcy5oWzddPj4+NXx0aGlzLmhbOF08PDgpLHRoaXMuaFs3XT02NTUzNSYodGhpcy5oWzhdPj4+OHx0aGlzLmhbOV08PDUpLGk9dGhpcy5oWzBdK3RoaXMucGFkWzBdLHRoaXMuaFswXT02NTUzNSZpLG89MTtvPDg7bysrKWk9KHRoaXMuaFtvXSt0aGlzLnBhZFtvXXwwKSsoaT4+PjE2KXwwLHRoaXMuaFtvXT02NTUzNSZpO3RbZSswXT10aGlzLmhbMF0+Pj4wJjI1NSx0W2UrMV09dGhpcy5oWzBdPj4+OCYyNTUsdFtlKzJdPXRoaXMuaFsxXT4+PjAmMjU1LHRbZSszXT10aGlzLmhbMV0+Pj44JjI1NSx0W2UrNF09dGhpcy5oWzJdPj4+MCYyNTUsdFtlKzVdPXRoaXMuaFsyXT4+PjgmMjU1LHRbZSs2XT10aGlzLmhbM10+Pj4wJjI1NSx0W2UrN109dGhpcy5oWzNdPj4+OCYyNTUsdFtlKzhdPXRoaXMuaFs0XT4+PjAmMjU1LHRbZSs5XT10aGlzLmhbNF0+Pj44JjI1NSx0W2UrMTBdPXRoaXMuaFs1XT4+PjAmMjU1LHRbZSsxMV09dGhpcy5oWzVdPj4+OCYyNTUsdFtlKzEyXT10aGlzLmhbNl0+Pj4wJjI1NSx0W2UrMTNdPXRoaXMuaFs2XT4+PjgmMjU1LHRbZSsxNF09dGhpcy5oWzddPj4+MCYyNTUsdFtlKzE1XT10aGlzLmhbN10+Pj44JjI1NX0sbHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG4saTtpZih0aGlzLmxlZnRvdmVyKXtmb3IoaT0xNi10aGlzLmxlZnRvdmVyLGk+ciYmKGk9ciksbj0wO248aTtuKyspdGhpcy5idWZmZXJbdGhpcy5sZWZ0b3ZlcituXT10W2Urbl07aWYoci09aSxlKz1pLHRoaXMubGVmdG92ZXIrPWksdGhpcy5sZWZ0b3ZlcjwxNilyZXR1cm47dGhpcy5ibG9ja3ModGhpcy5idWZmZXIsMCwxNiksdGhpcy5sZWZ0b3Zlcj0wfWlmKHI+PTE2JiYoaT1yLXIlMTYsdGhpcy5ibG9ja3ModCxlLGkpLGUrPWksci09aSkscil7Zm9yKG49MDtuPHI7bisrKXRoaXMuYnVmZmVyW3RoaXMubGVmdG92ZXIrbl09dFtlK25dO3RoaXMubGVmdG92ZXIrPXJ9fTt2YXIgcHQ9dixidD15LHZ0PVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0seXQ9bmV3IEZsb2F0NjRBcnJheShbMjM3LDIxMSwyNDUsOTIsMjYsOTksMTgsODgsMjE0LDE1NiwyNDcsMTYyLDIyMiwyNDksMjIyLDIwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE2XSksbXQ9MzIsZ3Q9MjQsd3Q9MzIsX3Q9MTYsTXQ9MzIsU3Q9MzIsRXQ9MzIsQXQ9MzIsa3Q9MzIseHQ9Z3QsSXQ9d3QsQnQ9X3QsT3Q9NjQsUnQ9MzIsUHQ9NjQsVHQ9MzIsanQ9NjQ7dC5sb3dsZXZlbD17Y3J5cHRvX2NvcmVfaHNhbHNhMjA6dSxjcnlwdG9fc3RyZWFtX3hvcjpsLGNyeXB0b19zdHJlYW06ZCxjcnlwdG9fc3RyZWFtX3NhbHNhMjBfeG9yOmgsY3J5cHRvX3N0cmVhbV9zYWxzYTIwOmMsY3J5cHRvX29uZXRpbWVhdXRoOnAsY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeTpiLGNyeXB0b192ZXJpZnlfMTY6aSxjcnlwdG9fdmVyaWZ5XzMyOm8sY3J5cHRvX3NlY3JldGJveDp2LGNyeXB0b19zZWNyZXRib3hfb3Blbjp5LGNyeXB0b19zY2FsYXJtdWx0OlIsY3J5cHRvX3NjYWxhcm11bHRfYmFzZTpQLGNyeXB0b19ib3hfYmVmb3Jlbm06aixjcnlwdG9fYm94X2FmdGVybm06cHQsY3J5cHRvX2JveDpDLGNyeXB0b19ib3hfb3BlbjpOLGNyeXB0b19ib3hfa2V5cGFpcjpULGNyeXB0b19oYXNoOlUsY3J5cHRvX3NpZ246WCxjcnlwdG9fc2lnbl9rZXlwYWlyOkcsY3J5cHRvX3NpZ25fb3BlbjpXLGNyeXB0b19zZWNyZXRib3hfS0VZQllURVM6bXQsY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTOmd0LGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTOnd0LGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTOl90LGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTOk10LGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTOlN0LGNyeXB0b19ib3hfUFVCTElDS0VZQllURVM6RXQsY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUzpBdCxjcnlwdG9fYm94X0JFRk9SRU5NQllURVM6a3QsY3J5cHRvX2JveF9OT05DRUJZVEVTOnh0LGNyeXB0b19ib3hfWkVST0JZVEVTOkl0LGNyeXB0b19ib3hfQk9YWkVST0JZVEVTOkJ0LGNyeXB0b19zaWduX0JZVEVTOk90LGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTOlJ0LGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTOlB0LGNyeXB0b19zaWduX1NFRURCWVRFUzpUdCxjcnlwdG9faGFzaF9CWVRFUzpqdH0sdC51dGlsfHwodC51dGlsPXt9LHQudXRpbC5kZWNvZGVVVEY4PXQudXRpbC5lbmNvZGVVVEY4PXQudXRpbC5lbmNvZGVCYXNlNjQ9dC51dGlsLmRlY29kZUJhc2U2ND1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIm5hY2wudXRpbCBtb3ZlZCBpbnRvIHNlcGFyYXRlIHBhY2thZ2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9kY2hlc3QvdHdlZXRuYWNsLXV0aWwtanNcIil9KSx0LnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBldChlLHQpLGV9LHQuc2VjcmV0Ym94PWZ1bmN0aW9uKHQsZSxyKXskKHQsZSxyKSxaKHIsZSk7Zm9yKHZhciBuPW5ldyBVaW50OEFycmF5KHd0K3QubGVuZ3RoKSxpPW5ldyBVaW50OEFycmF5KG4ubGVuZ3RoKSxvPTA7bzx0Lmxlbmd0aDtvKyspbltvK3d0XT10W29dO3JldHVybiB2KGksbixuLmxlbmd0aCxlLHIpLGkuc3ViYXJyYXkoX3QpfSx0LnNlY3JldGJveC5vcGVuPWZ1bmN0aW9uKHQsZSxyKXskKHQsZSxyKSxaKHIsZSk7Zm9yKHZhciBuPW5ldyBVaW50OEFycmF5KF90K3QubGVuZ3RoKSxpPW5ldyBVaW50OEFycmF5KG4ubGVuZ3RoKSxvPTA7bzx0Lmxlbmd0aDtvKyspbltvK190XT10W29dO3JldHVybiEobi5sZW5ndGg8MzIpJiYoMD09PXkoaSxuLG4ubGVuZ3RoLGUscikmJmkuc3ViYXJyYXkod3QpKX0sdC5zZWNyZXRib3gua2V5TGVuZ3RoPW10LHQuc2VjcmV0Ym94Lm5vbmNlTGVuZ3RoPWd0LHQuc2VjcmV0Ym94Lm92ZXJoZWFkTGVuZ3RoPV90LHQuc2NhbGFyTXVsdD1mdW5jdGlvbih0LGUpe2lmKCQodCxlKSx0Lmxlbmd0aCE9PVN0KXRocm93IG5ldyBFcnJvcihcImJhZCBuIHNpemVcIik7aWYoZS5sZW5ndGghPT1NdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcCBzaXplXCIpO3ZhciByPW5ldyBVaW50OEFycmF5KE10KTtyZXR1cm4gUihyLHQsZSkscn0sdC5zY2FsYXJNdWx0LmJhc2U9ZnVuY3Rpb24odCl7aWYoJCh0KSx0Lmxlbmd0aCE9PVN0KXRocm93IG5ldyBFcnJvcihcImJhZCBuIHNpemVcIik7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoTXQpO3JldHVybiBQKGUsdCksZX0sdC5zY2FsYXJNdWx0LnNjYWxhckxlbmd0aD1TdCx0LnNjYWxhck11bHQuZ3JvdXBFbGVtZW50TGVuZ3RoPU10LHQuYm94PWZ1bmN0aW9uKGUscixuLGkpe3ZhciBvPXQuYm94LmJlZm9yZShuLGkpO3JldHVybiB0LnNlY3JldGJveChlLHIsbyl9LHQuYm94LmJlZm9yZT1mdW5jdGlvbih0LGUpeyQodCxlKSxKKHQsZSk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoa3QpO3JldHVybiBqKHIsdCxlKSxyfSx0LmJveC5hZnRlcj10LnNlY3JldGJveCx0LmJveC5vcGVuPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBvPXQuYm94LmJlZm9yZShuLGkpO3JldHVybiB0LnNlY3JldGJveC5vcGVuKGUscixvKX0sdC5ib3gub3Blbi5hZnRlcj10LnNlY3JldGJveC5vcGVuLHQuYm94LmtleVBhaXI9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVWludDhBcnJheShFdCksZT1uZXcgVWludDhBcnJheShBdCk7cmV0dXJuIFQodCxlKSx7cHVibGljS2V5OnQsc2VjcmV0S2V5OmV9fSx0LmJveC5rZXlQYWlyLmZyb21TZWNyZXRLZXk9ZnVuY3Rpb24odCl7aWYoJCh0KSx0Lmxlbmd0aCE9PUF0KXRocm93IG5ldyBFcnJvcihcImJhZCBzZWNyZXQga2V5IHNpemVcIik7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoRXQpO3JldHVybiBQKGUsdCkse3B1YmxpY0tleTplLHNlY3JldEtleTpuZXcgVWludDhBcnJheSh0KX19LHQuYm94LnB1YmxpY0tleUxlbmd0aD1FdCx0LmJveC5zZWNyZXRLZXlMZW5ndGg9QXQsdC5ib3guc2hhcmVkS2V5TGVuZ3RoPWt0LHQuYm94Lm5vbmNlTGVuZ3RoPXh0LHQuYm94Lm92ZXJoZWFkTGVuZ3RoPXQuc2VjcmV0Ym94Lm92ZXJoZWFkTGVuZ3RoLHQuc2lnbj1mdW5jdGlvbih0LGUpe2lmKCQodCxlKSxlLmxlbmd0aCE9PVB0KXRocm93IG5ldyBFcnJvcihcImJhZCBzZWNyZXQga2V5IHNpemVcIik7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoT3QrdC5sZW5ndGgpO3JldHVybiBYKHIsdCx0Lmxlbmd0aCxlKSxyfSx0LnNpZ24ub3Blbj1mdW5jdGlvbih0LGUpe2lmKDIhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIm5hY2wuc2lnbi5vcGVuIGFjY2VwdHMgMiBhcmd1bWVudHM7IGRpZCB5b3UgbWVhbiB0byB1c2UgbmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeT9cIik7aWYoJCh0LGUpLGUubGVuZ3RoIT09UnQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHB1YmxpYyBrZXkgc2l6ZVwiKTt2YXIgcj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCksbj1XKHIsdCx0Lmxlbmd0aCxlKTtpZihuPDApcmV0dXJuIG51bGw7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KG4pLG89MDtvPGkubGVuZ3RoO28rKylpW29dPXJbb107cmV0dXJuIGl9LHQuc2lnbi5kZXRhY2hlZD1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj10LnNpZ24oZSxyKSxpPW5ldyBVaW50OEFycmF5KE90KSxvPTA7bzxpLmxlbmd0aDtvKyspaVtvXT1uW29dO3JldHVybiBpfSx0LnNpZ24uZGV0YWNoZWQudmVyaWZ5PWZ1bmN0aW9uKHQsZSxyKXtpZigkKHQsZSxyKSxlLmxlbmd0aCE9PU90KXRocm93IG5ldyBFcnJvcihcImJhZCBzaWduYXR1cmUgc2l6ZVwiKTtpZihyLmxlbmd0aCE9PVJ0KXRocm93IG5ldyBFcnJvcihcImJhZCBwdWJsaWMga2V5IHNpemVcIik7dmFyIG4saT1uZXcgVWludDhBcnJheShPdCt0Lmxlbmd0aCksbz1uZXcgVWludDhBcnJheShPdCt0Lmxlbmd0aCk7Zm9yKG49MDtuPE90O24rKylpW25dPWVbbl07Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpW24rT3RdPXRbbl07cmV0dXJuIFcobyxpLGkubGVuZ3RoLHIpPj0wfSx0LnNpZ24ua2V5UGFpcj1mdW5jdGlvbigpe3ZhciB0PW5ldyBVaW50OEFycmF5KFJ0KSxlPW5ldyBVaW50OEFycmF5KFB0KTtyZXR1cm4gRyh0LGUpLHtwdWJsaWNLZXk6dCxzZWNyZXRLZXk6ZX19LHQuc2lnbi5rZXlQYWlyLmZyb21TZWNyZXRLZXk9ZnVuY3Rpb24odCl7aWYoJCh0KSx0Lmxlbmd0aCE9PVB0KXRocm93IG5ldyBFcnJvcihcImJhZCBzZWNyZXQga2V5IHNpemVcIik7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KFJ0KSxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXT10WzMyK3JdO3JldHVybntwdWJsaWNLZXk6ZSxzZWNyZXRLZXk6bmV3IFVpbnQ4QXJyYXkodCl9fSx0LnNpZ24ua2V5UGFpci5mcm9tU2VlZD1mdW5jdGlvbih0KXtpZigkKHQpLHQubGVuZ3RoIT09VHQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHNlZWQgc2l6ZVwiKTtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkoUnQpLHI9bmV3IFVpbnQ4QXJyYXkoUHQpLG49MDtuPDMyO24rKylyW25dPXRbbl07cmV0dXJuIEcoZSxyLCEwKSx7cHVibGljS2V5OmUsc2VjcmV0S2V5OnJ9fSx0LnNpZ24ucHVibGljS2V5TGVuZ3RoPVJ0LHQuc2lnbi5zZWNyZXRLZXlMZW5ndGg9UHQsdC5zaWduLnNlZWRMZW5ndGg9VHQsdC5zaWduLnNpZ25hdHVyZUxlbmd0aD1PdCx0Lmhhc2g9ZnVuY3Rpb24odCl7JCh0KTt2YXIgZT1uZXcgVWludDhBcnJheShqdCk7cmV0dXJuIFUoZSx0LHQubGVuZ3RoKSxlfSx0Lmhhc2guaGFzaExlbmd0aD1qdCx0LnZlcmlmeT1mdW5jdGlvbih0LGUpe3JldHVybiAkKHQsZSksMCE9PXQubGVuZ3RoJiYwIT09ZS5sZW5ndGgmJih0Lmxlbmd0aD09PWUubGVuZ3RoJiYwPT09bih0LDAsZSwwLHQubGVuZ3RoKSl9LHQuc2V0UFJORz1mdW5jdGlvbih0KXtldD10fSxmdW5jdGlvbigpe3ZhciBlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGYuY3J5cHRvfHxzZWxmLm1zQ3J5cHRvOm51bGw7aWYoZSYmZS5nZXRSYW5kb21WYWx1ZXMpe3ZhciBuPTY1NTM2O3Quc2V0UFJORyhmdW5jdGlvbih0LHIpe3ZhciBpLG89bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGk9MDtpPHI7aSs9billLmdldFJhbmRvbVZhbHVlcyhvLnN1YmFycmF5KGksaStNYXRoLm1pbihyLWksbikpKTtmb3IoaT0wO2k8cjtpKyspdFtpXT1vW2ldO1Eobyl9KX1lbHNlIGU9cig2MDgpLGUmJmUucmFuZG9tQnl0ZXMmJnQuc2V0UFJORyhmdW5jdGlvbih0LHIpe3ZhciBuLGk9ZS5yYW5kb21CeXRlcyhyKTtmb3Iobj0wO248cjtuKyspdFtuXT1pW25dO1EoaSl9KX0oKX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQmJnQuZXhwb3J0cz90LmV4cG9ydHM6c2VsZi5uYWNsPXNlbGYubmFjbHx8e30pfSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUlND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7cmV0dXJuXCI9XCI9PT10W2UtMl0/MjpcIj1cIj09PXRbZS0xXT8xOjB9ZnVuY3Rpb24gbih0KXtyZXR1cm4gMyp0Lmxlbmd0aC80LXIodCl9ZnVuY3Rpb24gaSh0KXt2YXIgZSxuLGksbyxhLGYscz10Lmxlbmd0aDthPXIodCksZj1uZXcgaCgzKnMvNC1hKSxpPWE+MD9zLTQ6czt2YXIgYz0wO2ZvcihlPTAsbj0wO2U8aTtlKz00LG4rPTMpbz11W3QuY2hhckNvZGVBdChlKV08PDE4fHVbdC5jaGFyQ29kZUF0KGUrMSldPDwxMnx1W3QuY2hhckNvZGVBdChlKzIpXTw8Nnx1W3QuY2hhckNvZGVBdChlKzMpXSxmW2MrK109bz4+MTYmMjU1LGZbYysrXT1vPj44JjI1NSxmW2MrK109MjU1Jm87cmV0dXJuIDI9PT1hPyhvPXVbdC5jaGFyQ29kZUF0KGUpXTw8Mnx1W3QuY2hhckNvZGVBdChlKzEpXT4+NCxmW2MrK109MjU1Jm8pOjE9PT1hJiYobz11W3QuY2hhckNvZGVBdChlKV08PDEwfHVbdC5jaGFyQ29kZUF0KGUrMSldPDw0fHVbdC5jaGFyQ29kZUF0KGUrMildPj4yLGZbYysrXT1vPj44JjI1NSxmW2MrK109MjU1Jm8pLGZ9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gc1t0Pj4xOCY2M10rc1t0Pj4xMiY2M10rc1t0Pj42JjYzXStzWzYzJnRdfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbixpPVtdLGE9ZTthPHI7YSs9MyluPSh0W2FdPDwxNikrKHRbYSsxXTw8OCkrdFthKzJdLGkucHVzaChvKG4pKTtyZXR1cm4gaS5qb2luKFwiXCIpfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj1yJTMsaT1cIlwiLG89W10sZj0xNjM4Myx1PTAsaD1yLW47dTxoO3UrPWYpby5wdXNoKGEodCx1LHUrZj5oP2g6dStmKSk7cmV0dXJuIDE9PT1uPyhlPXRbci0xXSxpKz1zW2U+PjJdLGkrPXNbZTw8NCY2M10saSs9XCI9PVwiKToyPT09biYmKGU9KHRbci0yXTw8OCkrdFtyLTFdLGkrPXNbZT4+MTBdLGkrPXNbZT4+NCY2M10saSs9c1tlPDwyJjYzXSxpKz1cIj1cIiksby5wdXNoKGkpLG8uam9pbihcIlwiKX1lLmJ5dGVMZW5ndGg9bixlLnRvQnl0ZUFycmF5PWksZS5mcm9tQnl0ZUFycmF5PWY7Zm9yKHZhciBzPVtdLHU9W10saD1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGM9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsZD0wLGw9Yy5sZW5ndGg7ZDxsOysrZClzW2RdPWNbZF0sdVtjLmNoYXJDb2RlQXQoZCldPWQ7dVtcIi1cIi5jaGFyQ29kZUF0KDApXT02Mix1W1wiX1wiLmNoYXJDb2RlQXQoMCldPTYzfSxmdW5jdGlvbih0LGUpe2UucmVhZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBvLGEsZj04Kmktbi0xLHM9KDE8PGYpLTEsdT1zPj4xLGg9LTcsYz1yP2ktMTowLGQ9cj8tMToxLGw9dFtlK2NdO2ZvcihjKz1kLG89bCYoMTw8LWgpLTEsbD4+PS1oLGgrPWY7aD4wO289MjU2Km8rdFtlK2NdLGMrPWQsaC09OCk7Zm9yKGE9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO2E9MjU2KmErdFtlK2NdLGMrPWQsaC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09cylyZXR1cm4gYT9OYU46KGw/LTE6MSkqKDEvMCk7YSs9TWF0aC5wb3coMixuKSxvLT11fXJldHVybihsPy0xOjEpKmEqTWF0aC5wb3coMixvLW4pfSxlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgYSxmLHMsdT04Km8taS0xLGg9KDE8PHUpLTEsYz1oPj4xLGQ9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxsPW4/MDpvLTEscD1uPzE6LTEsYj1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KGY9aXNOYU4oZSk/MTowLGE9aCk6KGE9TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoocz1NYXRoLnBvdygyLC1hKSk8MSYmKGEtLSxzKj0yKSxlKz1hK2M+PTE/ZC9zOmQqTWF0aC5wb3coMiwxLWMpLGUqcz49MiYmKGErKyxzLz0yKSxhK2M+PWg/KGY9MCxhPWgpOmErYz49MT8oZj0oZSpzLTEpKk1hdGgucG93KDIsaSksYSs9Yyk6KGY9ZSpNYXRoLnBvdygyLGMtMSkqTWF0aC5wb3coMixpKSxhPTApKTtpPj04O3RbcitsXT0yNTUmZixsKz1wLGYvPTI1NixpLT04KTtmb3IoYT1hPDxpfGYsdSs9aTt1PjA7dFtyK2xdPTI1NSZhLGwrPXAsYS89MjU2LHUtPTgpO3RbcitsLXBdfD0xMjgqYn19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09ci5jYWxsKHQpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuO2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGRbdF0pcj1kW3RdLmtleSxuPWRbdF0uaXY7ZWxzZXtpZighY1t0XSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3I9OCpjW3RdLmtleSxuPWNbdF0uaXZ9dmFyIGk9cyhlLCExLHIsbik7cmV0dXJuIG8odCxpLmtleSxpLml2KX1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsbjtpZih0PXQudG9Mb3dlckNhc2UoKSxkW3RdKXI9ZFt0XS5rZXksbj1kW3RdLml2O2Vsc2V7aWYoIWNbdF0pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtyPTgqY1t0XS5rZXksbj1jW3RdLml2fXZhciBpPXMoZSwhMSxyLG4pO3JldHVybiBhKHQsaS5rZXksaS5pdil9ZnVuY3Rpb24gbyh0LGUscil7aWYodD10LnRvTG93ZXJDYXNlKCksZFt0XSlyZXR1cm4gdS5jcmVhdGVDaXBoZXJpdih0LGUscik7aWYoY1t0XSlyZXR1cm4gbmV3IGgoe2tleTplLGl2OnIsbW9kZTp0fSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKX1mdW5jdGlvbiBhKHQsZSxyKXtpZih0PXQudG9Mb3dlckNhc2UoKSxkW3RdKXJldHVybiB1LmNyZWF0ZURlY2lwaGVyaXYodCxlLHIpO2lmKGNbdF0pcmV0dXJuIG5ldyBoKHtrZXk6ZSxpdjpyLG1vZGU6dCxkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKX1mdW5jdGlvbiBmKCl7cmV0dXJuIE9iamVjdC5rZXlzKGMpLmNvbmNhdCh1LmdldENpcGhlcnMoKSl9dmFyIHM9cigxNDYpLHU9cig0OTQpLGg9cig0OTgpLGM9cig0OTkpLGQ9cig5NSk7ZS5jcmVhdGVDaXBoZXI9ZS5DaXBoZXI9bixlLmNyZWF0ZUNpcGhlcml2PWUuQ2lwaGVyaXY9byxlLmNyZWF0ZURlY2lwaGVyPWUuRGVjaXBoZXI9aSxlLmNyZWF0ZURlY2lwaGVyaXY9ZS5EZWNpcGhlcml2PWEsZS5saXN0Q2lwaGVycz1lLmdldENpcGhlcnM9Zn0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gT2JqZWN0LmtleXMoYSl9dmFyIGk9cig0OTYpO2UuY3JlYXRlQ2lwaGVyPWUuQ2lwaGVyPWkuY3JlYXRlQ2lwaGVyLGUuY3JlYXRlQ2lwaGVyaXY9ZS5DaXBoZXJpdj1pLmNyZWF0ZUNpcGhlcml2O3ZhciBvPXIoNDk1KTtlLmNyZWF0ZURlY2lwaGVyPWUuRGVjaXBoZXI9by5jcmVhdGVEZWNpcGhlcixlLmNyZWF0ZURlY2lwaGVyaXY9ZS5EZWNpcGhlcml2PW8uY3JlYXRlRGVjaXBoZXJpdjt2YXIgYT1yKDk1KTtlLmxpc3RDaXBoZXJzPWUuZ2V0Q2lwaGVycz1ufSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG8pe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBpLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgcy5BRVMociksdGhpcy5fcHJldj1uZXcgdChvLmxlbmd0aCksby5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9ZSx2b2lkKHRoaXMuX2F1dG9wYWRkaW5nPSEwKSk6bmV3IG4oZSxyLG8pfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dm9pZCh0aGlzLmNhY2hlPW5ldyB0KFwiXCIpKTpuZXcgaX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10WzE1XSxyPS0xOysrcjxlOylpZih0W3IrKDE2LWUpXSE9PWUpdGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGRlY3J5cHQgZGF0YVwiKTtpZigxNiE9PWUpcmV0dXJuIHQuc2xpY2UoMCwxNi1lKX1mdW5jdGlvbiBhKGUscixpKXt2YXIgbz1jW2UudG9Mb3dlckNhc2UoKV07aWYoIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bmV3IHQoaSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgdChyKSksci5sZW5ndGghPT1vLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGggXCIrci5sZW5ndGgpO2lmKGkubGVuZ3RoIT09by5pdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBpdiBsZW5ndGggXCIraS5sZW5ndGgpO3JldHVyblwic3RyZWFtXCI9PT1vLnR5cGU/bmV3IGQoYltvLm1vZGVdLHIsaSwhMCk6XCJhdXRoXCI9PT1vLnR5cGU/bmV3IGwoYltvLm1vZGVdLHIsaSwhMCk6bmV3IG4oYltvLm1vZGVdLHIsaSl9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWNbdC50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBuPXAoZSwhMSxyLmtleSxyLml2KTtyZXR1cm4gYSh0LG4ua2V5LG4uaXYpfXZhciBzPXIoOTQpLHU9cig5NyksaD1yKDIpLGM9cig5NSksZD1yKDIxMCksbD1yKDIwMykscD1yKDE0Nik7aChuLHUpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgcixuLGk9W107cj10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOyluPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHIpLGkucHVzaChuKTtyZXR1cm4gdC5jb25jYXQoaSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIG8odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsdCkpO2lmKHQpdGhyb3cgbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHQpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxlfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxlO3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfTt2YXIgYj17RUNCOnIoMjA4KSxDQkM6cigyMDQpLENGQjpyKDIwNSksQ0ZCODpyKDIwNyksQ0ZCMTpyKDIwNiksT0ZCOnIoMjA5KSxDVFI6cig5NiksR0NNOnIoOTYpfTtlLmNyZWF0ZURlY2lwaGVyPWYsZS5jcmVhdGVEZWNpcGhlcml2PWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG8pe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8ocy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBpLHRoaXMuX2NpcGhlcj1uZXcgZi5BRVMociksdGhpcy5fcHJldj1uZXcgdChvLmxlbmd0aCksby5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9ZSx2b2lkKHRoaXMuX2F1dG9wYWRkaW5nPSEwKSk6bmV3IG4oZSxyLG8pfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dm9pZCh0aGlzLmNhY2hlPW5ldyB0KFwiXCIpKTpuZXcgaX1mdW5jdGlvbiBvKGUscixpKXt2YXIgbz1oW2UudG9Mb3dlckNhc2UoKV07aWYoIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bmV3IHQoaSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgdChyKSksci5sZW5ndGghPT1vLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGggXCIrci5sZW5ndGgpO2lmKGkubGVuZ3RoIT09by5pdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBpdiBsZW5ndGggXCIraS5sZW5ndGgpO3JldHVyblwic3RyZWFtXCI9PT1vLnR5cGU/bmV3IGQocFtvLm1vZGVdLHIsaSk6XCJhdXRoXCI9PT1vLnR5cGU/bmV3IGwocFtvLm1vZGVdLHIsaSk6bmV3IG4ocFtvLm1vZGVdLHIsaSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWhbdC50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBuPWMoZSwhMSxyLmtleSxyLml2KTtyZXR1cm4gbyh0LG4ua2V5LG4uaXYpfXZhciBmPXIoOTQpLHM9cig5NyksdT1yKDIpLGg9cig5NSksYz1yKDE0NiksZD1yKDIxMCksbD1yKDIwMyk7dShuLHMpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgcixuLGk9W107cj10aGlzLl9jYWNoZS5nZXQoKTspbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxyKSxpLnB1c2gobik7cmV0dXJuIHQuY29uY2F0KGkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiB0PXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQpLHRoaXMuX2NpcGhlci5zY3J1YigpLHQ7aWYoXCIxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMFwiIT09dC50b1N0cmluZyhcImhleFwiKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXQsdGhpc30saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9dC5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIHQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0fXJldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgZT0xNi10aGlzLmNhY2hlLmxlbmd0aCxyPW5ldyB0KGUpLG49LTE7KytuPGU7KXIud3JpdGVVSW50OChlLG4pO3ZhciBpPXQuY29uY2F0KFt0aGlzLmNhY2hlLHJdKTtyZXR1cm4gaX07dmFyIHA9e0VDQjpyKDIwOCksQ0JDOnIoMjA0KSxDRkI6cigyMDUpLENGQjg6cigyMDcpLENGQjE6cigyMDYpLE9GQjpyKDIwOSksQ1RSOnIoOTYpLEdDTTpyKDk2KX07ZS5jcmVhdGVDaXBoZXJpdj1vLGUuY3JlYXRlQ2lwaGVyPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7dGhpcy5oPXQsdGhpcy5zdGF0ZT1uZXcgZSgxNiksdGhpcy5zdGF0ZS5maWxsKDApLHRoaXMuY2FjaGU9bmV3IGUoXCJcIil9ZnVuY3Rpb24gbih0KXtyZXR1cm5bdC5yZWFkVUludDMyQkUoMCksdC5yZWFkVUludDMyQkUoNCksdC5yZWFkVUludDMyQkUoOCksdC5yZWFkVUludDMyQkUoMTIpXX1mdW5jdGlvbiBpKHQpe3Q9dC5tYXAobyk7dmFyIHI9bmV3IGUoMTYpO3JldHVybiByLndyaXRlVUludDMyQkUodFswXSwwKSxyLndyaXRlVUludDMyQkUodFsxXSw0KSxyLndyaXRlVUludDMyQkUodFsyXSw4KSxyLndyaXRlVUludDMyQkUodFszXSwxMikscn1mdW5jdGlvbiBvKHQpe3ZhciBlLHI7cmV0dXJuIGU9dD5zfHx0PDA/KHI9TWF0aC5hYnModCklcyx0PDA/cy1yOnIpOnR9ZnVuY3Rpb24gYSh0LGUpe3JldHVyblt0WzBdXmVbMF0sdFsxXV5lWzFdLHRbMl1eZVsyXSx0WzNdXmVbM11dfXZhciBmPW5ldyBlKDE2KTtmLmZpbGwoMCksdC5leHBvcnRzPXIsci5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xOysrZTx0Lmxlbmd0aDspdGhpcy5zdGF0ZVtlXV49dFtlXTt0aGlzLl9tdWx0aXBseSgpfSxyLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyLG89bih0aGlzLmgpLGY9WzAsMCwwLDBdLHM9LTE7KytzPDEyODspe2ZvcihlPTAhPT0odGhpcy5zdGF0ZVt+fihzLzgpXSYxPDw3LXMlOCksZSYmKGY9YShmLG8pKSxyPTAhPT0oMSZvWzNdKSx0PTM7dD4wO3QtLSlvW3RdPW9bdF0+Pj4xfCgxJm9bdC0xXSk8PDMxO29bMF09b1swXT4+PjEsciYmKG9bMF09b1swXV4yMjU8PDI0KX10aGlzLnN0YXRlPWkoZil9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmNhY2hlPWUuY29uY2F0KFt0aGlzLmNhY2hlLHRdKTtmb3IodmFyIHI7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylyPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKHIpfSxyLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChlLmNvbmNhdChbdGhpcy5jYWNoZSxmXSwxNikpLHRoaXMuZ2hhc2goaShbMCx0LDAscl0pKSx0aGlzLnN0YXRlfTt2YXIgcz1NYXRoLnBvdygyLDMyKX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpLmNhbGwodGhpcyk7dmFyIHIsbj10Lm1vZGUudG9Mb3dlckNhc2UoKSxvPWZbbl07cj10LmRlY3J5cHQ/XCJkZWNyeXB0XCI6XCJlbmNyeXB0XCI7dmFyIGE9dC5rZXk7XCJkZXMtZWRlXCIhPT1uJiZcImRlcy1lZGUtY2JjXCIhPT1ufHwoYT1lLmNvbmNhdChbYSxhLnNsaWNlKDAsOCldKSk7dmFyIHM9dC5pdjt0aGlzLl9kZXM9by5jcmVhdGUoe2tleTphLGl2OnMsdHlwZTpyfSl9dmFyIGk9cig1MDApLG89cigxNDUpLGE9cigyKSxmPXtcImRlcy1lZGUzLWNiY1wiOm8uQ0JDLmluc3RhbnRpYXRlKG8uRURFKSxcImRlcy1lZGUzXCI6by5FREUsXCJkZXMtZWRlLWNiY1wiOm8uQ0JDLmluc3RhbnRpYXRlKG8uRURFKSxcImRlcy1lZGVcIjpvLkVERSxcImRlcy1jYmNcIjpvLkNCQy5pbnN0YW50aWF0ZShvLkRFUyksXCJkZXMtZWNiXCI6by5ERVN9O2YuZGVzPWZbXCJkZXMtY2JjXCJdLGYuZGVzMz1mW1wiZGVzLWVkZTMtY2JjXCJdLHQuZXhwb3J0cz1uLGEobixpKSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0aGlzLl9kZXMudXBkYXRlKHQpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMuX2Rlcy5maW5hbCgpKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2VbXCJkZXMtZWNiXCJdPXtrZXk6OCxpdjowfSxlW1wiZGVzLWNiY1wiXT1lLmRlcz17a2V5OjgsaXY6OH0sZVtcImRlcy1lZGUzLWNiY1wiXT1lLmRlczM9e2tleToyNCxpdjo4fSxlW1wiZGVzLWVkZTNcIl09e2tleToyNCxpdjowfSxlW1wiZGVzLWVkZS1jYmNcIl09e2tleToxNixpdjo4fSxlW1wiZGVzLWVkZVwiXT17a2V5OjE2LGl2OjB9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9XCJzdHJpbmdcIj09dHlwZW9mIHQsdGhpcy5oYXNoTW9kZT90aGlzW3RdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXZhciBpPXIoMzEpLlRyYW5zZm9ybSxvPXIoMiksYT1yKDUyKS5TdHJpbmdEZWNvZGVyO3QuZXhwb3J0cz1uLG8obixpKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKTt2YXIgaT10aGlzLl91cGRhdGUodCk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoobiYmKGk9dGhpcy5fdG9TdHJpbmcoaSxuKSksaSl9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodCk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh0KSl9Y2F0Y2godCl7bj10fWZpbmFsbHl7cihuKX19LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dGhpcy5wdXNoKHRoaXMuX2ZpbmFsKCkpfWNhdGNoKHQpe2U9dH1maW5hbGx5e3QoZSl9fSxuLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9maW5hbCgpfHxuZXcgZShcIlwiKTtyZXR1cm4gdCYmKHI9dGhpcy5fdG9TdHJpbmcocix0LCEwKSkscn0sbi5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgYShlKSx0aGlzLl9lbmNvZGluZz1lKSx0aGlzLl9lbmNvZGluZyE9PWUpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc3dpdGNoIGVuY29kaW5nc1wiKTt2YXIgbj10aGlzLl9kZWNvZGVyLndyaXRlKHQpO3JldHVybiByJiYobis9dGhpcy5fZGVjb2Rlci5lbmQoKSksbn19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtvLmVxdWFsKHQubGVuZ3RoLDgsXCJJbnZhbGlkIElWIGxlbmd0aFwiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIGU9MDtlPHRoaXMuaXYubGVuZ3RoO2UrKyl0aGlzLml2W2VdPXRbZV19ZnVuY3Rpb24gaSh0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUpLHRoaXMuX2NiY0luaXQoKX1hKGUsdCk7Zm9yKHZhciByPU9iamVjdC5rZXlzKGYpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtlLnByb3RvdHlwZVtpXT1mW2ldfXJldHVybiBlLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodCl9LGV9dmFyIG89cig5OCksYT1yKDIpLGY9e307ZS5pbnN0YW50aWF0ZT1pLGYuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPXR9LGYuX3VwZGF0ZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLl9jYmNTdGF0ZSxvPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSxhPWkuaXY7aWYoXCJlbmNyeXB0XCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgZj0wO2Y8dGhpcy5ibG9ja1NpemU7ZisrKWFbZl1ePXRbZStmXTtvLl91cGRhdGUuY2FsbCh0aGlzLGEsMCxyLG4pO2Zvcih2YXIgZj0wO2Y8dGhpcy5ibG9ja1NpemU7ZisrKWFbZl09cltuK2ZdfWVsc2V7by5fdXBkYXRlLmNhbGwodGhpcyx0LGUscixuKTtmb3IodmFyIGY9MDtmPHRoaXMuYmxvY2tTaXplO2YrKylyW24rZl1ePWFbZl07Zm9yKHZhciBmPTA7Zjx0aGlzLmJsb2NrU2l6ZTtmKyspYVtmXT10W2UrZl19fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy5vcHRpb25zPXQsdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MH12YXIgaT1yKDk4KTt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5sZW5ndGg/W106XCJkZWNyeXB0XCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdCh0KTp0aGlzLl91cGRhdGVFbmNyeXB0KHQpfSxuLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZix0Lmxlbmd0aC1lKSxuPTA7bjxyO24rKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZituXT10W2Urbl07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1yLHJ9LG4ucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCx0LGUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LG4ucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49KHRoaXMuYnVmZmVyT2ZmK3QubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwLGk9bmV3IEFycmF5KG4qdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKGUrPXRoaXMuX2J1ZmZlcih0LGUpLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZmZXIubGVuZ3RoJiYocis9dGhpcy5fZmx1c2hCdWZmZXIoaSxyKSkpO2Zvcih2YXIgbz10Lmxlbmd0aC0odC5sZW5ndGgtZSkldGhpcy5ibG9ja1NpemU7ZTxvO2UrPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZSh0LGUsaSxyKSxyKz10aGlzLmJsb2NrU2l6ZTtmb3IoO2U8dC5sZW5ndGg7ZSsrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPXRbZV07cmV0dXJuIGl9LG4ucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrdC5sZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLGk9bmV3IEFycmF5KG4qdGhpcy5ibG9ja1NpemUpO24+MDtuLS0pZSs9dGhpcy5fYnVmZmVyKHQsZSkscis9dGhpcy5fZmx1c2hCdWZmZXIoaSxyKTtyZXR1cm4gZSs9dGhpcy5fYnVmZmVyKHQsZSksaX0sbi5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24odCl7dmFyIGU7dCYmKGU9dGhpcy51cGRhdGUodCkpO3ZhciByO3JldHVybiByPVwiZW5jcnlwdFwiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLGU/ZS5jb25jYXQocik6cn0sbi5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbih0LGUpe2lmKDA9PT1lKXJldHVybiExO2Zvcig7ZTx0Lmxlbmd0aDspdFtlKytdPTA7cmV0dXJuITB9LG4ucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgdD1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCx0LDApLHR9LG4ucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbi5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe2kuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsXCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdFwiKTt2YXIgdD1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcih0LDApLHRoaXMuX3VucGFkKHQpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gaSh0KXt1LmNhbGwodGhpcyx0KTt2YXIgZT1uZXcgbjt0aGlzLl9kZXNTdGF0ZT1lLHRoaXMuZGVyaXZlS2V5cyhlLHQua2V5KX12YXIgbz1yKDk4KSxhPXIoMiksZj1yKDE0NSkscz1mLnV0aWxzLHU9Zi5DaXBoZXI7YShpLHUpLHQuZXhwb3J0cz1pLGkuY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0KX07dmFyIGg9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO2kucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24odCxlKXt0LmtleXM9bmV3IEFycmF5KDMyKSxvLmVxdWFsKGUubGVuZ3RoLHRoaXMuYmxvY2tTaXplLFwiSW52YWxpZCBrZXkgbGVuZ3RoXCIpO3ZhciByPXMucmVhZFVJbnQzMkJFKGUsMCksbj1zLnJlYWRVSW50MzJCRShlLDQpO3MucGMxKHIsbix0LnRtcCwwKSxyPXQudG1wWzBdLG49dC50bXBbMV07Zm9yKHZhciBpPTA7aTx0LmtleXMubGVuZ3RoO2krPTIpe3ZhciBhPWhbaT4+PjFdO3I9cy5yMjhzaGwocixhKSxuPXMucjI4c2hsKG4sYSkscy5wYzIocixuLHQua2V5cyxpKX19LGkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZGVzU3RhdGUsbz1zLnJlYWRVSW50MzJCRSh0LGUpLGE9cy5yZWFkVUludDMyQkUodCxlKzQpO3MuaXAobyxhLGkudG1wLDApLG89aS50bXBbMF0sYT1pLnRtcFsxXSxcImVuY3J5cHRcIj09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KGksbyxhLGkudG1wLDApOnRoaXMuX2RlY3J5cHQoaSxvLGEsaS50bXAsMCksbz1pLnRtcFswXSxhPWkudG1wWzFdLHMud3JpdGVVSW50MzJCRShyLG8sbikscy53cml0ZVVJbnQzMkJFKHIsYSxuKzQpfSxpLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLWUsbj1lO248dC5sZW5ndGg7bisrKXRbbl09cjtyZXR1cm4hMH0saS5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10W3QubGVuZ3RoLTFdLHI9dC5sZW5ndGgtZTtyPHQubGVuZ3RoO3IrKylvLmVxdWFsKHRbcl0sZSk7cmV0dXJuIHQuc2xpY2UoMCx0Lmxlbmd0aC1lKX0saS5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIG89ZSxhPXIsZj0wO2Y8dC5rZXlzLmxlbmd0aDtmKz0yKXt2YXIgdT10LmtleXNbZl0saD10LmtleXNbZisxXTtzLmV4cGFuZChhLHQudG1wLDApLHVePXQudG1wWzBdLGhePXQudG1wWzFdO3ZhciBjPXMuc3Vic3RpdHV0ZSh1LGgpLGQ9cy5wZXJtdXRlKGMpLGw9YTthPShvXmQpPj4+MCxvPWx9cy5yaXAoYSxvLG4saSl9LGkucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBvPXIsYT1lLGY9dC5rZXlzLmxlbmd0aC0yO2Y+PTA7Zi09Mil7dmFyIHU9dC5rZXlzW2ZdLGg9dC5rZXlzW2YrMV07cy5leHBhbmQobyx0LnRtcCwwKSx1Xj10LnRtcFswXSxoXj10LnRtcFsxXTt2YXIgYz1zLnN1YnN0aXR1dGUodSxoKSxkPXMucGVybXV0ZShjKSxsPW87bz0oYV5kKT4+PjAsYT1sfXMucmlwKG8sYSxuLGkpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtvLmVxdWFsKGUubGVuZ3RoLDI0LFwiSW52YWxpZCBrZXkgbGVuZ3RoXCIpO3ZhciByPWUuc2xpY2UoMCw4KSxuPWUuc2xpY2UoOCwxNiksaT1lLnNsaWNlKDE2LDI0KTtcImVuY3J5cHRcIj09PXQ/dGhpcy5jaXBoZXJzPVt1LmNyZWF0ZSh7dHlwZTpcImVuY3J5cHRcIixrZXk6cn0pLHUuY3JlYXRlKHt0eXBlOlwiZGVjcnlwdFwiLGtleTpufSksdS5jcmVhdGUoe3R5cGU6XCJlbmNyeXB0XCIsa2V5Oml9KV06dGhpcy5jaXBoZXJzPVt1LmNyZWF0ZSh7dHlwZTpcImRlY3J5cHRcIixrZXk6aX0pLHUuY3JlYXRlKHt0eXBlOlwiZW5jcnlwdFwiLGtleTpufSksdS5jcmVhdGUoe3R5cGU6XCJkZWNyeXB0XCIsa2V5OnJ9KV19ZnVuY3Rpb24gaSh0KXtzLmNhbGwodGhpcyx0KTt2YXIgZT1uZXcgbih0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9ZX12YXIgbz1yKDk4KSxhPXIoMiksZj1yKDE0NSkscz1mLkNpcGhlcix1PWYuREVTO2EoaSxzKSx0LmV4cG9ydHM9aSxpLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9LGkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZWRlU3RhdGU7aS5jaXBoZXJzWzBdLl91cGRhdGUodCxlLHIsbiksaS5jaXBoZXJzWzFdLl91cGRhdGUocixuLHIsbiksaS5jaXBoZXJzWzJdLl91cGRhdGUocixuLHIsbil9LGkucHJvdG90eXBlLl9wYWQ9dS5wcm90b3R5cGUuX3BhZCxpLnByb3RvdHlwZS5fdW5wYWQ9dS5wcm90b3R5cGUuX3VucGFkfSxmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2UucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswK2VdPDwyNHx0WzErZV08PDE2fHRbMitlXTw8OHx0WzMrZV07cmV0dXJuIHI+Pj4wfSxlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3RbMCtyXT1lPj4+MjQsdFsxK3JdPWU+Pj4xNiYyNTUsdFsyK3JdPWU+Pj44JjI1NSx0WzMrcl09MjU1JmV9LGUuaXA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsbz0wLGE9NjthPj0wO2EtPTIpe2Zvcih2YXIgZj0wO2Y8PTI0O2YrPTgpaTw8PTEsaXw9ZT4+PmYrYSYxO2Zvcih2YXIgZj0wO2Y8PTI0O2YrPTgpaTw8PTEsaXw9dD4+PmYrYSYxfWZvcih2YXIgYT02O2E+PTA7YS09Mil7Zm9yKHZhciBmPTE7Zjw9MjU7Zis9OClvPDw9MSxvfD1lPj4+ZithJjE7Zm9yKHZhciBmPTE7Zjw9MjU7Zis9OClvPDw9MSxvfD10Pj4+ZithJjF9cltuKzBdPWk+Pj4wLHJbbisxXT1vPj4+MH0sZS5yaXA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsbz0wLGE9MDthPDQ7YSsrKWZvcih2YXIgZj0yNDtmPj0wO2YtPTgpaTw8PTEsaXw9ZT4+PmYrYSYxLGk8PD0xLGl8PXQ+Pj5mK2EmMTtmb3IodmFyIGE9NDthPDg7YSsrKWZvcih2YXIgZj0yNDtmPj0wO2YtPTgpbzw8PTEsb3w9ZT4+PmYrYSYxLG88PD0xLG98PXQ+Pj5mK2EmMTtyW24rMF09aT4+PjAscltuKzFdPW8+Pj4wfSxlLnBjMT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MCxvPTAsYT03O2E+PTU7YS0tKXtcbmZvcih2YXIgZj0wO2Y8PTI0O2YrPTgpaTw8PTEsaXw9ZT4+ZithJjE7Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClpPDw9MSxpfD10Pj5mK2EmMX1mb3IodmFyIGY9MDtmPD0yNDtmKz04KWk8PD0xLGl8PWU+PmYrYSYxO2Zvcih2YXIgYT0xO2E8PTM7YSsrKXtmb3IodmFyIGY9MDtmPD0yNDtmKz04KW88PD0xLG98PWU+PmYrYSYxO2Zvcih2YXIgZj0wO2Y8PTI0O2YrPTgpbzw8PTEsb3w9dD4+ZithJjF9Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClvPDw9MSxvfD10Pj5mK2EmMTtyW24rMF09aT4+PjAscltuKzFdPW8+Pj4wfSxlLnIyOHNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0PDxlJjI2ODQzNTQ1NXx0Pj4+MjgtZX07dmFyIHI9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07ZS5wYzI9ZnVuY3Rpb24odCxlLG4saSl7Zm9yKHZhciBvPTAsYT0wLGY9ci5sZW5ndGg+Pj4xLHM9MDtzPGY7cysrKW88PD0xLG98PXQ+Pj5yW3NdJjE7Zm9yKHZhciBzPWY7czxyLmxlbmd0aDtzKyspYTw8PTEsYXw9ZT4+PnJbc10mMTtuW2krMF09bz4+PjAsbltpKzFdPWE+Pj4wfSxlLmV4cGFuZD1mdW5jdGlvbih0LGUscil7dmFyIG49MCxpPTA7bj0oMSZ0KTw8NXx0Pj4+Mjc7Zm9yKHZhciBvPTIzO28+PTE1O28tPTQpbjw8PTYsbnw9dD4+Pm8mNjM7Zm9yKHZhciBvPTExO28+PTM7by09NClpfD10Pj4+byY2MyxpPDw9NjtpfD0oMzEmdCk8PDF8dD4+PjMxLGVbciswXT1uPj4+MCxlW3IrMV09aT4+PjB9O3ZhciBuPVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO2Uuc3Vic3RpdHV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGk9MDtpPDQ7aSsrKXt2YXIgbz10Pj4+MTgtNippJjYzLGE9bls2NCppK29dO3I8PD00LHJ8PWF9Zm9yKHZhciBpPTA7aTw0O2krKyl7dmFyIG89ZT4+PjE4LTYqaSY2MyxhPW5bMjU2KzY0Kmkrb107cjw8PTQscnw9YX1yZXR1cm4gcj4+PjB9O3ZhciBpPVsxNiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2LDI3LDE0LDEsMjIsMzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwyNiwxMCwyMSwyOCw3XTtlLnBlcm11dGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8aS5sZW5ndGg7cisrKWU8PD0xLGV8PXQ+Pj5pW3JdJjE7cmV0dXJuIGU+Pj4wfSxlLnBhZFNwbGl0PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC50b1N0cmluZygyKTtuLmxlbmd0aDxlOyluPVwiMFwiK247Zm9yKHZhciBpPVtdLG89MDtvPGU7bys9cilpLnB1c2gobi5zbGljZShvLG8rcikpO3JldHVybiBpLmpvaW4oXCIgXCIpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2MuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgZT1sW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gbWVzc2FnZSBkaWdlc3RcIik7dGhpcy5faGFzaFR5cGU9ZS5oYXNoLHRoaXMuX2hhc2g9cyhlLmhhc2gpLHRoaXMuX3RhZz1lLmlkLHRoaXMuX3NpZ25UeXBlPWUuc2lnbn1mdW5jdGlvbiBpKHQpe2MuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgZT1sW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gbWVzc2FnZSBkaWdlc3RcIik7dGhpcy5faGFzaD1zKGUuaGFzaCksdGhpcy5fdGFnPWUuaWQsdGhpcy5fc2lnblR5cGU9ZS5zaWdufWZ1bmN0aW9uIG8odCl7cmV0dXJuIG5ldyBuKHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG5ldyBpKHQpfXZhciBmPXIoMjExKSxzPXIoNTkpLHU9cigyKSxoPXIoNTQyKSxjPXIoMzEpLGQ9cig1NDMpLGw9e307T2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbih0KXtsW3RdPWxbdC50b0xvd2VyQ2FzZSgpXT1mW3RdfSksdShuLGMuV3JpdGFibGUpLG4ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5faGFzaC51cGRhdGUodCkscigpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSksdGhpcy5faGFzaC51cGRhdGUodCksdGhpc30sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LHIpe3RoaXMuZW5kKCk7dmFyIG49dGhpcy5faGFzaC5kaWdlc3QoKSxpPWgoZS5jb25jYXQoW3RoaXMuX3RhZyxuXSksdCx0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSk7cmV0dXJuIHI/aS50b1N0cmluZyhyKTppfSx1KGksYy5Xcml0YWJsZSksaS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9oYXNoLnVwZGF0ZSh0KSxyKCl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LHIpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKSx0aGlzLl9oYXNoLnVwZGF0ZSh0KSx0aGlzfSxpLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgZShyLG4pKSx0aGlzLmVuZCgpO3ZhciBpPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIGQocixlLmNvbmNhdChbdGhpcy5fdGFnLGldKSx0LHRoaXMuX3NpZ25UeXBlKX0sdC5leHBvcnRzPXtTaWduOm8sVmVyaWZ5OmEsY3JlYXRlU2lnbjpvLGNyZWF0ZVZlcmlmeTphfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt2YXIgZT1vKHQpLHI9ZS50b1JlZChhLm1vbnQodC5tb2R1bHVzKSkucmVkUG93KG5ldyBhKHQucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCk7cmV0dXJue2JsaW5kZXI6cix1bmJsaW5kZXI6ZS5pbnZtKHQubW9kdWx1cyl9fWZ1bmN0aW9uIGkodCxyKXt2YXIgaT1uKHIpLG89ci5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxmPShhLm1vbnQoci5tb2R1bHVzKSxuZXcgYSh0KS5tdWwoaS5ibGluZGVyKS51bW9kKHIubW9kdWx1cykpLHM9Zi50b1JlZChhLm1vbnQoci5wcmltZTEpKSx1PWYudG9SZWQoYS5tb250KHIucHJpbWUyKSksaD1yLmNvZWZmaWNpZW50LGM9ci5wcmltZTEsZD1yLnByaW1lMixsPXMucmVkUG93KHIuZXhwb25lbnQxKSxwPXUucmVkUG93KHIuZXhwb25lbnQyKTtsPWwuZnJvbVJlZCgpLHA9cC5mcm9tUmVkKCk7dmFyIGI9bC5pc3ViKHApLmltdWwoaCkudW1vZChjKTtyZXR1cm4gYi5pbXVsKGQpLHAuaWFkZChiKSxuZXcgZShwLmltdWwoaS51bmJsaW5kZXIpLnVtb2Qoci5tb2R1bHVzKS50b0FycmF5KCExLG8pKX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHI9bmV3IGEoZihlKSk7ci5jbXAodC5tb2R1bHVzKT49MHx8IXIudW1vZCh0LnByaW1lMSl8fCFyLnVtb2QodC5wcmltZTIpOylyPW5ldyBhKGYoZSkpO3JldHVybiByfXZhciBhPXIoMTgpLGY9cig2MSk7dC5leHBvcnRzPWksaS5nZXRyPW99KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMudHlwZT10LHRoaXMucD1uZXcgbyhlLnAsMTYpLHRoaXMucmVkPWUucHJpbWU/by5yZWQoZS5wcmltZSk6by5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBvKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgbygxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IG8oMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1lLm4mJm5ldyBvKGUubiwxNiksdGhpcy5nPWUuZyYmdGhpcy5wb2ludEZyb21KU09OKGUuZyxlLmdSZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCk7dmFyIHI9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IXJ8fHIuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gaSh0LGUpe3RoaXMuY3VydmU9dCx0aGlzLnR5cGU9ZSx0aGlzLnByZWNvbXB1dGVkPW51bGx9dmFyIG89cigxOCksYT1yKDE5KSxmPWEudXRpbHMscz1mLmdldE5BRix1PWYuZ2V0SlNGLGg9Zi5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxuLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24odCxlKXtoKHQucHJlY29tcHV0ZWQpO3ZhciByPXQuX2dldERvdWJsZXMoKSxuPXMoZSwxKSxpPSgxPDxyLnN0ZXArMSktKHIuc3RlcCUyPT09MD8yOjEpO2kvPTM7Zm9yKHZhciBvPVtdLGE9MDthPG4ubGVuZ3RoO2ErPXIuc3RlcCl7Zm9yKHZhciBmPTAsZT1hK3Iuc3RlcC0xO2U+PWE7ZS0tKWY9KGY8PDEpK25bZV07by5wdXNoKGYpfWZvcih2YXIgdT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksYz10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksZD1pO2Q+MDtkLS0pe2Zvcih2YXIgYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgZj1vW2FdO2Y9PT1kP2M9Yy5taXhlZEFkZChyLnBvaW50c1thXSk6Zj09PS1kJiYoYz1jLm1peGVkQWRkKHIucG9pbnRzW2FdLm5lZygpKSl9dT11LmFkZChjKX1yZXR1cm4gdS50b1AoKX0sbi5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24odCxlKXt2YXIgcj00LG49dC5fZ2V0TkFGUG9pbnRzKHIpO3I9bi53bmQ7Zm9yKHZhciBpPW4ucG9pbnRzLG89cyhlLHIpLGE9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGY9by5sZW5ndGgtMTtmPj0wO2YtLSl7Zm9yKHZhciBlPTA7Zj49MCYmMD09PW9bZl07Zi0tKWUrKztpZihmPj0wJiZlKyssYT1hLmRibHAoZSksZjwwKWJyZWFrO3ZhciB1PW9bZl07aCgwIT09dSksYT1cImFmZmluZVwiPT09dC50eXBlP3U+MD9hLm1peGVkQWRkKGlbdS0xPj4xXSk6YS5taXhlZEFkZChpWy11LTE+PjFdLm5lZygpKTp1PjA/YS5hZGQoaVt1LTE+PjFdKTphLmFkZChpWy11LTE+PjFdLm5lZygpKX1yZXR1cm5cImFmZmluZVwiPT09dC50eXBlP2EudG9QKCk6YX0sbi5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIG89dGhpcy5fd25hZlQxLGE9dGhpcy5fd25hZlQyLGY9dGhpcy5fd25hZlQzLGg9MCxjPTA7YzxuO2MrKyl7dmFyIGQ9ZVtjXSxsPWQuX2dldE5BRlBvaW50cyh0KTtvW2NdPWwud25kLGFbY109bC5wb2ludHN9Zm9yKHZhciBjPW4tMTtjPj0xO2MtPTIpe3ZhciBwPWMtMSxiPWM7aWYoMT09PW9bcF0mJjE9PT1vW2JdKXt2YXIgdj1bZVtwXSxudWxsLG51bGwsZVtiXV07MD09PWVbcF0ueS5jbXAoZVtiXS55KT8odlsxXT1lW3BdLmFkZChlW2JdKSx2WzJdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXS5uZWcoKSkpOjA9PT1lW3BdLnkuY21wKGVbYl0ueS5yZWROZWcoKSk/KHZbMV09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdKSx2WzJdPWVbcF0uYWRkKGVbYl0ubmVnKCkpKToodlsxXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0pLHZbMl09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdLm5lZygpKSk7dmFyIHk9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10sbT11KHJbcF0scltiXSk7aD1NYXRoLm1heChtWzBdLmxlbmd0aCxoKSxmW3BdPW5ldyBBcnJheShoKSxmW2JdPW5ldyBBcnJheShoKTtmb3IodmFyIGc9MDtnPGg7ZysrKXt2YXIgdz0wfG1bMF1bZ10sXz0wfG1bMV1bZ107ZltwXVtnXT15WzMqKHcrMSkrKF8rMSldLGZbYl1bZ109MCxhW3BdPXZ9fWVsc2UgZltwXT1zKHJbcF0sb1twXSksZltiXT1zKHJbYl0sb1tiXSksaD1NYXRoLm1heChmW3BdLmxlbmd0aCxoKSxoPU1hdGgubWF4KGZbYl0ubGVuZ3RoLGgpfWZvcih2YXIgTT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksUz10aGlzLl93bmFmVDQsYz1oO2M+PTA7Yy0tKXtmb3IodmFyIEU9MDtjPj0wOyl7Zm9yKHZhciBBPSEwLGc9MDtnPG47ZysrKVNbZ109MHxmW2ddW2NdLDAhPT1TW2ddJiYoQT0hMSk7aWYoIUEpYnJlYWs7RSsrLGMtLX1pZihjPj0wJiZFKyssTT1NLmRibHAoRSksYzwwKWJyZWFrO2Zvcih2YXIgZz0wO2c8bjtnKyspe3ZhciBkLGs9U1tnXTswIT09ayYmKGs+MD9kPWFbZ11bay0xPj4xXTprPDAmJihkPWFbZ11bLWstMT4+MV0ubmVnKCkpLE09XCJhZmZpbmVcIj09PWQudHlwZT9NLm1peGVkQWRkKGQpOk0uYWRkKGQpKX19Zm9yKHZhciBjPTA7YzxuO2MrKylhW2NdPW51bGw7cmV0dXJuIGk/TTpNLnRvUCgpfSxuLkJhc2VQb2ludD1pLGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxpLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxuLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih0LGUpe3Q9Zi50b0FycmF5KHQsZSk7dmFyIHI9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PXRbMF18fDY9PT10WzBdfHw3PT09dFswXSkmJnQubGVuZ3RoLTE9PT0yKnIpezY9PT10WzBdP2godFt0Lmxlbmd0aC0xXSUyPT09MCk6Nz09PXRbMF0mJmgodFt0Lmxlbmd0aC0xXSUyPT09MSk7dmFyIG49dGhpcy5wb2ludCh0LnNsaWNlKDEsMStyKSx0LnNsaWNlKDErciwxKzIqcikpO3JldHVybiBufWlmKCgyPT09dFswXXx8Mz09PXRbMF0pJiZ0Lmxlbmd0aC0xPT09cilyZXR1cm4gdGhpcy5wb2ludEZyb21YKHQuc2xpY2UoMSwxK3IpLDM9PT10WzBdKTt0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHBvaW50IGZvcm1hdFwiKX0saS5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lbmNvZGUodCwhMCl9LGkucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxyPXRoaXMuZ2V0WCgpLnRvQXJyYXkoXCJiZVwiLGUpO3JldHVybiB0P1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChyKTpbNF0uY29uY2F0KHIsdGhpcy5nZXRZKCkudG9BcnJheShcImJlXCIsZSkpfSxpLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZi5lbmNvZGUodGhpcy5fZW5jb2RlKGUpLHQpfSxpLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKHQpe2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIGU9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBlLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksZS5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCx0KSxlLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9ZSx0aGlzfSxpLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbih0KXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgZT10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFlJiZlLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgodC5iaXRMZW5ndGgoKSsxKS9lLnN0ZXApfSxpLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbih0LGUpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgcj1bdGhpc10sbj10aGlzLGk9MDtpPGU7aSs9dCl7Zm9yKHZhciBvPTA7bzx0O28rKyluPW4uZGJsKCk7ci5wdXNoKG4pfXJldHVybntzdGVwOnQscG9pbnRzOnJ9fSxpLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKHQpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIGU9W3RoaXNdLHI9KDE8PHQpLTEsbj0xPT09cj9udWxsOnRoaXMuZGJsKCksaT0xO2k8cjtpKyspZVtpXT1lW2ktMV0uYWRkKG4pO3JldHVybnt3bmQ6dCxwb2ludHM6ZX19LGkucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj0wO3I8dDtyKyspZT1lLmRibCgpO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy50d2lzdGVkPTEhPT0oMHx0LmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYoMHx0LmEpPT09LTEsdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLHUuY2FsbCh0aGlzLFwiZWR3YXJkc1wiLHQpLHRoaXMuYT1uZXcgZih0LmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBmKHQuYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgZih0LmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxoKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT09KDB8dC5jKX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dS5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJwcm9qZWN0aXZlXCIpLG51bGw9PT1lJiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgZihlLDE2KSx0aGlzLnk9bmV3IGYociwxNiksdGhpcy56PW4/bmV3IGYobiwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PWkmJm5ldyBmKGksMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfXZhciBvPXIoOTkpLGE9cigxOSksZj1yKDE4KSxzPXIoMiksdT1vLmJhc2UsaD1hLnV0aWxzLmFzc2VydDtzKG4sdSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubU9uZUE/dC5yZWROZWcoKTp0aGlzLmEucmVkTXVsKHQpfSxuLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vbmVDP3Q6dGhpcy5jLnJlZE11bCh0KX0sbi5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLnBvaW50KHQsZSxyLG4pfSxuLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKHQsZSl7dD1uZXcgZih0LDE2KSx0LnJlZHx8KHQ9dC50b1JlZCh0aGlzLnJlZCkpO3ZhciByPXQucmVkU3FyKCksbj10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKHIpKSxpPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChyKSksbz1uLnJlZE11bChpLnJlZEludm0oKSksYT1vLnJlZFNxcnQoKTtpZigwIT09YS5yZWRTcXIoKS5yZWRTdWIobykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTt2YXIgcz1hLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihlJiYhc3x8IWUmJnMpJiYoYT1hLnJlZE5lZygpKSx0aGlzLnBvaW50KHQsYSl9LG4ucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24odCxlKXt0PW5ldyBmKHQsMTYpLHQucmVkfHwodD10LnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9dC5yZWRTcXIoKSxuPXIucmVkU3ViKHRoaXMub25lKSxpPXIucmVkTXVsKHRoaXMuZCkucmVkQWRkKHRoaXMub25lKSxvPW4ucmVkTXVsKGkucmVkSW52bSgpKTtpZigwPT09by5jbXAodGhpcy56ZXJvKSl7aWYoZSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyx0KX12YXIgYT1vLnJlZFNxcnQoKTtpZigwIT09YS5yZWRTcXIoKS5yZWRTdWIobykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTtyZXR1cm4gYS5pc09kZCgpIT09ZSYmKGE9YS5yZWROZWcoKSksdGhpcy5wb2ludChhLHQpfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtpZih0LmlzSW5maW5pdHkoKSlyZXR1cm4hMDt0Lm5vcm1hbGl6ZSgpO3ZhciBlPXQueC5yZWRTcXIoKSxyPXQueS5yZWRTcXIoKSxuPWUucmVkTXVsKHRoaXMuYSkucmVkQWRkKHIpLGk9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoZSkucmVkTXVsKHIpKSk7cmV0dXJuIDA9PT1uLmNtcChpKX0scyhpLHUuQmFzZVBvaW50KSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCl9LG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuZXcgaSh0aGlzLHQsZSxyLG4pfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHQsZVswXSxlWzFdLGVbMl0pfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmMD09PXRoaXMueS5jbXAodGhpcy56KX0saS5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciB0PXRoaXMueC5yZWRTcXIoKSxlPXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKTtyPXIucmVkSUFkZChyKTt2YXIgbj10aGlzLmN1cnZlLl9tdWxBKHQpLGk9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIodCkucmVkSVN1YihlKSxvPW4ucmVkQWRkKGUpLGE9by5yZWRTdWIociksZj1uLnJlZFN1YihlKSxzPWkucmVkTXVsKGEpLHU9by5yZWRNdWwoZiksaD1pLnJlZE11bChmKSxjPWEucmVkTXVsKG8pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSxjLGgpfSxpLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciB0LGUscixuPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxpPXRoaXMueC5yZWRTcXIoKSxvPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBhPXRoaXMuY3VydmUuX211bEEoaSksZj1hLnJlZEFkZChvKTtpZih0aGlzLnpPbmUpdD1uLnJlZFN1YihpKS5yZWRTdWIobykucmVkTXVsKGYucmVkU3ViKHRoaXMuY3VydmUudHdvKSksZT1mLnJlZE11bChhLnJlZFN1YihvKSkscj1mLnJlZFNxcigpLnJlZFN1YihmKS5yZWRTdWIoZik7ZWxzZXt2YXIgcz10aGlzLnoucmVkU3FyKCksdT1mLnJlZFN1YihzKS5yZWRJU3ViKHMpO3Q9bi5yZWRTdWIoaSkucmVkSVN1YihvKS5yZWRNdWwodSksZT1mLnJlZE11bChhLnJlZFN1YihvKSkscj1mLnJlZE11bCh1KX19ZWxzZXt2YXIgYT1pLnJlZEFkZChvKSxzPXRoaXMuY3VydmUuX211bEModGhpcy5jLnJlZE11bCh0aGlzLnopKS5yZWRTcXIoKSx1PWEucmVkU3ViKHMpLnJlZFN1YihzKTt0PXRoaXMuY3VydmUuX211bEMobi5yZWRJU3ViKGEpKS5yZWRNdWwodSksZT10aGlzLmN1cnZlLl9tdWxDKGEpLnJlZE11bChpLnJlZElTdWIobykpLHI9YS5yZWRNdWwodSl9cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodCxlLHIpfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0saS5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKHQueS5yZWRTdWIodC54KSkscj10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKHQueS5yZWRBZGQodC54KSksbj10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bCh0LnQpLGk9dGhpcy56LnJlZE11bCh0LnoucmVkQWRkKHQueikpLG89ci5yZWRTdWIoZSksYT1pLnJlZFN1YihuKSxmPWkucmVkQWRkKG4pLHM9ci5yZWRBZGQoZSksdT1vLnJlZE11bChhKSxoPWYucmVkTXVsKHMpLGM9by5yZWRNdWwocyksZD1hLnJlZE11bChmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh1LGgsZCxjKX0saS5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuei5yZWRNdWwodC56KSxpPW4ucmVkU3FyKCksbz10aGlzLngucmVkTXVsKHQueCksYT10aGlzLnkucmVkTXVsKHQueSksZj10aGlzLmN1cnZlLmQucmVkTXVsKG8pLnJlZE11bChhKSxzPWkucmVkU3ViKGYpLHU9aS5yZWRBZGQoZiksaD10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHQueC5yZWRBZGQodC55KSkucmVkSVN1YihvKS5yZWRJU3ViKGEpLGM9bi5yZWRNdWwocykucmVkTXVsKGgpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KGU9bi5yZWRNdWwodSkucmVkTXVsKGEucmVkU3ViKHRoaXMuY3VydmUuX211bEEobykpKSxyPXMucmVkTXVsKHUpKTooZT1uLnJlZE11bCh1KS5yZWRNdWwoYS5yZWRTdWIobykpLHI9dGhpcy5jdXJ2ZS5fbXVsQyhzKS5yZWRNdWwodSkpLHRoaXMuY3VydmUucG9pbnQoYyxlLHIpfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3Q6dC5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZCh0KTp0aGlzLl9wcm9qQWRkKHQpfSxpLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXModCk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyx0KTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsdCl9LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxlXSxbdCxyXSwyLCExKX0saS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxlXSxbdCxyXSwyLCEwKX0saS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHQpLHRoaXMueT10aGlzLnkucmVkTXVsKHQpLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKHQpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LGkucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR8fDA9PT10aGlzLmdldFgoKS5jbXAodC5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKHQuZ2V0WSgpKX0saS5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHQpe3ZhciBlPXQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKGUpKXJldHVybiEwO2Zvcih2YXIgcj10LmNsb25lKCksbj10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoci5pYWRkKHRoaXMuY3VydmUubiksci5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihlLnJlZElBZGQobiksMD09PXRoaXMueC5jbXAoZSkpcmV0dXJuITB9cmV0dXJuITF9LGkucHJvdG90eXBlLnRvUD1pLnByb3RvdHlwZS5ub3JtYWxpemUsaS5wcm90b3R5cGUubWl4ZWRBZGQ9aS5wcm90b3R5cGUuYWRkfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtzLmNhbGwodGhpcyxcIm1vbnRcIix0KSx0aGlzLmE9bmV3IGEodC5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBhKHQuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IGEoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgYSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIGkodCxlLHIpe3MuQmFzZVBvaW50LmNhbGwodGhpcyx0LFwicHJvamVjdGl2ZVwiKSxudWxsPT09ZSYmbnVsbD09PXI/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBhKGUsMTYpLHRoaXMuej1uZXcgYShyLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfXZhciBvPXIoOTkpLGE9cigxOCksZj1yKDIpLHM9by5iYXNlLHU9cigxOSksaD11LnV0aWxzO2YobixzKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lm5vcm1hbGl6ZSgpLngscj1lLnJlZFNxcigpLG49ci5yZWRNdWwoZSkucmVkQWRkKHIucmVkTXVsKHRoaXMuYSkpLnJlZEFkZChlKSxpPW4ucmVkU3FydCgpO3JldHVybiAwPT09aS5yZWRTcXIoKS5jbXAobil9LGYoaSxzLkJhc2VQb2ludCksbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wb2ludChoLnRvQXJyYXkodCxlKSwxKX0sbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodGhpcyx0LGUpfSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCl9LGkucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheShcImJlXCIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LGkuZnJvbUpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodCxlWzBdLGVbMV18fHQub25lKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLngucmVkQWRkKHRoaXMueiksZT10LnJlZFNxcigpLHI9dGhpcy54LnJlZFN1Yih0aGlzLnopLG49ci5yZWRTcXIoKSxpPWUucmVkU3ViKG4pLG89ZS5yZWRNdWwobiksYT1pLnJlZE11bChuLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoaSkpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChvLGEpfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmVcIil9LGkucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLngucmVkQWRkKHRoaXMueiksbj10aGlzLngucmVkU3ViKHRoaXMueiksaT10LngucmVkQWRkKHQueiksbz10LngucmVkU3ViKHQueiksYT1vLnJlZE11bChyKSxmPWkucmVkTXVsKG4pLHM9ZS56LnJlZE11bChhLnJlZEFkZChmKS5yZWRTcXIoKSksdT1lLngucmVkTXVsKGEucmVkSVN1YihmKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocyx1KX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNsb25lKCkscj10aGlzLG49dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLGk9dGhpcyxvPVtdOzAhPT1lLmNtcG4oMCk7ZS5pdXNocm4oMSkpby5wdXNoKGUuYW5kbG4oMSkpO2Zvcih2YXIgYT1vLmxlbmd0aC0xO2E+PTA7YS0tKTA9PT1vW2FdPyhyPXIuZGlmZkFkZChuLGkpLG49bi5kYmwoKSk6KG49ci5kaWZmQWRkKG4saSkscj1yLmRibCgpKTtyZXR1cm4gbn0saS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcCh0LmdldFgoKSl9LGkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtoLmNhbGwodGhpcyxcInNob3J0XCIsdCksdGhpcy5hPW5ldyBzKHQuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgcyh0LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHQpLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIGkodCxlLHIsbil7aC5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJhZmZpbmVcIiksbnVsbD09PWUmJm51bGw9PT1yPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgcyhlLDE2KSx0aGlzLnk9bmV3IHMociwxNiksbiYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBvKHQsZSxyLG4pe2guQmFzZVBvaW50LmNhbGwodGhpcyx0LFwiamFjb2JpYW5cIiksbnVsbD09PWUmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IHMoMCkpOih0aGlzLng9bmV3IHMoZSwxNiksdGhpcy55PW5ldyBzKHIsMTYpLHRoaXMuej1uZXcgcyhuLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfXZhciBhPXIoOTkpLGY9cigxOSkscz1yKDE4KSx1PXIoMiksaD1hLmJhc2UsYz1mLnV0aWxzLmFzc2VydDt1KG4saCksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbih0KXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgZSxyO2lmKHQuYmV0YSllPW5ldyBzKHQuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIG49dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7ZT1uWzBdLmNtcChuWzFdKTwwP25bMF06blsxXSxlPWUudG9SZWQodGhpcy5yZWQpfWlmKHQubGFtYmRhKXI9bmV3IHModC5sYW1iZGEsMTYpO2Vsc2V7dmFyIGk9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoaVswXSkueC5jbXAodGhpcy5nLngucmVkTXVsKGUpKT9yPWlbMF06KHI9aVsxXSxjKDA9PT10aGlzLmcubXVsKHIpLnguY21wKHRoaXMuZy54LnJlZE11bChlKSkpKX12YXIgbztyZXR1cm4gbz10LmJhc2lzP3QuYmFzaXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybnthOm5ldyBzKHQuYSwxNiksYjpuZXcgcyh0LmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhyKSx7YmV0YTplLGxhbWJkYTpyLGJhc2lzOm99fX0sbi5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbih0KXt2YXIgZT10PT09dGhpcy5wP3RoaXMucmVkOnMubW9udCh0KSxyPW5ldyBzKDIpLnRvUmVkKGUpLnJlZEludm0oKSxuPXIucmVkTmVnKCksaT1uZXcgcygzKS50b1JlZChlKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKHIpLG89bi5yZWRBZGQoaSkuZnJvbVJlZCgpLGE9bi5yZWRTdWIoaSkuZnJvbVJlZCgpO3JldHVybltvLGFdfSxuLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxvLGEsZix1LGgsYz10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLGQ9dCxsPXRoaXMubi5jbG9uZSgpLHA9bmV3IHMoMSksYj1uZXcgcygwKSx2PW5ldyBzKDApLHk9bmV3IHMoMSksbT0wOzAhPT1kLmNtcG4oMCk7KXt2YXIgZz1sLmRpdihkKTt1PWwuc3ViKGcubXVsKGQpKSxoPXYuc3ViKGcubXVsKHApKTt2YXIgdz15LnN1YihnLm11bChiKSk7aWYoIW4mJnUuY21wKGMpPDApZT1mLm5lZygpLHI9cCxuPXUubmVnKCksaT1oO2Vsc2UgaWYobiYmMj09PSsrbSlicmVhaztmPXUsbD1kLGQ9dSx2PXAscD1oLHk9YixiPXd9bz11Lm5lZygpLGE9aDt2YXIgXz1uLnNxcigpLmFkZChpLnNxcigpKSxNPW8uc3FyKCkuYWRkKGEuc3FyKCkpO3JldHVybiBNLmNtcChfKT49MCYmKG89ZSxhPXIpLG4ubmVnYXRpdmUmJihuPW4ubmVnKCksaT1pLm5lZygpKSxvLm5lZ2F0aXZlJiYobz1vLm5lZygpLGE9YS5uZWcoKSksW3thOm4sYjppfSx7YTpvLGI6YX1dfSxuLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZW5kby5iYXNpcyxyPWVbMF0sbj1lWzFdLGk9bi5iLm11bCh0KS5kaXZSb3VuZCh0aGlzLm4pLG89ci5iLm5lZygpLm11bCh0KS5kaXZSb3VuZCh0aGlzLm4pLGE9aS5tdWwoci5hKSxmPW8ubXVsKG4uYSkscz1pLm11bChyLmIpLHU9by5tdWwobi5iKSxoPXQuc3ViKGEpLnN1YihmKSxjPXMuYWRkKHUpLm5lZygpO3JldHVybntrMTpoLGsyOmN9fSxuLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKHQsZSl7dD1uZXcgcyh0LDE2KSx0LnJlZHx8KHQ9dC50b1JlZCh0aGlzLnJlZCkpO3ZhciByPXQucmVkU3FyKCkucmVkTXVsKHQpLnJlZElBZGQodC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLG49ci5yZWRTcXJ0KCk7aWYoMCE9PW4ucmVkU3FyKCkucmVkU3ViKHIpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7dmFyIGk9bi5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oZSYmIWl8fCFlJiZpKSYmKG49bi5yZWROZWcoKSksdGhpcy5wb2ludCh0LG4pfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtpZih0LmluZilyZXR1cm4hMDt2YXIgZT10Lngscj10Lnksbj10aGlzLmEucmVkTXVsKGUpLGk9ZS5yZWRTcXIoKS5yZWRNdWwoZSkucmVkSUFkZChuKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1yLnJlZFNxcigpLnJlZElTdWIoaSkuY21wbigwKX0sbi5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy5fZW5kb1duYWZUMSxpPXRoaXMuX2VuZG9XbmFmVDIsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgYT10aGlzLl9lbmRvU3BsaXQoZVtvXSksZj10W29dLHM9Zi5fZ2V0QmV0YSgpO2EuazEubmVnYXRpdmUmJihhLmsxLmluZWcoKSxmPWYubmVnKCEwKSksYS5rMi5uZWdhdGl2ZSYmKGEuazIuaW5lZygpLHM9cy5uZWcoITApKSxuWzIqb109ZixuWzIqbysxXT1zLGlbMipvXT1hLmsxLGlbMipvKzFdPWEuazJ9Zm9yKHZhciB1PXRoaXMuX3duYWZNdWxBZGQoMSxuLGksMipvLHIpLGg9MDtoPDIqbztoKyspbltoXT1udWxsLGlbaF09bnVsbDtyZXR1cm4gdX0sdShpLGguQmFzZVBvaW50KSxuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBpKHRoaXMsdCxlLHIpfSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZnJvbUpTT04odGhpcyx0LGUpfSxpLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIHQ9dGhpcy5wcmVjb21wdXRlZDtpZih0JiZ0LmJldGEpcmV0dXJuIHQuYmV0YTt2YXIgZT10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYodCl7dmFyIHI9dGhpcy5jdXJ2ZSxuPWZ1bmN0aW9uKHQpe3JldHVybiByLnBvaW50KHQueC5yZWRNdWwoci5lbmRvLmJldGEpLHQueSl9O3QuYmV0YT1lLGUucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6dC5uYWYmJnt3bmQ6dC5uYWYud25kLHBvaW50czp0Lm5hZi5wb2ludHMubWFwKG4pfSxkb3VibGVzOnQuZG91YmxlcyYme3N0ZXA6dC5kb3VibGVzLnN0ZXAscG9pbnRzOnQuZG91Ymxlcy5wb2ludHMubWFwKG4pfX19cmV0dXJuIGV9fSxpLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3JldHVybiB0LnBvaW50KGVbMF0sZVsxXSxyKX1cInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9SlNPTi5wYXJzZShlKSk7dmFyIGk9dC5wb2ludChlWzBdLGVbMV0scik7aWYoIWVbMl0pcmV0dXJuIGk7dmFyIG89ZVsyXTtyZXR1cm4gaS5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6by5kb3VibGVzJiZ7c3RlcDpvLmRvdWJsZXMuc3RlcCxwb2ludHM6W2ldLmNvbmNhdChvLmRvdWJsZXMucG9pbnRzLm1hcChuKSl9LG5hZjpvLm5hZiYme3duZDpvLm5hZi53bmQscG9pbnRzOltpXS5jb25jYXQoby5uYWYucG9pbnRzLm1hcChuKSl9fSxpfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIj5cIn0saS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaW5mKXJldHVybiB0O2lmKHQuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEodCkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcSh0KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKHQueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgZT10aGlzLnkucmVkU3ViKHQueSk7MCE9PWUuY21wbigwKSYmKGU9ZS5yZWRNdWwodGhpcy54LnJlZFN1Yih0LngpLnJlZEludm0oKSkpO3ZhciByPWUucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIodC54KSxuPWUucmVkTXVsKHRoaXMueC5yZWRTdWIocikpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChyLG4pfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgdD10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PXQuY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMuY3VydmUuYSxyPXRoaXMueC5yZWRTcXIoKSxuPXQucmVkSW52bSgpLGk9ci5yZWRBZGQocikucmVkSUFkZChyKS5yZWRJQWRkKGUpLnJlZE11bChuKSxvPWkucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLGE9aS5yZWRNdWwodGhpcy54LnJlZFN1YihvKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KG8sYSl9LGkucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0saS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bmV3IHModCwxNiksdGhpcy5faGFzRG91Ymxlcyh0KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHQpOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW3RdKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsdCl9LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49W3RoaXMsZV0saT1bdCxyXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKG4saSk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLG4saSwyKX0saS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49W3RoaXMsZV0saT1bdCxyXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKG4saSwhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLG4saSwyLCEwKX0saS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHx0aGlzLmluZj09PXQuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKHQueCkmJjA9PT10aGlzLnkuY21wKHQueSkpfSxpLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZih0JiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgcj10aGlzLnByZWNvbXB1dGVkLG49ZnVuY3Rpb24odCl7cmV0dXJuIHQubmVnKCl9O2UucHJlY29tcHV0ZWQ9e25hZjpyLm5hZiYme3duZDpyLm5hZi53bmQscG9pbnRzOnIubmFmLnBvaW50cy5tYXAobil9LGRvdWJsZXM6ci5kb3VibGVzJiZ7c3RlcDpyLmRvdWJsZXMuc3RlcCxwb2ludHM6ci5kb3VibGVzLnBvaW50cy5tYXAobil9fX1yZXR1cm4gZX0saS5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTt2YXIgdD10aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKTtyZXR1cm4gdH0sdShvLGguQmFzZVBvaW50KSxuLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgbyh0aGlzLHQsZSxyKX0sby5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgdD10aGlzLnoucmVkSW52bSgpLGU9dC5yZWRTcXIoKSxyPXRoaXMueC5yZWRNdWwoZSksbj10aGlzLnkucmVkTXVsKGUpLnJlZE11bCh0KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChyLG4pfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHQ7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGU9dC56LnJlZFNxcigpLHI9dGhpcy56LnJlZFNxcigpLG49dGhpcy54LnJlZE11bChlKSxpPXQueC5yZWRNdWwociksbz10aGlzLnkucmVkTXVsKGUucmVkTXVsKHQueikpLGE9dC55LnJlZE11bChyLnJlZE11bCh0aGlzLnopKSxmPW4ucmVkU3ViKGkpLHM9by5yZWRTdWIoYSk7aWYoMD09PWYuY21wbigwKSlyZXR1cm4gMCE9PXMuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgdT1mLnJlZFNxcigpLGg9dS5yZWRNdWwoZiksYz1uLnJlZE11bCh1KSxkPXMucmVkU3FyKCkucmVkSUFkZChoKS5yZWRJU3ViKGMpLnJlZElTdWIoYyksbD1zLnJlZE11bChjLnJlZElTdWIoZCkpLnJlZElTdWIoby5yZWRNdWwoaCkpLHA9dGhpcy56LnJlZE11bCh0LnopLnJlZE11bChmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZCxsLHApfSxvLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdC50b0ooKTtpZih0LmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10aGlzLngsbj10LngucmVkTXVsKGUpLGk9dGhpcy55LG89dC55LnJlZE11bChlKS5yZWRNdWwodGhpcy56KSxhPXIucmVkU3ViKG4pLGY9aS5yZWRTdWIobyk7aWYoMD09PWEuY21wbigwKSlyZXR1cm4gMCE9PWYuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgcz1hLnJlZFNxcigpLHU9cy5yZWRNdWwoYSksaD1yLnJlZE11bChzKSxjPWYucmVkU3FyKCkucmVkSUFkZCh1KS5yZWRJU3ViKGgpLnJlZElTdWIoaCksZD1mLnJlZE11bChoLnJlZElTdWIoYykpLnJlZElTdWIoaS5yZWRNdWwodSkpLGw9dGhpcy56LnJlZE11bChhKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYyxkLGwpfSxvLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCF0KXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXtmb3IodmFyIGU9dGhpcyxyPTA7cjx0O3IrKyllPWUuZGJsKCk7cmV0dXJuIGV9Zm9yKHZhciBuPXRoaXMuY3VydmUuYSxpPXRoaXMuY3VydmUudGludixvPXRoaXMueCxhPXRoaXMueSxmPXRoaXMueixzPWYucmVkU3FyKCkucmVkU3FyKCksdT1hLnJlZEFkZChhKSxyPTA7cjx0O3IrKyl7dmFyIGg9by5yZWRTcXIoKSxjPXUucmVkU3FyKCksZD1jLnJlZFNxcigpLGw9aC5yZWRBZGQoaCkucmVkSUFkZChoKS5yZWRJQWRkKG4ucmVkTXVsKHMpKSxwPW8ucmVkTXVsKGMpLGI9bC5yZWRTcXIoKS5yZWRJU3ViKHAucmVkQWRkKHApKSx2PXAucmVkSVN1YihiKSx5PWwucmVkTXVsKHYpO3k9eS5yZWRJQWRkKHkpLnJlZElTdWIoZCk7dmFyIG09dS5yZWRNdWwoZik7cisxPHQmJihzPXMucmVkTXVsKGQpKSxvPWIsZj1tLHU9eX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobyx1LnJlZE11bChpKSxmKX0sby5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9kYmwoKX0sby5wcm90b3R5cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI7aWYodGhpcy56T25lKXt2YXIgbj10aGlzLngucmVkU3FyKCksaT10aGlzLnkucmVkU3FyKCksbz1pLnJlZFNxcigpLGE9dGhpcy54LnJlZEFkZChpKS5yZWRTcXIoKS5yZWRJU3ViKG4pLnJlZElTdWIobyk7YT1hLnJlZElBZGQoYSk7dmFyIGY9bi5yZWRBZGQobikucmVkSUFkZChuKSxzPWYucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGEpLHU9by5yZWRJQWRkKG8pO3U9dS5yZWRJQWRkKHUpLHU9dS5yZWRJQWRkKHUpLHQ9cyxlPWYucmVkTXVsKGEucmVkSVN1YihzKSkucmVkSVN1Yih1KSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBoPXRoaXMueC5yZWRTcXIoKSxjPXRoaXMueS5yZWRTcXIoKSxkPWMucmVkU3FyKCksbD10aGlzLngucmVkQWRkKGMpLnJlZFNxcigpLnJlZElTdWIoaCkucmVkSVN1YihkKTtsPWwucmVkSUFkZChsKTt2YXIgcD1oLnJlZEFkZChoKS5yZWRJQWRkKGgpLGI9cC5yZWRTcXIoKSx2PWQucmVkSUFkZChkKTt2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSx0PWIucmVkSVN1YihsKS5yZWRJU3ViKGwpLGU9cC5yZWRNdWwobC5yZWRJU3ViKHQpKS5yZWRJU3ViKHYpLHI9dGhpcy55LnJlZE11bCh0aGlzLnopLHI9ci5yZWRJQWRkKHIpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0LGUscil9LG8ucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciB0LGUscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihvKTthPWEucmVkSUFkZChhKTt2YXIgZj1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxzPWYucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGEpO3Q9czt2YXIgdT1vLnJlZElBZGQobyk7dT11LnJlZElBZGQodSksdT11LnJlZElBZGQodSksZT1mLnJlZE11bChhLnJlZElTdWIocykpLnJlZElTdWIodSkscj10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaD10aGlzLnoucmVkU3FyKCksYz10aGlzLnkucmVkU3FyKCksZD10aGlzLngucmVkTXVsKGMpLGw9dGhpcy54LnJlZFN1YihoKS5yZWRNdWwodGhpcy54LnJlZEFkZChoKSk7bD1sLnJlZEFkZChsKS5yZWRJQWRkKGwpO3ZhciBwPWQucmVkSUFkZChkKTtwPXAucmVkSUFkZChwKTt2YXIgYj1wLnJlZEFkZChwKTt0PWwucmVkU3FyKCkucmVkSVN1YihiKSxyPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGMpLnJlZElTdWIoaCk7dmFyIHY9Yy5yZWRTcXIoKTt2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSxlPWwucmVkTXVsKHAucmVkSVN1Yih0KSkucmVkSVN1Yih2KX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodCxlLHIpfSxvLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJ2ZS5hLGU9dGhpcy54LHI9dGhpcy55LG49dGhpcy56LGk9bi5yZWRTcXIoKS5yZWRTcXIoKSxvPWUucmVkU3FyKCksYT1yLnJlZFNxcigpLGY9by5yZWRBZGQobykucmVkSUFkZChvKS5yZWRJQWRkKHQucmVkTXVsKGkpKSxzPWUucmVkQWRkKGUpO3M9cy5yZWRJQWRkKHMpO3ZhciB1PXMucmVkTXVsKGEpLGg9Zi5yZWRTcXIoKS5yZWRJU3ViKHUucmVkQWRkKHUpKSxjPXUucmVkSVN1YihoKSxkPWEucmVkU3FyKCk7ZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCk7dmFyIGw9Zi5yZWRNdWwoYykucmVkSVN1YihkKSxwPXIucmVkQWRkKHIpLnJlZE11bChuKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoaCxsLHApfSxvLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciB0PXRoaXMueC5yZWRTcXIoKSxlPXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPWUucmVkU3FyKCksaT10LnJlZEFkZCh0KS5yZWRJQWRkKHQpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoZSkucmVkU3FyKCkucmVkSVN1Yih0KS5yZWRJU3ViKG4pO2E9YS5yZWRJQWRkKGEpLGE9YS5yZWRBZGQoYSkucmVkSUFkZChhKSxhPWEucmVkSVN1YihvKTt2YXIgZj1hLnJlZFNxcigpLHM9bi5yZWRJQWRkKG4pO3M9cy5yZWRJQWRkKHMpLHM9cy5yZWRJQWRkKHMpLHM9cy5yZWRJQWRkKHMpO3ZhciB1PWkucmVkSUFkZChhKS5yZWRTcXIoKS5yZWRJU3ViKG8pLnJlZElTdWIoZikucmVkSVN1YihzKSxoPWUucmVkTXVsKHUpO2g9aC5yZWRJQWRkKGgpLGg9aC5yZWRJQWRkKGgpO3ZhciBjPXRoaXMueC5yZWRNdWwoZikucmVkSVN1YihoKTtjPWMucmVkSUFkZChjKSxjPWMucmVkSUFkZChjKTt2YXIgZD10aGlzLnkucmVkTXVsKHUucmVkTXVsKHMucmVkSVN1Yih1KSkucmVkSVN1YihhLnJlZE11bChmKSkpO2Q9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpO3ZhciBsPXRoaXMuei5yZWRBZGQoYSkucmVkU3FyKCkucmVkSVN1YihyKS5yZWRJU3ViKGYpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChjLGQsbCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0PW5ldyBzKHQsZSksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtpZihcImFmZmluZVwiPT09dC50eXBlKXJldHVybiB0aGlzLmVxKHQudG9KKCkpO2lmKHRoaXM9PT10KXJldHVybiEwO3ZhciBlPXRoaXMuei5yZWRTcXIoKSxyPXQuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChyKS5yZWRJU3ViKHQueC5yZWRNdWwoZSkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIG49ZS5yZWRNdWwodGhpcy56KSxpPXIucmVkTXVsKHQueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKGkpLnJlZElTdWIodC55LnJlZE11bChuKSkuY21wbigwKX0sby5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuei5yZWRTcXIoKSxyPXQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChlKTtpZigwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMDtmb3IodmFyIG49dC5jbG9uZSgpLGk9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChlKTs7KXtpZihuLmlhZGQodGhpcy5jdXJ2ZS5uKSxuLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKHIucmVkSUFkZChpKSwwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMH1yZXR1cm4hMX0sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBKUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgSlBvaW50IHg6IFwiK3RoaXMueC50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LnRvU3RyaW5nKDE2LDIpK1wiPlwifSxvLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe1wic2hvcnRcIj09PXQudHlwZT90aGlzLmN1cnZlPW5ldyBmLmN1cnZlLnNob3J0KHQpOlwiZWR3YXJkc1wiPT09dC50eXBlP3RoaXMuY3VydmU9bmV3IGYuY3VydmUuZWR3YXJkcyh0KTp0aGlzLmN1cnZlPW5ldyBmLmN1cnZlLm1vbnQodCksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD10Lmhhc2gscyh0aGlzLmcudmFsaWRhdGUoKSxcIkludmFsaWQgY3VydmVcIikscyh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLFwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE9cIil9ZnVuY3Rpb24gaSh0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciByPW5ldyBuKGUpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobyx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSkscn19KX12YXIgbz1lLGE9cig0OSksZj1yKDE5KSxzPWYudXRpbHMuYXNzZXJ0O28uUHJlc2V0Q3VydmU9bixpKFwicDE5MlwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcInAxOTJcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjFcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzFcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMlwiLFwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTFcIl19KSxpKFwicDIyNFwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcInAyMjRcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmVcIixiOlwiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjRcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2RcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMVwiLFwiYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzRcIl19KSxpKFwicDI1NlwiLHtcbnR5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiXCIsbjpcImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTZcIixcIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1XCJdfSksaShcInAzODRcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmNcIixiOlwiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWZcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzNcIixoYXNoOmEuc2hhMzg0LGdSZWQ6ITEsZzpbXCJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiN1wiLFwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWZcIl19KSxpKFwicDUyMVwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMFwiLG46XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOVwiLGhhc2g6YS5zaGE1MTIsZ1JlZDohMSxnOltcIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2XCIsXCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MFwiXX0pLGkoXCJjdXJ2ZTI1NTE5XCIse3R5cGU6XCJtb250XCIscHJpbWU6XCJwMjU1MTlcIixwOlwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiLGE6XCI3NmQwNlwiLGI6XCIwXCIsbjpcIjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWRcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCI5XCJdfSksaShcImVkMjU1MTlcIix7dHlwZTpcImVkd2FyZHNcIixwcmltZTpcInAyNTUxOVwiLHA6XCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIsYTpcIi0xXCIsYzpcIjFcIixkOlwiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhM1wiLG46XCIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYVwiLFwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OFwiXX0pO3ZhciB1O3RyeXt1PXIoNTIwKX1jYXRjaCh0KXt1PXZvaWQgMH1pKFwic2VjcDI1NmsxXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOlwiazI1NlwiLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiLGE6XCIwXCIsYjpcIjdcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDFcIixoOlwiMVwiLGhhc2g6YS5zaGEyNTYsYmV0YTpcIjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWVcIixsYW1iZGE6XCI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyXCIsYmFzaXM6W3thOlwiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTVcIixiOlwiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzXCJ9LHthOlwiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4XCIsYjpcIjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1XCJ9XSxnUmVkOiExLGc6W1wiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OFwiLFwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOFwiLHVdfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oXCJzdHJpbmdcIj09dHlwZW9mIHQmJihmKG8uY3VydmVzLmhhc093blByb3BlcnR5KHQpLFwiVW5rbm93biBjdXJ2ZSBcIit0KSx0PW8uY3VydmVzW3RdKSx0IGluc3RhbmNlb2Ygby5jdXJ2ZXMuUHJlc2V0Q3VydmUmJih0PXtjdXJ2ZTp0fSksdGhpcy5jdXJ2ZT10LmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9dC5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKHQuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx2b2lkKHRoaXMuaGFzaD10Lmhhc2h8fHQuY3VydmUuaGFzaCkpOm5ldyBuKHQpfXZhciBpPXIoMTgpLG89cigxOSksYT1vLnV0aWxzLGY9YS5hc3NlcnQscz1yKDUxNCksdT1yKDUxNSk7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHModGhpcyx0KX0sbi5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcy5mcm9tUHJpdmF0ZSh0aGlzLHQsZSl9LG4ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcy5mcm9tUHVibGljKHRoaXMsdCxlKX0sbi5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbih0KXt0fHwodD17fSk7Zm9yKHZhciBlPW5ldyBvLmhtYWNEUkJHKHtoYXNoOnRoaXMuaGFzaCxwZXJzOnQucGVycyxlbnRyb3B5OnQuZW50cm9weXx8by5yYW5kKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxyPXRoaXMubi5ieXRlTGVuZ3RoKCksbj10aGlzLm4uc3ViKG5ldyBpKDIpKTs7KXt2YXIgYT1uZXcgaShlLmdlbmVyYXRlKHIpKTtpZighKGEuY21wKG4pPjApKXJldHVybiBhLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoYSl9fSxuLnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24odCxlKXt2YXIgcj04KnQuYnl0ZUxlbmd0aCgpLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcj4wJiYodD10LnVzaHJuKHIpKSwhZSYmdC5jbXAodGhpcy5uKT49MD90LnN1Yih0aGlzLm4pOnR9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxlLHIsbil7XCJvYmplY3RcIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxufHwobj17fSksZT10aGlzLmtleUZyb21Qcml2YXRlKGUsciksdD10aGlzLl90cnVuY2F0ZVRvTihuZXcgaSh0LDE2KSk7Zm9yKHZhciBhPXRoaXMubi5ieXRlTGVuZ3RoKCksZj1lLmdldFByaXZhdGUoKS50b0FycmF5KFwiYmVcIixhKSxzPXQudG9BcnJheShcImJlXCIsYSksaD1uZXcgby5obWFjRFJCRyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpmLG5vbmNlOnMscGVyczpuLnBlcnMscGVyc0VuYzpuLnBlcnNFbmN9KSxjPXRoaXMubi5zdWIobmV3IGkoMSkpLGQ9MDshMDtkKyspe3ZhciBsPW4uaz9uLmsoZCk6bmV3IGkoaC5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYobD10aGlzLl90cnVuY2F0ZVRvTihsLCEwKSwhKGwuY21wbigxKTw9MHx8bC5jbXAoYyk+PTApKXt2YXIgcD10aGlzLmcubXVsKGwpO2lmKCFwLmlzSW5maW5pdHkoKSl7dmFyIGI9cC5nZXRYKCksdj1iLnVtb2QodGhpcy5uKTtpZigwIT09di5jbXBuKDApKXt2YXIgeT1sLmludm0odGhpcy5uKS5tdWwodi5tdWwoZS5nZXRQcml2YXRlKCkpLmlhZGQodCkpO2lmKHk9eS51bW9kKHRoaXMubiksMCE9PXkuY21wbigwKSl7dmFyIG09KHAuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PWIuY21wKHYpPzI6MCk7cmV0dXJuIG4uY2Fub25pY2FsJiZ5LmNtcCh0aGlzLm5oKT4wJiYoeT10aGlzLm4uc3ViKHkpLG1ePTEpLG5ldyB1KHtyOnYsczp5LHJlY292ZXJ5UGFyYW06bX0pfX19fX19LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUscixuKXt0PXRoaXMuX3RydW5jYXRlVG9OKG5ldyBpKHQsMTYpKSxyPXRoaXMua2V5RnJvbVB1YmxpYyhyLG4pLGU9bmV3IHUoZSxcImhleFwiKTt2YXIgbz1lLnIsYT1lLnM7aWYoby5jbXBuKDEpPDB8fG8uY21wKHRoaXMubik+PTApcmV0dXJuITE7aWYoYS5jbXBuKDEpPDB8fGEuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIGY9YS5pbnZtKHRoaXMubikscz1mLm11bCh0KS51bW9kKHRoaXMubiksaD1mLm11bChvKS51bW9kKHRoaXMubik7aWYoIXRoaXMuY3VydmUuX21heHdlbGxUcmljayl7dmFyIGM9dGhpcy5nLm11bEFkZChzLHIuZ2V0UHVibGljKCksaCk7cmV0dXJuIWMuaXNJbmZpbml0eSgpJiYwPT09Yy5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChvKX12YXIgYz10aGlzLmcuam11bEFkZChzLHIuZ2V0UHVibGljKCksaCk7cmV0dXJuIWMuaXNJbmZpbml0eSgpJiZjLmVxWFRvUChvKX0sbi5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbih0LGUscixuKXtmKCgzJnIpPT09cixcIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHNcIiksZT1uZXcgdShlLG4pO3ZhciBvPXRoaXMubixhPW5ldyBpKHQpLHM9ZS5yLGg9ZS5zLGM9MSZyLGQ9cj4+MTtpZihzLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmZCl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGVcIik7cz1kP3RoaXMuY3VydmUucG9pbnRGcm9tWChzLmFkZCh0aGlzLmN1cnZlLm4pLGMpOnRoaXMuY3VydmUucG9pbnRGcm9tWChzLGMpO3ZhciBsPWUuci5pbnZtKG8pLHA9by5zdWIoYSkubXVsKGwpLnVtb2QobyksYj1oLm11bChsKS51bW9kKG8pO3JldHVybiB0aGlzLmcubXVsQWRkKHAscyxiKX0sbi5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbih0LGUscixuKXtpZihlPW5ldyB1KGUsbiksbnVsbCE9PWUucmVjb3ZlcnlQYXJhbSlyZXR1cm4gZS5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgaT0wO2k8NDtpKyspe3ZhciBvO3RyeXtvPXRoaXMucmVjb3ZlclB1YktleSh0LGUsaSl9Y2F0Y2godCl7Y29udGludWV9aWYoby5lcShyKSlyZXR1cm4gaX10aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3JcIil9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWM9dCx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLGUucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShlLnByaXYsZS5wcml2RW5jKSxlLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKGUucHViLGUucHViRW5jKX12YXIgaT1yKDE4KTt0LmV4cG9ydHM9bixuLmZyb21QdWJsaWM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3B1YjplLHB1YkVuYzpyfSl9LG4uZnJvbVByaXZhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3ByaXY6ZSxwcml2RW5jOnJ9KX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFB1YmxpYygpO3JldHVybiB0LmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjpcIkludmFsaWQgcHVibGljIGtleVwifTp0LnZhbGlkYXRlKCk/dC5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246XCJQdWJsaWMga2V5ICogTiAhPSBPXCJ9OntyZXN1bHQ6ITEscmVhc29uOlwiUHVibGljIGtleSBpcyBub3QgYSBwb2ludFwifX0sbi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJihlPXQsdD1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksZT90aGlzLnB1Yi5lbmNvZGUoZSx0KTp0aGlzLnB1Yn0sbi5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxuLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbih0LGUpe3RoaXMucHJpdj1uZXcgaSh0LGV8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sbi5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lnh8fHQueT92b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQodC54LHQueSkpOnZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludCh0LGUpKX0sbi5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm11bCh0aGlzLnByaXYpLmdldFgoKX0sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZWMuc2lnbih0LHRoaXMsZSxyKX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KHQsZSx0aGlzKX0sbi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVyblwiPEtleSBwcml2OiBcIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpK1wiIHB1YjogXCIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpK1wiID5cIn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuP3Q6dm9pZCh0aGlzLl9pbXBvcnRERVIodCxlKXx8KGModC5yJiZ0LnMsXCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHNcIiksdGhpcy5yPW5ldyBzKHQuciwxNiksdGhpcy5zPW5ldyBzKHQucywxNiksdm9pZCAwPT09dC5yZWNvdmVyeVBhcmFtP3RoaXMucmVjb3ZlcnlQYXJhbT1udWxsOnRoaXMucmVjb3ZlcnlQYXJhbT10LnJlY292ZXJ5UGFyYW0pKX1mdW5jdGlvbiBpKCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10W2UucGxhY2UrK107aWYoISgxMjgmcikpcmV0dXJuIHI7Zm9yKHZhciBuPTE1JnIsaT0wLG89MCxhPWUucGxhY2U7bzxuO28rKyxhKyspaTw8PTgsaXw9dFthXTtyZXR1cm4gZS5wbGFjZT1hLGl9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTE7IXRbZV0mJiEoMTI4JnRbZSsxXSkmJmU8cjspZSsrO3JldHVybiAwPT09ZT90OnQuc2xpY2UoZSl9ZnVuY3Rpb24gZih0LGUpe2lmKGU8MTI4KXJldHVybiB2b2lkIHQucHVzaChlKTt2YXIgcj0xKyhNYXRoLmxvZyhlKS9NYXRoLkxOMj4+PjMpO2Zvcih0LnB1c2goMTI4fHIpOy0tcjspdC5wdXNoKGU+Pj4ocjw8MykmMjU1KTt0LnB1c2goZSl9dmFyIHM9cigxOCksdT1yKDE5KSxoPXUudXRpbHMsYz1oLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKHQsZSl7dD1oLnRvQXJyYXkodCxlKTt2YXIgcj1uZXcgaTtpZig0OCE9PXRbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgbj1vKHQscik7aWYobityLnBsYWNlIT09dC5sZW5ndGgpcmV0dXJuITE7aWYoMiE9PXRbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgYT1vKHQsciksZj10LnNsaWNlKHIucGxhY2UsYStyLnBsYWNlKTtpZihyLnBsYWNlKz1hLDIhPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIHU9byh0LHIpO2lmKHQubGVuZ3RoIT09dStyLnBsYWNlKXJldHVybiExO3ZhciBjPXQuc2xpY2Uoci5wbGFjZSx1K3IucGxhY2UpO3JldHVybiAwPT09ZlswXSYmMTI4JmZbMV0mJihmPWYuc2xpY2UoMSkpLDA9PT1jWzBdJiYxMjgmY1sxXSYmKGM9Yy5zbGljZSgxKSksdGhpcy5yPW5ldyBzKGYpLHRoaXMucz1uZXcgcyhjKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sbi5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yLnRvQXJyYXkoKSxyPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZlWzBdJiYoZT1bMF0uY29uY2F0KGUpKSwxMjgmclswXSYmKHI9WzBdLmNvbmNhdChyKSksZT1hKGUpLHI9YShyKTshKHJbMF18fDEyOCZyWzFdKTspcj1yLnNsaWNlKDEpO3ZhciBuPVsyXTtmKG4sZS5sZW5ndGgpLG49bi5jb25jYXQoZSksbi5wdXNoKDIpLGYobixyLmxlbmd0aCk7dmFyIGk9bi5jb25jYXQociksbz1bNDhdO3JldHVybiBmKG8saS5sZW5ndGgpLG89by5jb25jYXQoaSksaC5lbmNvZGUobyx0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe2lmKGYoXCJlZDI1NTE5XCI9PT10LFwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhclwiKSwhKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCk7dmFyIHQ9by5jdXJ2ZXNbdF0uY3VydmU7dGhpcy5jdXJ2ZT10LHRoaXMuZz10LmcsdGhpcy5nLnByZWNvbXB1dGUodC5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz10LnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwodC5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1pLnNoYTUxMn12YXIgaT1yKDQ5KSxvPXIoMTkpLGE9by51dGlscyxmPWEuYXNzZXJ0LHM9YS5wYXJzZUJ5dGVzLHU9cig1MTcpLGg9cig1MTgpO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxlKXt0PXModCk7dmFyIHI9dGhpcy5rZXlGcm9tU2VjcmV0KGUpLG49dGhpcy5oYXNoSW50KHIubWVzc2FnZVByZWZpeCgpLHQpLGk9dGhpcy5nLm11bChuKSxvPXRoaXMuZW5jb2RlUG9pbnQoaSksYT10aGlzLmhhc2hJbnQobyxyLnB1YkJ5dGVzKCksdCkubXVsKHIucHJpdigpKSxmPW4uYWRkKGEpLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOmksUzpmLFJlbmNvZGVkOm99KX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSxyKXt0PXModCksZT10aGlzLm1ha2VTaWduYXR1cmUoZSk7dmFyIG49dGhpcy5rZXlGcm9tUHVibGljKHIpLGk9dGhpcy5oYXNoSW50KGUuUmVuY29kZWQoKSxuLnB1YkJ5dGVzKCksdCksbz10aGlzLmcubXVsKGUuUygpKSxhPWUuUigpLmFkZChuLnB1YigpLm11bChpKSk7cmV0dXJuIGEuZXEobyl9LG4ucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5oYXNoKCksZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC51cGRhdGUoYXJndW1lbnRzW2VdKTtyZXR1cm4gYS5pbnRGcm9tTEUodC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxuLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKHQpe3JldHVybiB1LmZyb21QdWJsaWModGhpcyx0KX0sbi5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbih0KXtyZXR1cm4gdS5mcm9tU2VjcmV0KHRoaXMsdCl9LG4ucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBoP3Q6bmV3IGgodGhpcyx0KX0sbi5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRZKCkudG9BcnJheShcImxlXCIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIGVbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9dC5nZXRYKCkuaXNPZGQoKT8xMjg6MCxlfSxuLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih0KXt0PWEucGFyc2VCeXRlcyh0KTt2YXIgZT10Lmxlbmd0aC0xLHI9dC5zbGljZSgwLGUpLmNvbmNhdCh0W2VdJi0xMjkpLG49MCE9PSgxMjgmdFtlXSksaT1hLmludEZyb21MRShyKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKGksbil9LG4ucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0FycmF5KFwibGVcIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sbi5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKHQpe3JldHVybiBhLmludEZyb21MRSh0KX0sbi5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5lZGRzYT10LHRoaXMuX3NlY3JldD1mKGUuc2VjcmV0KSx0LmlzUG9pbnQoZS5wdWIpP3RoaXMuX3B1Yj1lLnB1Yjp0aGlzLl9wdWJCeXRlcz1mKGUucHViKX12YXIgaT1yKDE5KSxvPWkudXRpbHMsYT1vLmFzc2VydCxmPW8ucGFyc2VCeXRlcyxzPW8uY2FjaGVkUHJvcGVydHk7bi5mcm9tUHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7cHViOmV9KX0sbi5mcm9tU2VjcmV0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7c2VjcmV0OmV9KX0sbi5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0scyhuLFwicHViQnl0ZXNcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSkscyhuLFwicHViXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxzKG4sXCJwcml2Qnl0ZXNcIixmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRkc2EsZT10aGlzLmhhc2goKSxyPXQuZW5jb2RpbmdMZW5ndGgtMSxuPWUuc2xpY2UoMCx0LmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gblswXSY9MjQ4LG5bcl0mPTEyNyxuW3JdfD02NCxufSkscyhuLFwicHJpdlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSkscyhuLFwiaGFzaFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLHMobixcIm1lc3NhZ2VQcmVmaXhcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5fc2VjcmV0LFwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnlcIiksdGhpcy5lZGRzYS5zaWduKHQsdGhpcyl9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeSh0LGUsdGhpcyl9LG4ucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzLl9zZWNyZXQsXCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5XCIpLG8uZW5jb2RlKHRoaXMuc2VjcmV0KCksdCl9LG4ucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbih0KXtyZXR1cm4gby5lbmNvZGUodGhpcy5wdWJCeXRlcygpLHQpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVkZHNhPXQsXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXUoZSkpLEFycmF5LmlzQXJyYXkoZSkmJihlPXtSOmUuc2xpY2UoMCx0LmVuY29kaW5nTGVuZ3RoKSxTOmUuc2xpY2UodC5lbmNvZGluZ0xlbmd0aCl9KSxmKGUuUiYmZS5TLFwiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTXCIpLHQuaXNQb2ludChlLlIpJiYodGhpcy5fUj1lLlIpLGUuUyBpbnN0YW5jZW9mIGkmJih0aGlzLl9TPWUuUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShlLlIpP2UuUjplLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoZS5TKT9lLlM6ZS5TZW5jb2RlZH12YXIgaT1yKDE4KSxvPXIoMTkpLGE9by51dGlscyxmPWEuYXNzZXJ0LHM9YS5jYWNoZWRQcm9wZXJ0eSx1PWEucGFyc2VCeXRlcztzKG4sXCJTXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLHMobixcIlJcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxzKG4sXCJSZW5jb2RlZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSkscyhuLFwiU2VuY29kZWRcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxuLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sbi5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYS5lbmNvZGUodGhpcy50b0J5dGVzKCksXCJoZXhcIikudG9VcHBlckNhc2UoKX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0KTt0aGlzLmhhc2g9dC5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXQucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dC5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMucmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBlPWEudG9BcnJheSh0LmVudHJvcHksdC5lbnRyb3B5RW5jKSxyPWEudG9BcnJheSh0Lm5vbmNlLHQubm9uY2VFbmMpLGk9YS50b0FycmF5KHQucGVycyx0LnBlcnNFbmMpO2YoZS5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LFwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiBcIit0aGlzLm1pbkVudHJvcHkrXCIgYml0c1wiKSx0aGlzLl9pbml0KGUscixpKX12YXIgaT1yKDQ5KSxvPXIoMTkpLGE9by51dGlscyxmPWEuYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNvbmNhdChlKS5jb25jYXQocik7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgaT0wO2k8dGhpcy5WLmxlbmd0aDtpKyspdGhpcy5LW2ldPTAsdGhpcy5WW2ldPTE7dGhpcy5fdXBkYXRlKG4pLHRoaXMucmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LG4ucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO3QmJihlPWUudXBkYXRlKHQpKSx0aGlzLks9ZS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLHQmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZSh0KS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sbi5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKHQsZSxyLG4pe1wic3RyaW5nXCIhPXR5cGVvZiBlJiYobj1yLHI9ZSxlPW51bGwpLHQ9YS50b0J1ZmZlcih0LGUpLHI9YS50b0J1ZmZlcihyLG4pLGYodC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LFwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiBcIit0aGlzLm1pbkVudHJvcHkrXCIgYml0c1wiKSx0aGlzLl91cGRhdGUodC5jb25jYXQocnx8W10pKSx0aGlzLnJlc2VlZD0xfSxuLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLnJlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcihcIlJlc2VlZCBpcyByZXF1aXJlZFwiKTtcInN0cmluZ1wiIT10eXBlb2YgZSYmKG49cixyPWUsZT1udWxsKSxyJiYocj1hLnRvQXJyYXkocixuKSx0aGlzLl91cGRhdGUocikpO2Zvcih2YXIgaT1bXTtpLmxlbmd0aDx0Oyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLGk9aS5jb25jYXQodGhpcy5WKTt2YXIgbz1pLnNsaWNlKDAsdCk7cmV0dXJuIHRoaXMuX3VwZGF0ZShyKSx0aGlzLnJlc2VlZCsrLGEuZW5jb2RlKG8sZSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbW1wiZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYVwiLFwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMVwiXSxbXCI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4XCIsXCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmXCJdLFtcIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzlcIixcImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTVcIl0sW1wiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MFwiLFwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5XCJdLFtcIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGNcIixcIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzZcIl0sW1wiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYVwiLFwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZlwiXSxbXCJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhXCIsXCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5XCJdLFtcIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjBcIixcImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDlcIl0sW1wiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZFwiLFwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZFwiXSxbXCJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkXCIsXCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4XCJdLFtcImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjFcIixcIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWRcIl0sW1wiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMFwiLFwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOFwiXSxbXCI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3XCIsXCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhXCJdLFtcIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjJcIixcIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTNcIl0sW1wiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3XCIsXCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwXCJdLFtcIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmRcIixcIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTBcIl0sW1wiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4M1wiLFwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNlwiXSxbXCI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGFcIixcIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODlcIl0sW1wiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOFwiLFwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxN1wiXSxbXCJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkXCIsXCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhXCJdLFtcImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjVcIixcIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGRcIl0sW1wiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NFwiLFwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMlwiXSxbXCI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjXCIsXCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2XCJdLFtcImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjZcIixcIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmZcIl0sW1wiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOVwiLFwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMVwiXSxbXCJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxXCIsXCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzXCJdLFtcImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGJcIixcImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWZcIl0sW1wiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwM1wiLFwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlN1wiXSxbXCJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkXCIsXCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4XCJdLFtcImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzBcIixcIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTFcIl0sW1wiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNFwiLFwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwXCJdLFtcIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGFcIixcIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODJcIl0sW1wiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMVwiLFwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiY1wiXSxbXCI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllXCIsXCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiXCJdLFtcImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDFcIixcIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTFcIl0sW1wiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZlwiLFwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1XCJdLFtcImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZThcIixcImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjBcIl0sW1wiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZFwiLFwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NFwiXSxbXCI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2XCIsXCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZFwiXSxbXCI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkXCIsXCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkXCJdLFtcIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTVcIixcIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYThcIl0sW1wiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NlwiLFwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOFwiXSxbXCI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxXCIsXCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjXCJdLFtcIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhY1wiLFwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZlwiXSxbXCI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxXCIsXCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyXCJdLFtcImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2VcIixcIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDdcIl0sW1wiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MVwiLFwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlY1wiXSxbXCJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzXCIsXCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkXCJdLFtcImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGZcIixcIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTRcIl0sW1wiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOVwiLFwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZFwiXSxbXCIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlXCIsXCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwXCJdLFtcImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjlcIixcIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTFcIl0sW1wiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMlwiLFwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMVwiXSxbXCJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzXCIsXCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjXCJdLFtcIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2NcIixcImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzNcIl0sW1wiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYVwiLFwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZFwiXSxbXCJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxXCIsXCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1XCJdLFtcIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzNcIixcImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODlcIl0sW1wiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OFwiLFwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZVwiXSxbXCIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiXCIsXCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3XCJdLFtcImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjZcIixcImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMVwiXSxbXCI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhXCIsXCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyXCJdLFtcIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMFwiLFwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NVwiXSxbXCJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3XCIsXCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczXCJdLFtcImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWVcIixcImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODJcIl1dfSxuYWY6e3duZDo3LHBvaW50czpbW1wiZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOVwiLFwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MlwiXSxbXCIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0XCIsXCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2XCJdLFtcIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmNcIixcIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGFcIl0sW1wiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZVwiLFwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzN1wiXSxbXCI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiXCIsXCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiXCJdLFtcImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYThcIixcImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MVwiXSxbXCJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlXCIsXCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4XCJdLFtcImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzRcIixcIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzdcIl0sW1wiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2Y1wiLFwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YVwiXSxbXCIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1XCIsXCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjXCJdLFtcIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2ZcIixcIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2N1wiXSxbXCI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0XCIsXCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyXCJdLFtcImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjlcIixcImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTVcIl0sW1wiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYlwiLFwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MlwiXSxbXCI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0XCIsXCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyXCJdLFtcIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTVcIixcImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTZcIl0sW1wiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OVwiLFwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5XCJdLFtcIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2RcIixcIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWZcIl0sW1wiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZlwiLFwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YVwiXSxbXCI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiXCIsXCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjdcIl0sW1wiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOVwiLFwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzM1wiXSxbXCI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjNcIixcIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWFcIl0sW1wiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NFwiLFwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNlwiXSxbXCJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwXCIsXCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3XCJdLFtcIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWJcIixcIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2VcIl0sW1wiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0N1wiLFwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNlwiXSxbXCJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxXCIsXCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2XCJdLFtcIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjBcIixcIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDBcIl0sW1wiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNVwiLFwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxXCJdLFtcIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMThcIixcIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4M1wiXSxbXCJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4XCIsXCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1XCJdLFtcIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWJcIixcIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGJcIl0sW1wiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZlwiLFwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxN1wiXSxbXCI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzXCIsXCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4XCJdLFtcIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmFcIixcImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2FcIl0sW1wiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NVwiLFwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNlwiXSxbXCI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhXCIsXCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2XCJdLFtcIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2VcIixcImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmVcIl0sW1wiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOFwiLFwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZFwiXSxbXCI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjXCIsXCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyXCJdLFtcIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTlcIixcImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2VcIl0sW1wiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYlwiLFwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzN1wiXSxbXCIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhXCIsXCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExXCJdLFtcImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWZcIixcIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTRcIl0sW1wiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMFwiLFwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NVwiXSxbXCI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0XCIsXCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkXCJdLFtcIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWNcIixcImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGRcIl0sW1wiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MFwiLFwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOVwiXSxbXCJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwXCIsXCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDZcIl0sW1wiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliM1wiLFwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NFwiXSxbXCIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmXCIsXCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWVcIl0sW1wiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2M1wiLFwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMVwiXSxbXCJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4XCIsXCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiXCJdLFtcIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmZcIixcIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjFcIl0sW1wiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNVwiLFwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNlwiXSxbXCJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2XCIsXCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlXCJdLFtcIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjVcIixcIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGRcIl0sW1wiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OVwiLFwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkY1wiXSxbXCI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTFcIixcImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjRcIl0sW1wiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNVwiLFwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyY1wiXSxbXCJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1XCIsXCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiXCJdLFtcImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTdcIixcIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxM1wiXSxbXCI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxXCIsXCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTRcIl0sW1wiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNVwiLFwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NVwiXSxbXCIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2XCIsXCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjXCJdLFtcIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNlwiLFwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNFwiXSxbXCI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlXCIsXCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlXCJdLFtcIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTRcIixcIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNlwiXSxbXCI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxXCIsXCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExXCJdLFtcIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTFcIixcImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YlwiXSxbXCJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyXCIsXCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyXCJdLFtcIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNVwiLFwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzY1wiXSxbXCJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiXCIsXCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzXCJdLFtcImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDRcIixcIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGRcIl0sW1wiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZlwiLFwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMFwiXSxbXCJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OVwiLFwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNFwiXSxbXCI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2XCIsXCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2XCJdLFtcIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODRcIixcIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTRcIl0sW1wiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YVwiLFwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1N1wiXSxbXCJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwXCIsXCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzXCJdLFtcImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTdcIixcIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTZcIl0sW1wiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzXCIsXCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4XCJdLFtcImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWZcIixcIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZlwiXSxbXCIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4XCIsXCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4XCJdLFtcImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmFcIixcIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGFcIl0sW1wiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMVwiLFwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNFwiXSxbXCI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyXCIsXCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3XCJdLFtcIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWFcIixcImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjdcIl0sW1wiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNlwiLFwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZFwiXSxbXCJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2XCIsXCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhXCJdLFtcImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGVcIixcIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTRcIl0sW1wiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNFwiLFwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3N1wiXSxbXCJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhXCIsXCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3XCJdLFtcIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTlcIixcImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTBcIl0sW1wiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZlwiLFwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNVwiXSxbXCJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjXCIsXCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlXCJdLFtcIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDJcIixcImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjFcIl0sW1wiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YVwiLFwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMlwiXSxbXCJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwXCIsXCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzXCJdLFtcImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGRcIixcIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDhcIl0sW1wiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMVwiLFwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OFwiXSxbXCI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzXCIsXCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzVcIl0sW1wiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MlwiLFwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZFwiXSxbXCI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzXCIsXCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjXCJdLFtcIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDBcIixcIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMFwiXSxbXCIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4XCIsXCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjXCJdLFtcImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjdcIixcImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTRcIl0sW1wiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOFwiLFwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZlwiXSxbXCI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlXCIsXCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5XCJdLFtcIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2RcIixcImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNlwiXSxbXCI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiXCIsXCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1XCJdLFtcImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGZcIixcImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODdcIl0sW1wiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNlwiLFwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YlwiXSxbXCJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3XCIsXCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjXCJdLFtcIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGFcIixcIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2NcIl0sW1wiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyY1wiLFwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZlwiXSxbXCJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyXCIsXCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhXCJdLFtcImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmJcIixcImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDZcIl0sW1wiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NVwiLFwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZlwiXSxbXCI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3XCIsXCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzXCJdLFtcIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTlcIixcImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDhcIl0sW1wiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhM1wiLFwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOFwiXSxbXCI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3XCIsXCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzNcIl0sW1wiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NlwiLFwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjM1wiXSxbXCI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4XCIsXCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4XCJdLFtcIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjFcIixcIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzFcIl0sW1wiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MFwiLFwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOVwiXV1cbn19fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuc2xpY2UoKTtpZighdClyZXR1cm5bXTt2YXIgcj1bXTtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT0wfHRbbl07cmV0dXJuIHJ9aWYoZSl7aWYoXCJoZXhcIj09PWUpe3Q9dC5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLFwiXCIpLHQubGVuZ3RoJTIhPT0wJiYodD1cIjBcIit0KTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTIpci5wdXNoKHBhcnNlSW50KHRbbl0rdFtuKzFdLDE2KSl9fWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXQuY2hhckNvZGVBdChuKSxvPWk+PjgsYT0yNTUmaTtvP3IucHVzaChvLGEpOnIucHVzaChhKX1yZXR1cm4gcn1mdW5jdGlvbiBpKHQpe3JldHVybiAxPT09dC5sZW5ndGg/XCIwXCIrdDp0fWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVwiXCIscj0wO3I8dC5sZW5ndGg7cisrKWUrPWkodFtyXS50b1N0cmluZygxNikpO3JldHVybiBlfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9W10sbj0xPDxlKzEsaT10LmNsb25lKCk7aS5jbXBuKDEpPj0wOyl7dmFyIG87aWYoaS5pc09kZCgpKXt2YXIgYT1pLmFuZGxuKG4tMSk7bz1hPihuPj4xKS0xPyhuPj4xKS1hOmEsaS5pc3VibihvKX1lbHNlIG89MDtyLnB1c2gobyk7Zm9yKHZhciBmPTAhPT1pLmNtcG4oMCkmJjA9PT1pLmFuZGxuKG4tMSk/ZSsxOjEscz0xO3M8ZjtzKyspci5wdXNoKDApO2kuaXVzaHJuKGYpfXJldHVybiByfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1bW10sW11dO3Q9dC5jbG9uZSgpLGU9ZS5jbG9uZSgpO2Zvcih2YXIgbj0wLGk9MDt0LmNtcG4oLW4pPjB8fGUuY21wbigtaSk+MDspe3ZhciBvPXQuYW5kbG4oMykrbiYzLGE9ZS5hbmRsbigzKStpJjM7Mz09PW8mJihvPS0xKSwzPT09YSYmKGE9LTEpO3ZhciBmO2lmKDA9PT0oMSZvKSlmPTA7ZWxzZXt2YXIgcz10LmFuZGxuKDcpK24mNztmPTMhPT1zJiY1IT09c3x8MiE9PWE/bzotb31yWzBdLnB1c2goZik7dmFyIHU7aWYoMD09PSgxJmEpKXU9MDtlbHNle3ZhciBzPWUuYW5kbG4oNykraSY3O3U9MyE9PXMmJjUhPT1zfHwyIT09bz9hOi1hfXJbMV0ucHVzaCh1KSwyKm49PT1mKzEmJihuPTEtbiksMippPT09dSsxJiYoaT0xLWkpLHQuaXVzaHJuKDEpLGUuaXVzaHJuKDEpfXJldHVybiByfWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuPVwiX1wiK2U7dC5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tuXT90aGlzW25dOnRoaXNbbl09ci5jYWxsKHRoaXMpfX1mdW5jdGlvbiB1KHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P2MudG9BcnJheSh0LFwiaGV4XCIpOnR9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbmV3IGQodCxcImhleFwiLFwibGVcIil9dmFyIGM9ZSxkPXIoMTgpO2MuYXNzZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX0sYy50b0FycmF5PW4sYy56ZXJvMj1pLGMudG9IZXg9byxjLmVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVyblwiaGV4XCI9PT1lP28odCk6dH0sYy5nZXROQUY9YSxjLmdldEpTRj1mLGMuY2FjaGVkUHJvcGVydHk9cyxjLnBhcnNlQnl0ZXM9dSxjLmludEZyb21MRT1ofSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLnJhbmQ9dH12YXIgaTtpZih0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGl8fChpPW5ldyBuKG51bGwpKSxpLmdlbmVyYXRlKHQpfSx0LmV4cG9ydHMuUmFuZD1uLG4ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYW5kKHQpfSxcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXdpbmRvdy5jcnlwdG8mJndpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlfTp3aW5kb3cubXNDcnlwdG8mJndpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSksZX06bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQgeWV0XCIpfTtlbHNlIHRyeXt2YXIgbz1yKDYwOSk7bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8ucmFuZG9tQnl0ZXModCl9fWNhdGNoKHQpe24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheSh0KSxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBlfX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49XCJiaWdcIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfXZhciBpPXIoNDkpLG89aS51dGlscyxhPW8uYXNzZXJ0O2UuQmxvY2tIYXNoPW4sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYodD1vLnRvQXJyYXkodCxlKSx0aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZy5jb25jYXQodCk6dGhpcy5wZW5kaW5nPXQsdGhpcy5wZW5kaW5nVG90YWwrPXQubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dD10aGlzLnBlbmRpbmc7dmFyIHI9dC5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz10LnNsaWNlKHQubGVuZ3RoLXIsdC5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHQ9by5qb2luMzIodCwwLHQubGVuZ3RoLXIsdGhpcy5lbmRpYW4pO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodCxuLG4rdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLGEobnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHQpfSxuLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wZW5kaW5nVG90YWwsZT10aGlzLl9kZWx0YTgscj1lLSh0K3RoaXMucGFkTGVuZ3RoKSVlLG49bmV3IEFycmF5KHIrdGhpcy5wYWRMZW5ndGgpO25bMF09MTI4O2Zvcih2YXIgaT0xO2k8cjtpKyspbltpXT0wO2lmKHQ8PD0zLFwiYmlnXCI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBvPTg7bzx0aGlzLnBhZExlbmd0aDtvKyspbltpKytdPTA7bltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPXQ+Pj4yNCYyNTUsbltpKytdPXQ+Pj4xNiYyNTUsbltpKytdPXQ+Pj44JjI1NSxuW2krK109MjU1JnR9ZWxzZXtuW2krK109MjU1JnQsbltpKytdPXQ+Pj44JjI1NSxuW2krK109dD4+PjE2JjI1NSxuW2krK109dD4+PjI0JjI1NSxuW2krK109MCxuW2krK109MCxuW2krK109MCxuW2krK109MDtmb3IodmFyIG89ODtvPHRoaXMucGFkTGVuZ3RoO28rKyluW2krK109MH1yZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHRoaXMuSGFzaD10LHRoaXMuYmxvY2tTaXplPXQuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPXQub3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdm9pZCB0aGlzLl9pbml0KG8udG9BcnJheShlLHIpKSk6bmV3IG4odCxlLHIpfXZhciBpPXIoNDkpLG89aS51dGlscyxhPW8uYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQpe3QubGVuZ3RoPnRoaXMuYmxvY2tTaXplJiYodD0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHQpLmRpZ2VzdCgpKSxhKHQubGVuZ3RoPD10aGlzLmJsb2NrU2l6ZSk7Zm9yKHZhciBlPXQubGVuZ3RoO2U8dGhpcy5ibG9ja1NpemU7ZSsrKXQucHVzaCgwKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdXj01NDt0aGlzLmlubmVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodCk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh0KX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHQsZSksdGhpc30sbi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhsLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdm9pZCh0aGlzLmVuZGlhbj1cImxpdHRsZVwiKSk6bmV3IG59ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm4gdDw9MTU/ZV5yXm46dDw9MzE/ZSZyfH5lJm46dDw9NDc/KGV8fnIpXm46dDw9NjM/ZSZufHImfm46ZV4ocnx+bil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDw9MTU/MDp0PD0zMT8xNTE4NTAwMjQ5OnQ8PTQ3PzE4NTk3NzUzOTM6dDw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4fWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQ8PTE1PzEzNTI4Mjk5MjY6dDw9MzE/MTU0ODYwMzY4NDp0PD00Nz8xODM2MDcyNjkxOnQ8PTYzPzIwNTM5OTQyMTc6MH12YXIgZj1yKDQ5KSxzPWYudXRpbHMsdT1zLnJvdGwzMixoPXMuc3VtMzIsYz1zLnN1bTMyXzMsZD1zLnN1bTMyXzQsbD1mLmNvbW1vbi5CbG9ja0hhc2g7cy5pbmhlcml0cyhuLGwpLGUucmlwZW1kMTYwPW4sbi5ibG9ja1NpemU9NTEyLG4ub3V0U2l6ZT0xNjAsbi5obWFjU3RyZW5ndGg9MTkyLG4ucGFkTGVuZ3RoPTY0LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5oWzBdLG49dGhpcy5oWzFdLGY9dGhpcy5oWzJdLHM9dGhpcy5oWzNdLGw9dGhpcy5oWzRdLG09cixnPW4sdz1mLF89cyxNPWwsUz0wO1M8ODA7UysrKXt2YXIgRT1oKHUoZChyLGkoUyxuLGYscyksdFtwW1NdK2VdLG8oUykpLHZbU10pLGwpO3I9bCxsPXMscz11KGYsMTApLGY9bixuPUUsRT1oKHUoZChtLGkoNzktUyxnLHcsXyksdFtiW1NdK2VdLGEoUykpLHlbU10pLE0pLG09TSxNPV8sXz11KHcsMTApLHc9ZyxnPUV9RT1jKHRoaXMuaFsxXSxmLF8pLHRoaXMuaFsxXT1jKHRoaXMuaFsyXSxzLE0pLHRoaXMuaFsyXT1jKHRoaXMuaFszXSxsLG0pLHRoaXMuaFszXT1jKHRoaXMuaFs0XSxyLGcpLHRoaXMuaFs0XT1jKHRoaXMuaFswXSxuLHcpLHRoaXMuaFswXT1FfSxuLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P3MudG9IZXgzMih0aGlzLmgsXCJsaXR0bGVcIik6cy5zcGxpdDMyKHRoaXMuaCxcImxpdHRsZVwiKX07dmFyIHA9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sYj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSx2PVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSx5PVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KFguY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9WSx2b2lkKHRoaXMuVz1uZXcgQXJyYXkoNjQpKSk6bmV3IG59ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT8obi5jYWxsKHRoaXMpLHZvaWQodGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XSkpOm5ldyBpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG8/KFguY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1XLHZvaWQodGhpcy5XPW5ldyBBcnJheSgxNjApKSk6bmV3IG99ZnVuY3Rpb24gYSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYT8oby5jYWxsKHRoaXMpLHZvaWQodGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XSkpOm5ldyBhfWZ1bmN0aW9uIGYoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGY/KFguY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx2b2lkKHRoaXMuVz1uZXcgQXJyYXkoODApKSk6bmV3IGZ9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHQmZV5+dCZyfWZ1bmN0aW9uIHUodCxlLHIpe3JldHVybiB0JmVedCZyXmUmcn1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4gdF5lXnJ9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gUih0LDIpXlIodCwxMyleUih0LDIyKX1mdW5jdGlvbiBkKHQpe3JldHVybiBSKHQsNileUih0LDExKV5SKHQsMjUpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIFIodCw3KV5SKHQsMTgpXnQ+Pj4zfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFIodCwxNyleUih0LDE5KV50Pj4+MTB9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gMD09PXQ/cyhlLHIsbik6MT09PXR8fDM9PT10P2goZSxyLG4pOjI9PT10P3UoZSxyLG4pOnZvaWQgMH1mdW5jdGlvbiB2KHQsZSxyLG4saSxvKXt2YXIgYT10JnJefnQmaTtyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiB5KHQsZSxyLG4saSxvKXt2YXIgYT1lJm5efmUmbztyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiBtKHQsZSxyLG4saSxvKXt2YXIgYT10JnJedCZpXnImaTtyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiBnKHQsZSxyLG4saSxvKXt2YXIgYT1lJm5eZSZvXm4mbztyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9Tih0LGUsMjgpLG49TihlLHQsMiksaT1OKGUsdCw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1MKHQsZSwyOCksbj1MKGUsdCwyKSxpPUwoZSx0LDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gTSh0LGUpe3ZhciByPU4odCxlLDE0KSxuPU4odCxlLDE4KSxpPU4oZSx0LDkpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gUyh0LGUpe3ZhciByPUwodCxlLDE0KSxuPUwodCxlLDE4KSxpPUwoZSx0LDkpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gRSh0LGUpe3ZhciByPU4odCxlLDEpLG49Tih0LGUsOCksaT1VKHQsZSw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj1MKHQsZSwxKSxuPUwodCxlLDgpLGk9eih0LGUsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBrKHQsZSl7dmFyIHI9Tih0LGUsMTkpLG49TihlLHQsMjkpLGk9VSh0LGUsNiksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiB4KHQsZSl7dmFyIHI9TCh0LGUsMTkpLG49TChlLHQsMjkpLGk9eih0LGUsNiksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb312YXIgST1yKDQ5KSxCPUkudXRpbHMsTz1CLmFzc2VydCxSPUIucm90cjMyLFA9Qi5yb3RsMzIsVD1CLnN1bTMyLGo9Qi5zdW0zMl80LEM9Qi5zdW0zMl81LE49Qi5yb3RyNjRfaGksTD1CLnJvdHI2NF9sbyxVPUIuc2hyNjRfaGksej1CLnNocjY0X2xvLEQ9Qi5zdW02NCxxPUIuc3VtNjRfaGksRj1CLnN1bTY0X2xvLEs9Qi5zdW02NF80X2hpLEc9Qi5zdW02NF80X2xvLFY9Qi5zdW02NF81X2hpLEg9Qi5zdW02NF81X2xvLFg9SS5jb21tb24uQmxvY2tIYXNoLFk9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sVz1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLFo9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO0IuaW5oZXJpdHMobixYKSxlLnNoYTI1Nj1uLG4uYmxvY2tTaXplPTUxMixuLm91dFNpemU9MjU2LG4uaG1hY1N0cmVuZ3RoPTE5MixuLnBhZExlbmd0aD02NCxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuVyxuPTA7bjwxNjtuKyspcltuXT10W2Urbl07Zm9yKDtuPHIubGVuZ3RoO24rKylyW25dPWoocChyW24tMl0pLHJbbi03XSxsKHJbbi0xNV0pLHJbbi0xNl0pO3ZhciBpPXRoaXMuaFswXSxvPXRoaXMuaFsxXSxhPXRoaXMuaFsyXSxmPXRoaXMuaFszXSxoPXRoaXMuaFs0XSxiPXRoaXMuaFs1XSx2PXRoaXMuaFs2XSx5PXRoaXMuaFs3XTtPKHRoaXMuay5sZW5ndGg9PT1yLmxlbmd0aCk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBtPUMoeSxkKGgpLHMoaCxiLHYpLHRoaXMua1tuXSxyW25dKSxnPVQoYyhpKSx1KGksbyxhKSk7eT12LHY9YixiPWgsaD1UKGYsbSksZj1hLGE9byxvPWksaT1UKG0sZyl9dGhpcy5oWzBdPVQodGhpcy5oWzBdLGkpLHRoaXMuaFsxXT1UKHRoaXMuaFsxXSxvKSx0aGlzLmhbMl09VCh0aGlzLmhbMl0sYSksdGhpcy5oWzNdPVQodGhpcy5oWzNdLGYpLHRoaXMuaFs0XT1UKHRoaXMuaFs0XSxoKSx0aGlzLmhbNV09VCh0aGlzLmhbNV0sYiksdGhpcy5oWzZdPVQodGhpcy5oWzZdLHYpLHRoaXMuaFs3XT1UKHRoaXMuaFs3XSx5KX0sbi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9LEIuaW5oZXJpdHMoaSxuKSxlLnNoYTIyND1pLGkuYmxvY2tTaXplPTUxMixpLm91dFNpemU9MjI0LGkuaG1hY1N0cmVuZ3RoPTE5MixpLnBhZExlbmd0aD02NCxpLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksXCJiaWdcIil9LEIuaW5oZXJpdHMobyxYKSxlLnNoYTUxMj1vLG8uYmxvY2tTaXplPTEwMjQsby5vdXRTaXplPTUxMixvLmhtYWNTdHJlbmd0aD0xOTIsby5wYWRMZW5ndGg9MTI4LG8ucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDMyO24rKylyW25dPXRbZStuXTtmb3IoO248ci5sZW5ndGg7bis9Mil7dmFyIGk9ayhyW24tNF0scltuLTNdKSxvPXgocltuLTRdLHJbbi0zXSksYT1yW24tMTRdLGY9cltuLTEzXSxzPUUocltuLTMwXSxyW24tMjldKSx1PUEocltuLTMwXSxyW24tMjldKSxoPXJbbi0zMl0sYz1yW24tMzFdO3Jbbl09SyhpLG8sYSxmLHMsdSxoLGMpLHJbbisxXT1HKGksbyxhLGYscyx1LGgsYyl9fSxvLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcHJlcGFyZUJsb2NrKHQsZSk7dmFyIHI9dGhpcy5XLG49dGhpcy5oWzBdLGk9dGhpcy5oWzFdLG89dGhpcy5oWzJdLGE9dGhpcy5oWzNdLGY9dGhpcy5oWzRdLHM9dGhpcy5oWzVdLHU9dGhpcy5oWzZdLGg9dGhpcy5oWzddLGM9dGhpcy5oWzhdLGQ9dGhpcy5oWzldLGw9dGhpcy5oWzEwXSxwPXRoaXMuaFsxMV0sYj10aGlzLmhbMTJdLEU9dGhpcy5oWzEzXSxBPXRoaXMuaFsxNF0saz10aGlzLmhbMTVdO08odGhpcy5rLmxlbmd0aD09PXIubGVuZ3RoKTtmb3IodmFyIHg9MDt4PHIubGVuZ3RoO3grPTIpe3ZhciBJPUEsQj1rLFI9TShjLGQpLFA9UyhjLGQpLFQ9dihjLGQsbCxwLGIsRSksaj15KGMsZCxsLHAsYixFKSxDPXRoaXMua1t4XSxOPXRoaXMua1t4KzFdLEw9clt4XSxVPXJbeCsxXSx6PVYoSSxCLFIsUCxULGosQyxOLEwsVSksSz1IKEksQixSLFAsVCxqLEMsTixMLFUpLEk9dyhuLGkpLEI9XyhuLGkpLFI9bShuLGksbyxhLGYscyksUD1nKG4saSxvLGEsZixzKSxHPXEoSSxCLFIsUCksWD1GKEksQixSLFApO0E9YixrPUUsYj1sLEU9cCxsPWMscD1kLGM9cSh1LGgseixLKSxkPUYoaCxoLHosSyksdT1mLGg9cyxmPW8scz1hLG89bixhPWksbj1xKHosSyxHLFgpLGk9Rih6LEssRyxYKX1EKHRoaXMuaCwwLG4saSksRCh0aGlzLmgsMixvLGEpLEQodGhpcy5oLDQsZixzKSxEKHRoaXMuaCw2LHUsaCksRCh0aGlzLmgsOCxjLGQpLEQodGhpcy5oLDEwLGwscCksRCh0aGlzLmgsMTIsYixFKSxEKHRoaXMuaCwxNCxBLGspfSxvLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmgsXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaCxcImJpZ1wiKX0sQi5pbmhlcml0cyhhLG8pLGUuc2hhMzg0PWEsYS5ibG9ja1NpemU9MTAyNCxhLm91dFNpemU9Mzg0LGEuaG1hY1N0cmVuZ3RoPTE5MixhLnBhZExlbmd0aD0xMjgsYS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksXCJiaWdcIil9LEIuaW5oZXJpdHMoZixYKSxlLnNoYTE9ZixmLmJsb2NrU2l6ZT01MTIsZi5vdXRTaXplPTE2MCxmLmhtYWNTdHJlbmd0aD04MCxmLnBhZExlbmd0aD02NCxmLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuVyxuPTA7bjwxNjtuKyspcltuXT10W2Urbl07Zm9yKDtuPHIubGVuZ3RoO24rKylyW25dPVAocltuLTNdXnJbbi04XV5yW24tMTRdXnJbbi0xNl0sMSk7Zm9yKHZhciBpPXRoaXMuaFswXSxvPXRoaXMuaFsxXSxhPXRoaXMuaFsyXSxmPXRoaXMuaFszXSxzPXRoaXMuaFs0XSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciB1PX5+KG4vMjApLGg9QyhQKGksNSksYih1LG8sYSxmKSxzLHJbbl0sWlt1XSk7cz1mLGY9YSxhPVAobywzMCksbz1pLGk9aH10aGlzLmhbMF09VCh0aGlzLmhbMF0saSksdGhpcy5oWzFdPVQodGhpcy5oWzFdLG8pLHRoaXMuaFsyXT1UKHRoaXMuaFsyXSxhKSx0aGlzLmhbM109VCh0aGlzLmhbM10sZiksdGhpcy5oWzRdPVQodGhpcy5oWzRdLHMpfSxmLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmgsXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaCxcImJpZ1wiKX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5zbGljZSgpO2lmKCF0KXJldHVybltdO3ZhciByPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KWlmKGUpe2lmKFwiaGV4XCI9PT1lKXt0PXQucmVwbGFjZSgvW15hLXowLTldKy9naSxcIlwiKSx0Lmxlbmd0aCUyIT09MCYmKHQ9XCIwXCIrdCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0yKXIucHVzaChwYXJzZUludCh0W25dK3RbbisxXSwxNikpfX1lbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10LmNoYXJDb2RlQXQobiksbz1pPj44LGE9MjU1Jmk7bz9yLnB1c2gobyxhKTpyLnB1c2goYSl9ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylyW25dPTB8dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyllKz1mKHRbcl0udG9TdHJpbmcoMTYpKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQ+Pj4yNHx0Pj4+OCY2NTI4MHx0PDw4JjE2NzExNjgwfCgyNTUmdCk8PDI0O3JldHVybiBlPj4+MH1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVwiXCIsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO1wibGl0dGxlXCI9PT1lJiYoaT1vKGkpKSxyKz1zKGkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQpe3JldHVybiAxPT09dC5sZW5ndGg/XCIwXCIrdDp0fWZ1bmN0aW9uIHModCl7cmV0dXJuIDc9PT10Lmxlbmd0aD9cIjBcIit0OjY9PT10Lmxlbmd0aD9cIjAwXCIrdDo1PT09dC5sZW5ndGg/XCIwMDBcIit0OjQ9PT10Lmxlbmd0aD9cIjAwMDBcIit0OjM9PT10Lmxlbmd0aD9cIjAwMDAwXCIrdDoyPT09dC5sZW5ndGg/XCIwMDAwMDBcIit0OjE9PT10Lmxlbmd0aD9cIjAwMDAwMDBcIit0OnR9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT1yLWU7eShpJTQ9PT0wKTtmb3IodmFyIG89bmV3IEFycmF5KGkvNCksYT0wLGY9ZTthPG8ubGVuZ3RoO2ErKyxmKz00KXt2YXIgcztzPVwiYmlnXCI9PT1uP3RbZl08PDI0fHRbZisxXTw8MTZ8dFtmKzJdPDw4fHRbZiszXTp0W2YrM108PDI0fHRbZisyXTw8MTZ8dFtmKzFdPDw4fHRbZl0sb1thXT1zPj4+MH1yZXR1cm4gb31mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSg0KnQubGVuZ3RoKSxuPTAsaT0wO248dC5sZW5ndGg7bisrLGkrPTQpe3ZhciBvPXRbbl07XCJiaWdcIj09PWU/KHJbaV09bz4+PjI0LHJbaSsxXT1vPj4+MTYmMjU1LHJbaSsyXT1vPj4+OCYyNTUscltpKzNdPTI1NSZvKToocltpKzNdPW8+Pj4yNCxyW2krMl09bz4+PjE2JjI1NSxyW2krMV09bz4+PjgmMjU1LHJbaV09MjU1Jm8pfXJldHVybiByfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD4+PmV8dDw8MzItZX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ8PGV8dD4+PjMyLWV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0K2U+Pj4wfWZ1bmN0aW9uIHAodCxlLHIpe3JldHVybiB0K2Urcj4+PjB9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gdCtlK3Irbj4+PjB9ZnVuY3Rpb24gdih0LGUscixuLGkpe3JldHVybiB0K2UrcituK2k+Pj4wfWZ1bmN0aW9uIHkodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfWZ1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk9dFtlXSxvPXRbZSsxXSxhPW4rbz4+PjAsZj0oYTxuPzE6MCkrcitpO3RbZV09Zj4+PjAsdFtlKzFdPWF9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1lK24+Pj4wLG89KGk8ZT8xOjApK3QrcjtyZXR1cm4gbz4+PjB9ZnVuY3Rpb24gdyh0LGUscixuKXt2YXIgaT1lK247cmV0dXJuIGk+Pj4wfWZ1bmN0aW9uIF8odCxlLHIsbixpLG8sYSxmKXt2YXIgcz0wLHU9ZTt1PXUrbj4+PjAscys9dTxlPzE6MCx1PXUrbz4+PjAscys9dTxvPzE6MCx1PXUrZj4+PjAscys9dTxmPzE6MDt2YXIgaD10K3IraSthK3M7cmV0dXJuIGg+Pj4wfWZ1bmN0aW9uIE0odCxlLHIsbixpLG8sYSxmKXt2YXIgcz1lK24rbytmO3JldHVybiBzPj4+MH1mdW5jdGlvbiBTKHQsZSxyLG4saSxvLGEsZixzLHUpe3ZhciBoPTAsYz1lO2M9YytuPj4+MCxoKz1jPGU/MTowLGM9YytvPj4+MCxoKz1jPG8/MTowLGM9YytmPj4+MCxoKz1jPGY/MTowLGM9Yyt1Pj4+MCxoKz1jPHU/MTowO3ZhciBkPXQrcitpK2ErcytoO3JldHVybiBkPj4+MH1mdW5jdGlvbiBFKHQsZSxyLG4saSxvLGEsZixzLHUpe3ZhciBoPWUrbitvK2YrdTtyZXR1cm4gaD4+PjB9ZnVuY3Rpb24gQSh0LGUscil7dmFyIG49ZTw8MzItcnx0Pj4+cjtyZXR1cm4gbj4+PjB9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49dDw8MzItcnxlPj4+cjtyZXR1cm4gbj4+PjB9ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIHQ+Pj5yfWZ1bmN0aW9uIEkodCxlLHIpe3ZhciBuPXQ8PDMyLXJ8ZT4+PnI7cmV0dXJuIG4+Pj4wfXZhciBCPWUsTz1yKDIpO0IudG9BcnJheT1uLEIudG9IZXg9aSxCLmh0b25sPW8sQi50b0hleDMyPWEsQi56ZXJvMj1mLEIuemVybzg9cyxCLmpvaW4zMj11LEIuc3BsaXQzMj1oLEIucm90cjMyPWMsQi5yb3RsMzI9ZCxCLnN1bTMyPWwsQi5zdW0zMl8zPXAsQi5zdW0zMl80PWIsQi5zdW0zMl81PXYsQi5hc3NlcnQ9eSxCLmluaGVyaXRzPU8sZS5zdW02ND1tLGUuc3VtNjRfaGk9ZyxlLnN1bTY0X2xvPXcsZS5zdW02NF80X2hpPV8sZS5zdW02NF80X2xvPU0sZS5zdW02NF81X2hpPVMsZS5zdW02NF81X2xvPUUsZS5yb3RyNjRfaGk9QSxlLnJvdHI2NF9sbz1rLGUuc2hyNjRfaGk9eCxlLnNocjY0X2xvPUl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEwMCksaT1uLmRlZmluZShcIlJTQVByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcIm1vZHVsdXNcIikuaW50KCksdGhpcy5rZXkoXCJwdWJsaWNFeHBvbmVudFwiKS5pbnQoKSx0aGlzLmtleShcInByaXZhdGVFeHBvbmVudFwiKS5pbnQoKSx0aGlzLmtleShcInByaW1lMVwiKS5pbnQoKSx0aGlzLmtleShcInByaW1lMlwiKS5pbnQoKSx0aGlzLmtleShcImV4cG9uZW50MVwiKS5pbnQoKSx0aGlzLmtleShcImV4cG9uZW50MlwiKS5pbnQoKSx0aGlzLmtleShcImNvZWZmaWNpZW50XCIpLmludCgpKX0pO2UuUlNBUHJpdmF0ZUtleT1pO3ZhciBvPW4uZGVmaW5lKFwiUlNBUHVibGljS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcIm1vZHVsdXNcIikuaW50KCksdGhpcy5rZXkoXCJwdWJsaWNFeHBvbmVudFwiKS5pbnQoKSl9KTtlLlJTQVB1YmxpY0tleT1vO3ZhciBhPW4uZGVmaW5lKFwiU3ViamVjdFB1YmxpY0tleUluZm9cIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnVzZShmKSx0aGlzLmtleShcInN1YmplY3RQdWJsaWNLZXlcIikuYml0c3RyKCkpfSk7ZS5QdWJsaWNLZXk9YTt2YXIgZj1uLmRlZmluZShcIkFsZ29yaXRobUlkZW50aWZpZXJcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLm9iamlkKCksdGhpcy5rZXkoXCJub25lXCIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleShcImN1cnZlXCIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleShcInBhcmFtc1wiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJwXCIpLmludCgpLHRoaXMua2V5KFwicVwiKS5pbnQoKSx0aGlzLmtleShcImdcIikuaW50KCkpLm9wdGlvbmFsKCkpfSkscz1uLmRlZmluZShcIlByaXZhdGVLZXlJbmZvXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJhbGdvcml0aG1cIikudXNlKGYpLHRoaXMua2V5KFwic3ViamVjdFByaXZhdGVLZXlcIikub2N0c3RyKCkpfSk7ZS5Qcml2YXRlS2V5PXM7dmFyIHU9bi5kZWZpbmUoXCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mb1wiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikuc2VxKCkub2JqKHRoaXMua2V5KFwiaWRcIikub2JqaWQoKSx0aGlzLmtleShcImRlY3J5cHRcIikuc2VxKCkub2JqKHRoaXMua2V5KFwia2RlXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImlkXCIpLm9iamlkKCksdGhpcy5rZXkoXCJrZGVwYXJhbXNcIikuc2VxKCkub2JqKHRoaXMua2V5KFwic2FsdFwiKS5vY3RzdHIoKSx0aGlzLmtleShcIml0ZXJzXCIpLmludCgpKSksdGhpcy5rZXkoXCJjaXBoZXJcIikuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb1wiKS5vYmppZCgpLHRoaXMua2V5KFwiaXZcIikub2N0c3RyKCkpKSksdGhpcy5rZXkoXCJzdWJqZWN0UHJpdmF0ZUtleVwiKS5vY3RzdHIoKSl9KTtlLkVuY3J5cHRlZFByaXZhdGVLZXk9dTt2YXIgaD1uLmRlZmluZShcIkRTQVByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcInBcIikuaW50KCksdGhpcy5rZXkoXCJxXCIpLmludCgpLHRoaXMua2V5KFwiZ1wiKS5pbnQoKSx0aGlzLmtleShcInB1Yl9rZXlcIikuaW50KCksdGhpcy5rZXkoXCJwcml2X2tleVwiKS5pbnQoKSl9KTtlLkRTQVByaXZhdGVLZXk9aCxlLkRTQXBhcmFtPW4uZGVmaW5lKFwiRFNBcGFyYW1cIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgYz1uLmRlZmluZShcIkVDUHJpdmF0ZUtleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwicHJpdmF0ZUtleVwiKS5vY3RzdHIoKSx0aGlzLmtleShcInBhcmFtZXRlcnNcIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoZCksdGhpcy5rZXkoXCJwdWJsaWNLZXlcIikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtlLkVDUHJpdmF0ZUtleT1jO3ZhciBkPW4uZGVmaW5lKFwiRUNQYXJhbWV0ZXJzXCIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pO2Uuc2lnbmF0dXJlPW4uZGVmaW5lKFwic2lnbmF0dXJlXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInJcIikuaW50KCksdGhpcy5rZXkoXCJzXCIpLmludCgpKX0pfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe3ZhciBuPS9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEXFxyP1xcbkRFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylcXHI/XFxuXFxyP1xcbihbMC05QS16XFxuXFxyXFwrXFwvXFw9XSspXFxyP1xcbi9tLGk9L14tLS0tLUJFR0lOICguKikgS0VZLS0tLS1cXHI/XFxuL20sbz0vXi0tLS0tQkVHSU4gKC4qKSBLRVktLS0tLVxccj9cXG4oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxccj9cXG4tLS0tLUVORCBcXDEgS0VZLS0tLS0kL20sYT1yKDE0OCksZj1yKDIxOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7dmFyIHMsdT10LnRvU3RyaW5nKCksaD11Lm1hdGNoKG4pO2lmKGgpe3ZhciBjPVwiYWVzXCIraFsxXSxkPW5ldyBlKGhbMl0sXCJoZXhcIiksbD1uZXcgZShoWzNdLnJlcGxhY2UoL1xccj9cXG4vZyxcIlwiKSxcImJhc2U2NFwiKSxwPWEocixkLnNsaWNlKDAsOCkscGFyc2VJbnQoaFsxXSwxMCkpLmtleSxiPVtdLHY9Zi5jcmVhdGVEZWNpcGhlcml2KGMscCxkKTtiLnB1c2godi51cGRhdGUobCkpLGIucHVzaCh2LmZpbmFsKCkpLHM9ZS5jb25jYXQoYil9ZWxzZXt2YXIgeT11Lm1hdGNoKG8pO3M9bmV3IGUoeVsyXS5yZXBsYWNlKC9cXHI/XFxuL2csXCJcIiksXCJiYXNlNjRcIil9dmFyIG09dS5tYXRjaChpKVsxXStcIiBLRVlcIjtyZXR1cm57dGFnOm0sZGF0YTpzfX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3RoaXMubmFtZT10LHRoaXMuYm9keT1lLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX12YXIgaT1yKDEwMCksbz1yKDIpLGE9ZTthLmRlZmluZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgbih0LGUpfSxuLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9cigyNTEpLnJ1bkluVGhpc0NvbnRleHQoXCIoZnVuY3Rpb24gXCIrdGhpcy5uYW1lK1wiKGVudGl0eSkge1xcbiAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XFxufSlcIil9Y2F0Y2godCl7ZT1mdW5jdGlvbih0KXt0aGlzLl9pbml0TmFtZWQodCl9fXJldHVybiBvKGUsdCksZS5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihlKXt0LmNhbGwodGhpcyxlKX0sbmV3IGUodGhpcyl9LG4ucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PXR8fFwiZGVyXCIsdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuZGVjb2RlcnNbdF09dGhpcy5fY3JlYXRlTmFtZWQoaS5kZWNvZGVyc1t0XSkpLHRoaXMuZGVjb2RlcnNbdF19LG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoZSkuZGVjb2RlKHQscil9LG4ucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PXR8fFwiZGVyXCIsdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuZW5jb2RlcnNbdF09dGhpcy5fY3JlYXRlTmFtZWQoaS5lbmNvZGVyc1t0XSkpLHRoaXMuZW5jb2RlcnNbdF19LG4ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoZSkuZW5jb2RlKHQscil9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXt9O3RoaXMuX2Jhc2VTdGF0ZT1yLHIuZW5jPXQsci5wYXJlbnQ9ZXx8bnVsbCxyLmNoaWxkcmVuPW51bGwsci50YWc9bnVsbCxyLmFyZ3M9bnVsbCxyLnJldmVyc2VBcmdzPW51bGwsci5jaG9pY2U9bnVsbCxyLm9wdGlvbmFsPSExLHIuYW55PSExLHIub2JqPSExLHIudXNlPW51bGwsci51c2VEZWNvZGVyPW51bGwsci5rZXk9bnVsbCxyLmRlZmF1bHQ9bnVsbCxyLmV4cGxpY2l0PW51bGwsci5pbXBsaWNpdD1udWxsLHIuY29udGFpbnM9bnVsbCxyLnBhcmVudHx8KHIuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX12YXIgaT1yKDY4KS5SZXBvcnRlcixvPXIoNjgpLkVuY29kZXJCdWZmZXIsYT1yKDY4KS5EZWNvZGVyQnVmZmVyLGY9cig1MzgpLHM9W1wic2VxXCIsXCJzZXFvZlwiLFwic2V0XCIsXCJzZXRvZlwiLFwib2JqaWRcIixcImJvb2xcIixcImdlbnRpbWVcIixcInV0Y3RpbWVcIixcIm51bGxfXCIsXCJlbnVtXCIsXCJpbnRcIixcImJpdHN0clwiLFwiYm1wc3RyXCIsXCJjaGFyc3RyXCIsXCJnZW5zdHJcIixcImdyYXBoc3RyXCIsXCJpYTVzdHJcIixcImlzbzY0NnN0clwiLFwibnVtc3RyXCIsXCJvY3RzdHJcIixcInByaW50c3RyXCIsXCJ0NjFzdHJcIixcInVuaXN0clwiLFwidXRmOHN0clwiLFwidmlkZW9zdHJcIl0sdT1bXCJrZXlcIixcIm9ialwiLFwidXNlXCIsXCJvcHRpb25hbFwiLFwiZXhwbGljaXRcIixcImltcGxpY2l0XCIsXCJkZWZcIixcImNob2ljZVwiLFwiYW55XCIsXCJjb250YWluc1wiXS5jb25jYXQocyksaD1bXCJfcGVla1RhZ1wiLFwiX2RlY29kZVRhZ1wiLFwiX3VzZVwiLFwiX2RlY29kZVN0clwiLFwiX2RlY29kZU9iamlkXCIsXCJfZGVjb2RlVGltZVwiLFwiX2RlY29kZU51bGxcIixcIl9kZWNvZGVJbnRcIixcIl9kZWNvZGVCb29sXCIsXCJfZGVjb2RlTGlzdFwiLFwiX2VuY29kZUNvbXBvc2l0ZVwiLFwiX2VuY29kZVN0clwiLFwiX2VuY29kZU9iamlkXCIsXCJfZW5jb2RlVGltZVwiLFwiX2VuY29kZU51bGxcIixcIl9lbmNvZGVJbnRcIixcIl9lbmNvZGVCb29sXCJdO3QuZXhwb3J0cz1uO3ZhciBjPVtcImVuY1wiLFwicGFyZW50XCIsXCJjaGlsZHJlblwiLFwidGFnXCIsXCJhcmdzXCIsXCJyZXZlcnNlQXJnc1wiLFwiY2hvaWNlXCIsXCJvcHRpb25hbFwiLFwiYW55XCIsXCJvYmpcIixcInVzZVwiLFwiYWx0ZXJlZFVzZVwiLFwia2V5XCIsXCJkZWZhdWx0XCIsXCJleHBsaWNpdFwiLFwiaW1wbGljaXRcIixcImNvbnRhaW5zXCJdO24ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlLGU9e307Yy5mb3JFYWNoKGZ1bmN0aW9uKHIpe2Vbcl09dFtyXX0pO3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUucGFyZW50KTtyZXR1cm4gci5fYmFzZVN0YXRlPWUscn0sbi5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7dS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RoaXNbZV09ZnVuY3Rpb24oKXt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gdC5jaGlsZHJlbi5wdXNoKHIpLHJbZV0uYXBwbHkocixhcmd1bWVudHMpfX0sdGhpcyl9LG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtmKG51bGw9PT1lLnBhcmVudCksdC5jYWxsKHRoaXMpLGUuY2hpbGRyZW49ZS5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxmLmVxdWFsKGUuY2hpbGRyZW4ubGVuZ3RoLDEsXCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGRcIil9LG4ucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSxyPXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7dD10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PXIubGVuZ3RoJiYoZihudWxsPT09ZS5jaGlsZHJlbiksZS5jaGlsZHJlbj1yLHIuZm9yRWFjaChmdW5jdGlvbih0KXt0Ll9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09dC5sZW5ndGgmJihmKG51bGw9PT1lLmFyZ3MpLGUuYXJncz10LGUucmV2ZXJzZUFyZ3M9dC5tYXAoZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHR8fHQuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIHQ7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cj09KDB8cikmJihyfD0wKTt2YXIgbj10W3JdO2Vbbl09cn0pLGV9KSl9LGguZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTt0aHJvdyBuZXcgRXJyb3IodCtcIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiBcIitlLmVuYyl9fSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gZihudWxsPT09ZS50YWcpLGUudGFnPXQsdGhpcy5fdXNlQXJncyhyKSx0aGlzfX0pLG4ucHJvdG90eXBlLnVzZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUudXNlKSxlLnVzZT10LHRoaXN9LG4ucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0Lm9wdGlvbmFsPSEwLHRoaXN9LG4ucHJvdG90eXBlLmRlZj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuZGVmYXVsdCksZS5kZWZhdWx0PXQsZS5vcHRpb25hbD0hMCx0aGlzfSxuLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuZXhwbGljaXQmJm51bGw9PT1lLmltcGxpY2l0KSxlLmV4cGxpY2l0PXQsdGhpc30sbi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmV4cGxpY2l0JiZudWxsPT09ZS5pbXBsaWNpdCksZS5pbXBsaWNpdD10LHRoaXN9LG4ucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZSxlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHQub2JqPSEwLDAhPT1lLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhlKSx0aGlzfSxuLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmtleSksZS5rZXk9dCx0aGlzfSxuLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHQuYW55PSEwLHRoaXN9LG4ucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuY2hvaWNlKSxlLmNob2ljZT10LHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLHRoaXN9LG4ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS51c2UpLGUuY29udGFpbnM9dCx0aGlzfSxuLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1yLnBhcmVudClyZXR1cm4gdC53cmFwUmVzdWx0KHIuY2hpbGRyZW5bMF0uX2RlY29kZSh0LGUpKTt2YXIgbj1yLmRlZmF1bHQsaT0hMCxvPW51bGw7aWYobnVsbCE9PXIua2V5JiYobz10LmVudGVyS2V5KHIua2V5KSksci5vcHRpb25hbCl7dmFyIGY9bnVsbDtpZihudWxsIT09ci5leHBsaWNpdD9mPXIuZXhwbGljaXQ6bnVsbCE9PXIuaW1wbGljaXQ/Zj1yLmltcGxpY2l0Om51bGwhPT1yLnRhZyYmKGY9ci50YWcpLG51bGwhPT1mfHxyLmFueSl7aWYoaT10aGlzLl9wZWVrVGFnKHQsZixyLmFueSksdC5pc0Vycm9yKGkpKXJldHVybiBpfWVsc2V7dmFyIHM9dC5zYXZlKCk7dHJ5e251bGw9PT1yLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHIudGFnLHQsZSk6dGhpcy5fZGVjb2RlQ2hvaWNlKHQsZSksaT0hMH1jYXRjaCh0KXtpPSExfXQucmVzdG9yZShzKX19dmFyIHU7aWYoci5vYmomJmkmJih1PXQuZW50ZXJPYmplY3QoKSksaSl7aWYobnVsbCE9PXIuZXhwbGljaXQpe3ZhciBoPXRoaXMuX2RlY29kZVRhZyh0LHIuZXhwbGljaXQpO2lmKHQuaXNFcnJvcihoKSlyZXR1cm4gaDt0PWh9dmFyIGM9dC5vZmZzZXQ7aWYobnVsbD09PXIudXNlJiZudWxsPT09ci5jaG9pY2Upe2lmKHIuYW55KXZhciBzPXQuc2F2ZSgpO3ZhciBkPXRoaXMuX2RlY29kZVRhZyh0LG51bGwhPT1yLmltcGxpY2l0P3IuaW1wbGljaXQ6ci50YWcsci5hbnkpO2lmKHQuaXNFcnJvcihkKSlyZXR1cm4gZDtyLmFueT9uPXQucmF3KHMpOnQ9ZH1pZihlJiZlLnRyYWNrJiZudWxsIT09ci50YWcmJmUudHJhY2sodC5wYXRoKCksYyx0Lmxlbmd0aCxcInRhZ2dlZFwiKSxlJiZlLnRyYWNrJiZudWxsIT09ci50YWcmJmUudHJhY2sodC5wYXRoKCksdC5vZmZzZXQsdC5sZW5ndGgsXCJjb250ZW50XCIpLG49ci5hbnk/bjpudWxsPT09ci5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhyLnRhZyx0LGUpOnRoaXMuX2RlY29kZUNob2ljZSh0LGUpLHQuaXNFcnJvcihuKSlyZXR1cm4gbjtpZihyLmFueXx8bnVsbCE9PXIuY2hvaWNlfHxudWxsPT09ci5jaGlsZHJlbnx8ci5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuX2RlY29kZSh0LGUpfSksci5jb250YWlucyYmKFwib2N0c3RyXCI9PT1yLnRhZ3x8XCJiaXRzdHJcIj09PXIudGFnKSl7dmFyIGw9bmV3IGEobik7bj10aGlzLl9nZXRVc2Uoci5jb250YWlucyx0Ll9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShsLGUpfX1yZXR1cm4gci5vYmomJmkmJihuPXQubGVhdmVPYmplY3QodSkpLG51bGw9PT1yLmtleXx8bnVsbD09PW4mJmkhPT0hMD9udWxsIT09byYmdC5leGl0S2V5KG8pOnQubGVhdmVLZXkobyxyLmtleSxuKSxufSxuLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO3JldHVyblwic2VxXCI9PT10fHxcInNldFwiPT09dD9udWxsOlwic2Vxb2ZcIj09PXR8fFwic2V0b2ZcIj09PXQ/dGhpcy5fZGVjb2RlTGlzdChlLHQsbi5hcmdzWzBdLHIpOi9zdHIkLy50ZXN0KHQpP3RoaXMuX2RlY29kZVN0cihlLHQscik6XCJvYmppZFwiPT09dCYmbi5hcmdzP3RoaXMuX2RlY29kZU9iamlkKGUsbi5hcmdzWzBdLG4uYXJnc1sxXSxyKTpcIm9iamlkXCI9PT10P3RoaXMuX2RlY29kZU9iamlkKGUsbnVsbCxudWxsLHIpOlwiZ2VudGltZVwiPT09dHx8XCJ1dGN0aW1lXCI9PT10P3RoaXMuX2RlY29kZVRpbWUoZSx0LHIpOlwibnVsbF9cIj09PXQ/dGhpcy5fZGVjb2RlTnVsbChlLHIpOlwiYm9vbFwiPT09dD90aGlzLl9kZWNvZGVCb29sKGUscik6XCJpbnRcIj09PXR8fFwiZW51bVwiPT09dD90aGlzLl9kZWNvZGVJbnQoZSxuLmFyZ3MmJm4uYXJnc1swXSxyKTpudWxsIT09bi51c2U/dGhpcy5fZ2V0VXNlKG4udXNlLGUuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGUscik6ZS5lcnJvcihcInVua25vd24gdGFnOiBcIit0KX0sbi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gci51c2VEZWNvZGVyPXRoaXMuX3VzZSh0LGUpLGYobnVsbD09PXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksci51c2VEZWNvZGVyPXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLHIuaW1wbGljaXQhPT1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKHIudXNlRGVjb2Rlcj1yLnVzZURlY29kZXIuY2xvbmUoKSxyLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1yLmltcGxpY2l0KSxyLnVzZURlY29kZXJ9LG4ucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGUsbj1udWxsLGk9ITE7cmV0dXJuIE9iamVjdC5rZXlzKHIuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKG8pe3ZhciBhPXQuc2F2ZSgpLGY9ci5jaG9pY2Vbb107dHJ5e3ZhciBzPWYuX2RlY29kZSh0LGUpO2lmKHQuaXNFcnJvcihzKSlyZXR1cm4hMTtuPXt0eXBlOm8sdmFsdWU6c30saT0hMH1jYXRjaChlKXtyZXR1cm4gdC5yZXN0b3JlKGEpLCExfXJldHVybiEwfSx0aGlzKSxpP246dC5lcnJvcihcIkNob2ljZSBub3QgbWF0Y2hlZFwiKX0sbi5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsdGhpcy5yZXBvcnRlcil9LG4ucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09bi5kZWZhdWx0fHxuLmRlZmF1bHQhPT10KXt2YXIgaT10aGlzLl9lbmNvZGVWYWx1ZSh0LGUscik7aWYodm9pZCAwIT09aSYmIXRoaXMuX3NraXBEZWZhdWx0KGksZSxyKSlyZXR1cm4gaX19LG4ucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1uLnBhcmVudClyZXR1cm4gbi5jaGlsZHJlblswXS5fZW5jb2RlKHQsZXx8bmV3IGkpO3ZhciBvPW51bGw7aWYodGhpcy5yZXBvcnRlcj1lLG4ub3B0aW9uYWwmJnZvaWQgMD09PXQpe2lmKG51bGw9PT1uLmRlZmF1bHQpcmV0dXJuO3Q9bi5kZWZhdWx0fXZhciBhPW51bGwsZj0hMTtpZihuLmFueSlvPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk7ZWxzZSBpZihuLmNob2ljZSlvPXRoaXMuX2VuY29kZUNob2ljZSh0LGUpO2Vsc2UgaWYobi5jb250YWlucylhPXRoaXMuX2dldFVzZShuLmNvbnRhaW5zLHIpLl9lbmNvZGUodCxlKSxmPSEwO2Vsc2UgaWYobi5jaGlsZHJlbilhPW4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHIpe2lmKFwibnVsbF9cIj09PXIuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHIuX2VuY29kZShudWxsLGUsdCk7aWYobnVsbD09PXIuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIGUuZXJyb3IoXCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleVwiKTt2YXIgbj1lLmVudGVyS2V5KHIuX2Jhc2VTdGF0ZS5rZXkpO2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0KXJldHVybiBlLmVycm9yKFwiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0XCIpO3ZhciBpPXIuX2VuY29kZSh0W3IuX2Jhc2VTdGF0ZS5rZXldLGUsdCk7cmV0dXJuIGUubGVhdmVLZXkobiksaX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGEpO2Vsc2UgaWYoXCJzZXFvZlwiPT09bi50YWd8fFwic2V0b2ZcIj09PW4udGFnKXtpZighbi5hcmdzfHwxIT09bi5hcmdzLmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIlRvbyBtYW55IGFyZ3MgZm9yIDogXCIrbi50YWcpO2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmVycm9yKFwic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheVwiKTt2YXIgcz10aGlzLmNsb25lKCk7cy5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdGhpcy5fZ2V0VXNlKG4uYXJnc1swXSx0KS5fZW5jb2RlKHIsZSl9LHMpKX1lbHNlIG51bGwhPT1uLnVzZT9vPXRoaXMuX2dldFVzZShuLnVzZSxyKS5fZW5jb2RlKHQsZSk6KGE9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKG4udGFnLHQpLGY9ITApO3ZhciBvO2lmKCFuLmFueSYmbnVsbD09PW4uY2hvaWNlKXt2YXIgdT1udWxsIT09bi5pbXBsaWNpdD9uLmltcGxpY2l0Om4udGFnLGg9bnVsbD09PW4uaW1wbGljaXQ/XCJ1bml2ZXJzYWxcIjpcImNvbnRleHRcIjtudWxsPT09dT9udWxsPT09bi51c2UmJmUuZXJyb3IoXCJUYWcgY291bGQgYmUgb21taXRlZCBvbmx5IGZvciAudXNlKClcIik6bnVsbD09PW4udXNlJiYobz10aGlzLl9lbmNvZGVDb21wb3NpdGUodSxmLGgsYSkpfXJldHVybiBudWxsIT09bi5leHBsaWNpdCYmKG89dGhpcy5fZW5jb2RlQ29tcG9zaXRlKG4uZXhwbGljaXQsITEsXCJjb250ZXh0XCIsbykpLG99LG4ucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGUsbj1yLmNob2ljZVt0LnR5cGVdO3JldHVybiBufHxmKCExLHQudHlwZStcIiBub3QgZm91bmQgaW4gXCIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoci5jaG9pY2UpKSksbi5fZW5jb2RlKHQudmFsdWUsZSl9LG4ucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QodCkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihlLHQpO2lmKFwib2JqaWRcIj09PXQmJnIuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZSxyLnJldmVyc2VBcmdzWzBdLHIuYXJnc1sxXSk7aWYoXCJvYmppZFwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZSxudWxsLG51bGwpO2lmKFwiZ2VudGltZVwiPT09dHx8XCJ1dGN0aW1lXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKGUsdCk7aWYoXCJudWxsX1wiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKFwiaW50XCI9PT10fHxcImVudW1cIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZUludChlLHIuYXJncyYmci5yZXZlcnNlQXJnc1swXSk7aWYoXCJib29sXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVCb29sKGUpO3Rocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHRhZzogXCIrdCl9LG4ucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbih0KXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KHQpfSxuLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbih0KXtyZXR1cm4vXltBLVphLXowLTkgJ1xcKFxcKVxcKyxcXC1cXC5cXC86PVxcP10qJC8udGVzdCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczp0fHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIGkodCxlKXt0aGlzLnBhdGg9dCx0aGlzLnJldGhyb3coZSl9dmFyIG89cigyKTtlLlJlcG9ydGVyPW4sbi5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl9LG4ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6dC5vYmoscGF0aExlbjp0LnBhdGgubGVuZ3RofX0sbi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO2Uub2JqPXQub2JqLGUucGF0aD1lLnBhdGguc2xpY2UoMCx0LnBhdGhMZW4pfSxuLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2godCl9LG4ucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtlLnBhdGg9ZS5wYXRoLnNsaWNlKDAsdC0xKX0sbi5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHQpLG51bGwhPT1uLm9iaiYmKG4ub2JqW2VdPXIpfSxuLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKFwiL1wiKX0sbi5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlLGU9dC5vYmo7cmV0dXJuIHQub2JqPXt9LGV9LG4ucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGUscj1lLm9iajtyZXR1cm4gZS5vYmo9dCxyfSxuLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX3JlcG9ydGVyU3RhdGUsbj10IGluc3RhbmNlb2YgaTtpZihlPW4/dDpuZXcgaShyLnBhdGgubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiW1wiK0pTT04uc3RyaW5naWZ5KHQpK1wiXVwifSkuam9pbihcIlwiKSx0Lm1lc3NhZ2V8fHQsdC5zdGFjayksIXIub3B0aW9ucy5wYXJ0aWFsKXRocm93IGU7cmV0dXJuIG58fHIuZXJyb3JzLnB1c2goZSksZX0sbi5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBlLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcih0KT9udWxsOnQsZXJyb3JzOmUuZXJyb3JzfTp0fSxvKGksRXJyb3IpLGkucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24odCl7aWYodGhpcy5tZXNzYWdlPXQrXCIgYXQ6IFwiKyh0aGlzLnBhdGh8fFwiKHNoYWxsb3cpXCIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGkpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaCh0KXt0aGlzLnN0YWNrPXQuc3RhY2t9cmV0dXJuIHRoaXN9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMTUpO2UudGFnQ2xhc3M9ezA6XCJ1bml2ZXJzYWxcIiwxOlwiYXBwbGljYXRpb25cIiwyOlwiY29udGV4dFwiLDM6XCJwcml2YXRlXCJ9LGUudGFnQ2xhc3NCeU5hbWU9bi5fcmV2ZXJzZShlLnRhZ0NsYXNzKSxlLnRhZz17MDpcImVuZFwiLDE6XCJib29sXCIsMjpcImludFwiLDM6XCJiaXRzdHJcIiw0Olwib2N0c3RyXCIsNTpcIm51bGxfXCIsNjpcIm9iamlkXCIsNzpcIm9iakRlc2NcIiw4OlwiZXh0ZXJuYWxcIiw5OlwicmVhbFwiLDEwOlwiZW51bVwiLDExOlwiZW1iZWRcIiwxMjpcInV0ZjhzdHJcIiwxMzpcInJlbGF0aXZlT2lkXCIsMTY6XCJzZXFcIiwxNzpcInNldFwiLDE4OlwibnVtc3RyXCIsMTk6XCJwcmludHN0clwiLDIwOlwidDYxc3RyXCIsXG4yMTpcInZpZGVvc3RyXCIsMjI6XCJpYTVzdHJcIiwyMzpcInV0Y3RpbWVcIiwyNDpcImdlbnRpbWVcIiwyNTpcImdyYXBoc3RyXCIsMjY6XCJpc282NDZzdHJcIiwyNzpcImdlbnN0clwiLDI4OlwidW5pc3RyXCIsMjk6XCJjaGFyc3RyXCIsMzA6XCJibXBzdHJcIn0sZS50YWdCeU5hbWU9bi5fcmV2ZXJzZShlLnRhZyl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uZGVyPXIoMjE2KSxuLnBlbT1yKDUzNSl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2EuY2FsbCh0aGlzLHQpLHRoaXMuZW5jPVwicGVtXCJ9dmFyIGk9cigyKSxvPXIoMSkuQnVmZmVyLGE9cigyMTYpO2kobixhKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC50b1N0cmluZygpLnNwbGl0KC9bXFxyXFxuXSsvZyksbj1lLmxhYmVsLnRvVXBwZXJDYXNlKCksaT0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC8sZj0tMSxzPS0xLHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGg9clt1XS5tYXRjaChpKTtpZihudWxsIT09aCYmaFsyXT09PW4pe2lmKGYhPT0tMSl7aWYoXCJFTkRcIiE9PWhbMV0pYnJlYWs7cz11O2JyZWFrfWlmKFwiQkVHSU5cIiE9PWhbMV0pYnJlYWs7Zj11fX1pZihmPT09LTF8fHM9PT0tMSl0aHJvdyBuZXcgRXJyb3IoXCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiBcIituKTt2YXIgYz1yLnNsaWNlKGYrMSxzKS5qb2luKFwiXCIpO2MucmVwbGFjZSgvW15hLXowLTlcXCtcXC89XSsvZ2ksXCJcIik7dmFyIGQ9bmV3IG8oYyxcImJhc2U2NFwiKTtyZXR1cm4gYS5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxkLGUpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5kZXI9cigyMTcpLG4ucGVtPXIoNTM3KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7by5jYWxsKHRoaXMsdCksdGhpcy5lbmM9XCJwZW1cIn12YXIgaT1yKDIpLG89cigyMTcpO2kobixvKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9by5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyx0KSxuPXIudG9TdHJpbmcoXCJiYXNlNjRcIiksaT1bXCItLS0tLUJFR0lOIFwiK2UubGFiZWwrXCItLS0tLVwiXSxhPTA7YTxuLmxlbmd0aDthKz02NClpLnB1c2gobi5zbGljZShhLGErNjQpKTtyZXR1cm4gaS5wdXNoKFwiLS0tLS1FTkQgXCIrZS5sYWJlbCtcIi0tLS0tXCIpLGkuam9pbihcIlxcblwiKX19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9dC5leHBvcnRzPXIsci5lcXVhbD1mdW5jdGlvbih0LGUscil7aWYodCE9ZSl0aHJvdyBuZXcgRXJyb3Iocnx8XCJBc3NlcnRpb24gZmFpbGVkOiBcIit0K1wiICE9IFwiK2UpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHUuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IHMuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dFsxNV0scj0tMTsrK3I8ZTspaWYodFtyKygxNi1lKV0hPT1lKXRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBkZWNyeXB0IGRhdGFcIik7aWYoMTYhPT1lKXJldHVybiB0LnNsaWNlKDAsMTYtZSl9ZnVuY3Rpb24gYShlLHIsaSl7dmFyIG89Y1tlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKGJbby5tb2RlXSxyLGksITApOlwiYXV0aFwiPT09by50eXBlP25ldyBsKGJbby5tb2RlXSxyLGksITApOm5ldyBuKGJbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1jW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1wKGUsITEsci5rZXksci5pdik7cmV0dXJuIGEodCxuLmtleSxuLml2KX12YXIgcz1yKDEwMSksdT1yKDEwMyksaD1yKDIpLGM9cigxNDcpLGQ9cigyMjYpLGw9cigyMTgpLHA9cigxNDgpO2gobix1KSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspbj10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxyKSxpLnB1c2gobik7cmV0dXJuIHQuY29uY2F0KGkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBvKHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHQpKTtpZih0KXRocm93IG5ldyBFcnJvcihcImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aFwiKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhdCx0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZT10LmNvbmNhdChbdGhpcy5jYWNoZSxlXSl9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZTtpZih0KXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gZT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gZT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZTtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX07dmFyIGI9e0VDQjpyKDIyNCksQ0JDOnIoMjIwKSxDRkI6cigyMjEpLENGQjg6cigyMjMpLENGQjE6cigyMjIpLE9GQjpyKDIyNSksQ1RSOnIoMTAyKSxHQ006cigxMDIpfTtlLmNyZWF0ZURlY2lwaGVyPWYsZS5jcmVhdGVEZWNpcGhlcml2PWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG8pe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8ocy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBpLHRoaXMuX2NpcGhlcj1uZXcgZi5BRVMociksdGhpcy5fcHJldj1uZXcgdChvLmxlbmd0aCksby5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9ZSx2b2lkKHRoaXMuX2F1dG9wYWRkaW5nPSEwKSk6bmV3IG4oZSxyLG8pfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dm9pZCh0aGlzLmNhY2hlPW5ldyB0KFwiXCIpKTpuZXcgaX1mdW5jdGlvbiBvKGUscixpKXt2YXIgbz1oW2UudG9Mb3dlckNhc2UoKV07aWYoIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bmV3IHQoaSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgdChyKSksci5sZW5ndGghPT1vLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGggXCIrci5sZW5ndGgpO2lmKGkubGVuZ3RoIT09by5pdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBpdiBsZW5ndGggXCIraS5sZW5ndGgpO3JldHVyblwic3RyZWFtXCI9PT1vLnR5cGU/bmV3IGQocFtvLm1vZGVdLHIsaSk6XCJhdXRoXCI9PT1vLnR5cGU/bmV3IGwocFtvLm1vZGVdLHIsaSk6bmV3IG4ocFtvLm1vZGVdLHIsaSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWhbdC50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBuPWMoZSwhMSxyLmtleSxyLml2KTtyZXR1cm4gbyh0LG4ua2V5LG4uaXYpfXZhciBmPXIoMTAxKSxzPXIoMTAzKSx1PXIoMiksaD1yKDE0NyksYz1yKDE0OCksZD1yKDIyNiksbD1yKDIxOCk7dShuLHMpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgcixuLGk9W107cj10aGlzLl9jYWNoZS5nZXQoKTspbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxyKSxpLnB1c2gobik7cmV0dXJuIHQuY29uY2F0KGkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiB0PXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQpLHRoaXMuX2NpcGhlci5zY3J1YigpLHQ7aWYoXCIxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMFwiIT09dC50b1N0cmluZyhcImhleFwiKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXQsdGhpc30saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9dC5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIHQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0fXJldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgZT0xNi10aGlzLmNhY2hlLmxlbmd0aCxyPW5ldyB0KGUpLG49LTE7KytuPGU7KXIud3JpdGVVSW50OChlLG4pO3ZhciBpPXQuY29uY2F0KFt0aGlzLmNhY2hlLHJdKTtyZXR1cm4gaX07dmFyIHA9e0VDQjpyKDIyNCksQ0JDOnIoMjIwKSxDRkI6cigyMjEpLENGQjg6cigyMjMpLENGQjE6cigyMjIpLE9GQjpyKDIyNSksQ1RSOnIoMTAyKSxHQ006cigxMDIpfTtlLmNyZWF0ZUNpcGhlcml2PW8sZS5jcmVhdGVDaXBoZXI9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0KXt0aGlzLmg9dCx0aGlzLnN0YXRlPW5ldyBlKDE2KSx0aGlzLnN0YXRlLmZpbGwoMCksdGhpcy5jYWNoZT1uZXcgZShcIlwiKX1mdW5jdGlvbiBuKHQpe3JldHVyblt0LnJlYWRVSW50MzJCRSgwKSx0LnJlYWRVSW50MzJCRSg0KSx0LnJlYWRVSW50MzJCRSg4KSx0LnJlYWRVSW50MzJCRSgxMildfWZ1bmN0aW9uIGkodCl7dD10Lm1hcChvKTt2YXIgcj1uZXcgZSgxNik7cmV0dXJuIHIud3JpdGVVSW50MzJCRSh0WzBdLDApLHIud3JpdGVVSW50MzJCRSh0WzFdLDQpLHIud3JpdGVVSW50MzJCRSh0WzJdLDgpLHIud3JpdGVVSW50MzJCRSh0WzNdLDEyKSxyfWZ1bmN0aW9uIG8odCl7dmFyIGUscjtyZXR1cm4gZT10PnN8fHQ8MD8ocj1NYXRoLmFicyh0KSVzLHQ8MD9zLXI6cik6dH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuW3RbMF1eZVswXSx0WzFdXmVbMV0sdFsyXV5lWzJdLHRbM11eZVszXV19dmFyIGY9bmV3IGUoMTYpO2YuZmlsbCgwKSx0LmV4cG9ydHM9cixyLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9LTE7KytlPHQubGVuZ3RoOyl0aGlzLnN0YXRlW2VdXj10W2VdO3RoaXMuX211bHRpcGx5KCl9LHIucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbz1uKHRoaXMuaCksZj1bMCwwLDAsMF0scz0tMTsrK3M8MTI4Oyl7Zm9yKGU9MCE9PSh0aGlzLnN0YXRlW35+KHMvOCldJjE8PDctcyU4KSxlJiYoZj1hKGYsbykpLHI9MCE9PSgxJm9bM10pLHQ9Mzt0PjA7dC0tKW9bdF09b1t0XT4+PjF8KDEmb1t0LTFdKTw8MzE7b1swXT1vWzBdPj4+MSxyJiYob1swXT1vWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9aShmKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuY2FjaGU9ZS5jb25jYXQoW3RoaXMuY2FjaGUsdF0pO2Zvcih2YXIgcjt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KXI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2gocil9LHIucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKGUuY29uY2F0KFt0aGlzLmNhY2hlLGZdLDE2KSksdGhpcy5naGFzaChpKFswLHQsMCxyXSkpLHRoaXMuc3RhdGV9O3ZhciBzPU1hdGgucG93KDIsMzIpfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBhPXYoZSk7aWYoYS5jdXJ2ZSl7aWYoXCJlY2RzYVwiIT09bil0aHJvdyBuZXcgRXJyb3IoXCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlXCIpO3JldHVybiBpKHQsYSl9aWYoXCJkc2FcIj09PWEudHlwZSl7aWYoXCJkc2FcIiE9PW4pdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZVwiKTtyZXR1cm4gbyh0LGEscil9aWYoXCJyc2FcIiE9PW4pdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZVwiKTtmb3IodmFyIGY9YS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxzPVswLDFdO3QubGVuZ3RoK3MubGVuZ3RoKzE8Zjspcy5wdXNoKDI1NSk7cy5wdXNoKDApO2Zvcih2YXIgdT0tMTsrK3U8dC5sZW5ndGg7KXMucHVzaCh0W3VdKTt2YXIgaD1sKHMsYSk7cmV0dXJuIGh9ZnVuY3Rpb24gaSh0LHIpe3ZhciBuPXBbci5jdXJ2ZS5qb2luKFwiLlwiKV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjdXJ2ZSBcIityLmN1cnZlLmpvaW4oXCIuXCIpKTt2YXIgaT1uZXcgbShuKSxvPWkuZ2VuS2V5UGFpcigpO28uX2ltcG9ydFByaXZhdGUoci5wcml2YXRlS2V5KTt2YXIgYT1vLnNpZ24odCk7cmV0dXJuIG5ldyBlKGEudG9ERVIoKSl9ZnVuY3Rpb24gbyh0LGUscil7Zm9yKHZhciBuLGk9ZS5wYXJhbXMucHJpdl9rZXksbz1lLnBhcmFtcy5wLHU9ZS5wYXJhbXMucSxkPWUucGFyYW1zLmcsbD1uZXcgeSgwKSxwPXModCx1KS5tb2QodSksYj0hMSx2PWYoaSx1LHQscik7Yj09PSExOyluPWgodSx2LHIpLGw9YyhkLG4sbyx1KSxiPW4uaW52bSh1KS5pbXVsKHAuYWRkKGkubXVsKGwpKSkubW9kKHUpLGIuY21wbigwKXx8KGI9ITEsbD1uZXcgeSgwKSk7cmV0dXJuIGEobCxiKX1mdW5jdGlvbiBhKHQscil7dD10LnRvQXJyYXkoKSxyPXIudG9BcnJheSgpLDEyOCZ0WzBdJiYodD1bMF0uY29uY2F0KHQpKSwxMjgmclswXSYmKHI9WzBdLmNvbmNhdChyKSk7dmFyIG49dC5sZW5ndGgrci5sZW5ndGgrNCxpPVs0OCxuLDIsdC5sZW5ndGhdO3JldHVybiBpPWkuY29uY2F0KHQsWzIsci5sZW5ndGhdLHIpLG5ldyBlKGkpfWZ1bmN0aW9uIGYodCxyLG4saSl7aWYodD1uZXcgZSh0LnRvQXJyYXkoKSksdC5sZW5ndGg8ci5ieXRlTGVuZ3RoKCkpe3ZhciBvPW5ldyBlKHIuYnl0ZUxlbmd0aCgpLXQubGVuZ3RoKTtvLmZpbGwoMCksdD1lLmNvbmNhdChbbyx0XSl9dmFyIGE9bi5sZW5ndGgsZj11KG4scikscz1uZXcgZShhKTtzLmZpbGwoMSk7dmFyIGg9bmV3IGUoYSk7cmV0dXJuIGguZmlsbCgwKSxoPWQoaSxoKS51cGRhdGUocykudXBkYXRlKG5ldyBlKFswXSkpLnVwZGF0ZSh0KS51cGRhdGUoZikuZGlnZXN0KCkscz1kKGksaCkudXBkYXRlKHMpLmRpZ2VzdCgpLGg9ZChpLGgpLnVwZGF0ZShzKS51cGRhdGUobmV3IGUoWzFdKSkudXBkYXRlKHQpLnVwZGF0ZShmKS5kaWdlc3QoKSxzPWQoaSxoKS51cGRhdGUocykuZGlnZXN0KCkse2s6aCx2OnN9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1uZXcgeSh0KSxuPSh0Lmxlbmd0aDw8MyktZS5iaXRMZW5ndGgoKTtyZXR1cm4gbj4wJiZyLmlzaHJuKG4pLHJ9ZnVuY3Rpb24gdSh0LHIpe3Q9cyh0LHIpLHQ9dC5tb2Qocik7dmFyIG49bmV3IGUodC50b0FycmF5KCkpO2lmKG4ubGVuZ3RoPHIuYnl0ZUxlbmd0aCgpKXt2YXIgaT1uZXcgZShyLmJ5dGVMZW5ndGgoKS1uLmxlbmd0aCk7aS5maWxsKDApLG49ZS5jb25jYXQoW2ksbl0pfXJldHVybiBufWZ1bmN0aW9uIGgodCxyLG4pe3ZhciBpLG87ZG97Zm9yKGk9bmV3IGUoXCJcIik7OCppLmxlbmd0aDx0LmJpdExlbmd0aCgpOylyLnY9ZChuLHIuaykudXBkYXRlKHIudikuZGlnZXN0KCksaT1lLmNvbmNhdChbaSxyLnZdKTtvPXMoaSx0KSxyLms9ZChuLHIuaykudXBkYXRlKHIudikudXBkYXRlKG5ldyBlKFswXSkpLmRpZ2VzdCgpLHIudj1kKG4sci5rKS51cGRhdGUoci52KS5kaWdlc3QoKX13aGlsZShvLmNtcCh0KSE9PS0xKTtyZXR1cm4gb31mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiB0LnRvUmVkKHkubW9udChyKSkucmVkUG93KGUpLmZyb21SZWQoKS5tb2Qobil9dmFyIGQ9cigxNDkpLGw9cig1MDcpLHA9cigyMTIpLGI9cigxOSksdj1yKDIxMykseT1yKDE4KSxtPWIuZWM7dC5leHBvcnRzPW4sdC5leHBvcnRzLmdldEtleT1mLHQuZXhwb3J0cy5tYWtlS2V5PWh9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLG4sYSl7dmFyIGY9dShuKTtpZihcImVjXCI9PT1mLnR5cGUpe2lmKFwiZWNkc2FcIiE9PWEpdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHVibGljIGtleSB0eXBlXCIpO3JldHVybiBpKHQscixmKX1pZihcImRzYVwiPT09Zi50eXBlKXtpZihcImRzYVwiIT09YSl0aHJvdyBuZXcgRXJyb3IoXCJ3cm9uZyBwdWJsaWMga2V5IHR5cGVcIik7cmV0dXJuIG8odCxyLGYpfWlmKFwicnNhXCIhPT1hKXRocm93IG5ldyBFcnJvcihcIndyb25nIHB1YmxpYyBrZXkgdHlwZVwiKTtmb3IodmFyIHM9Zi5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxjPVsxXSxkPTA7ci5sZW5ndGgrYy5sZW5ndGgrMjxzOyljLnB1c2goMjU1KSxkKys7Yy5wdXNoKDApO2Zvcih2YXIgbD0tMTsrK2w8ci5sZW5ndGg7KWMucHVzaChyW2xdKTtjPW5ldyBlKGMpO3ZhciBwPWgubW9udChmLm1vZHVsdXMpO3Q9bmV3IGgodCkudG9SZWQocCksdD10LnJlZFBvdyhuZXcgaChmLnB1YmxpY0V4cG9uZW50KSksdD1uZXcgZSh0LmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciBiPTA7Zm9yKGQ8OCYmKGI9MSkscz1NYXRoLm1pbih0Lmxlbmd0aCxjLmxlbmd0aCksdC5sZW5ndGghPT1jLmxlbmd0aCYmKGI9MSksbD0tMTsrK2w8czspYnw9dFtsXV5jW2xdO3JldHVybiAwPT09Yn1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1mW3IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbihcIi5cIildO2lmKCFuKXRocm93IG5ldyBFcnJvcihcInVua25vd24gY3VydmUgXCIrci5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKFwiLlwiKSk7dmFyIGk9bmV3IGMobiksbz1yLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YTtyZXR1cm4gaS52ZXJpZnkoZSx0LG8pfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPXIuZGF0YS5wLGk9ci5kYXRhLnEsbz1yLmRhdGEuZyxmPXIuZGF0YS5wdWJfa2V5LHM9dS5zaWduYXR1cmUuZGVjb2RlKHQsXCJkZXJcIiksYz1zLnMsZD1zLnI7YShjLGkpLGEoZCxpKTt2YXIgbD1oLm1vbnQobikscD1jLmludm0oaSksYj1vLnRvUmVkKGwpLnJlZFBvdyhuZXcgaChlKS5tdWwocCkubW9kKGkpKS5mcm9tUmVkKCkubXVsKGYudG9SZWQobCkucmVkUG93KGQubXVsKHApLm1vZChpKSkuZnJvbVJlZCgpKS5tb2QobikubW9kKGkpO3JldHVybiFiLmNtcChkKX1mdW5jdGlvbiBhKHQsZSl7aWYodC5jbXBuKDApPD0wKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgc2lnXCIpO2lmKHQuY21wKGUpPj1lKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgc2lnXCIpfXZhciBmPXIoMjEyKSxzPXIoMTkpLHU9cigyMTMpLGg9cigxOCksYz1zLmVjO3QuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3RoaXMuY3VydmVUeXBlPWZbdF0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTp0fSksdGhpcy5jdXJ2ZT1uZXcgby5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIGkodCxyLG4pe0FycmF5LmlzQXJyYXkodCl8fCh0PXQudG9BcnJheSgpKTt2YXIgaT1uZXcgZSh0KTtpZihuJiZpLmxlbmd0aDxuKXt2YXIgbz1uZXcgZShuLWkubGVuZ3RoKTtvLmZpbGwoMCksaT1lLmNvbmNhdChbbyxpXSl9cmV0dXJuIHI/aS50b1N0cmluZyhyKTppfXZhciBvPXIoMjIpLGE9cigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX07dmFyIGY9e3NlY3AyNTZrMTp7bmFtZTpcInNlY3AyNTZrMVwiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZTpcInAyMjRcIixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOlwicDI1NlwiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6XCJwMTkyXCIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZTpcImVkMjU1MTlcIixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6XCJwMzg0XCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOlwicDUyMVwiLGJ5dGVMZW5ndGg6NjZ9fTtmLnAyMjQ9Zi5zZWNwMjI0cjEsZi5wMjU2PWYuc2VjcDI1NnIxPWYucHJpbWUyNTZ2MSxmLnAxOTI9Zi5zZWNwMTkycjE9Zi5wcmltZTE5MnYxLGYucDM4ND1mLnNlY3AzODRyMSxmLnA1MjE9Zi5zZWNwNTIxcjEsbi5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleSh0LGUpfSxuLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKHQscixuKXtyPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpO3ZhciBvPXRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyh0KS5nZXRQdWJsaWMoKSxhPW8ubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKTtyZXR1cm4gaShhLG4sdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LG4ucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMua2V5cy5nZXRQdWJsaWMoXCJjb21wcmVzc2VkXCI9PT1lLCEwKTtyZXR1cm5cImh5YnJpZFwiPT09ZSYmKHJbci5sZW5ndGgtMV0lMj9yWzBdPTc6clswXT02KSxpKHIsdCl9LG4ucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcy5rZXlzLmdldFByaXZhdGUoKSx0KX0sbi5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKHQscil7cmV0dXJuIHI9cnx8XCJ1dGY4XCIsZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxyKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWModCksdGhpc30sbi5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbih0LHIpe3I9cnx8XCJ1dGY4XCIsZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxyKSk7dmFyIG49bmV3IGEodCk7cmV0dXJuIG49bi50b1N0cmluZygxNiksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKG4pLHRoaXN9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnR5cGU9dCx0aGlzLnA9bmV3IG8oZS5wLDE2KSx0aGlzLnJlZD1lLnByaW1lP28ucmVkKGUucHJpbWUpOm8ubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgbygwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IG8oMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBvKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49ZS5uJiZuZXcgbyhlLm4sMTYpLHRoaXMuZz1lLmcmJnRoaXMucG9pbnRGcm9tSlNPTihlLmcsZS5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpO3ZhciByPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFyfHxyLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIGkodCxlKXt0aGlzLmN1cnZlPXQsdGhpcy50eXBlPWUsdGhpcy5wcmVjb21wdXRlZD1udWxsfXZhciBvPXIoMzApLGE9cigyMiksZj1hLnV0aWxzLHM9Zi5nZXROQUYsdT1mLmdldEpTRixoPWYuYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0sbi5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKHQsZSl7aCh0LnByZWNvbXB1dGVkKTt2YXIgcj10Ll9nZXREb3VibGVzKCksbj1zKGUsMSksaT0oMTw8ci5zdGVwKzEpLShyLnN0ZXAlMj09PTA/MjoxKTtpLz0zO2Zvcih2YXIgbz1bXSxhPTA7YTxuLmxlbmd0aDthKz1yLnN0ZXApe2Zvcih2YXIgZj0wLGU9YStyLnN0ZXAtMTtlPj1hO2UtLSlmPShmPDwxKStuW2VdO28ucHVzaChmKX1mb3IodmFyIHU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGM9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGQ9aTtkPjA7ZC0tKXtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGY9b1thXTtmPT09ZD9jPWMubWl4ZWRBZGQoci5wb2ludHNbYV0pOmY9PT0tZCYmKGM9Yy5taXhlZEFkZChyLnBvaW50c1thXS5uZWcoKSkpfXU9dS5hZGQoYyl9cmV0dXJuIHUudG9QKCl9LG4ucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9NCxuPXQuX2dldE5BRlBvaW50cyhyKTtyPW4ud25kO2Zvcih2YXIgaT1uLnBvaW50cyxvPXMoZSxyKSxhPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxmPW8ubGVuZ3RoLTE7Zj49MDtmLS0pe2Zvcih2YXIgZT0wO2Y+PTAmJjA9PT1vW2ZdO2YtLSllKys7aWYoZj49MCYmZSsrLGE9YS5kYmxwKGUpLGY8MClicmVhazt2YXIgdT1vW2ZdO2goMCE9PXUpLGE9XCJhZmZpbmVcIj09PXQudHlwZT91PjA/YS5taXhlZEFkZChpW3UtMT4+MV0pOmEubWl4ZWRBZGQoaVstdS0xPj4xXS5uZWcoKSk6dT4wP2EuYWRkKGlbdS0xPj4xXSk6YS5hZGQoaVstdS0xPj4xXS5uZWcoKSl9cmV0dXJuXCJhZmZpbmVcIj09PXQudHlwZT9hLnRvUCgpOmF9LG4ucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBvPXRoaXMuX3duYWZUMSxhPXRoaXMuX3duYWZUMixmPXRoaXMuX3duYWZUMyxoPTAsYz0wO2M8bjtjKyspe3ZhciBkPWVbY10sbD1kLl9nZXROQUZQb2ludHModCk7b1tjXT1sLnduZCxhW2NdPWwucG9pbnRzfWZvcih2YXIgYz1uLTE7Yz49MTtjLT0yKXt2YXIgcD1jLTEsYj1jO2lmKDE9PT1vW3BdJiYxPT09b1tiXSl7dmFyIHY9W2VbcF0sbnVsbCxudWxsLGVbYl1dOzA9PT1lW3BdLnkuY21wKGVbYl0ueSk/KHZbMV09ZVtwXS5hZGQoZVtiXSksdlsyXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0ubmVnKCkpKTowPT09ZVtwXS55LmNtcChlW2JdLnkucmVkTmVnKCkpPyh2WzFdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXSksdlsyXT1lW3BdLmFkZChlW2JdLm5lZygpKSk6KHZbMV09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdKSx2WzJdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXS5uZWcoKSkpO3ZhciB5PVstMywtMSwtNSwtNywwLDcsNSwxLDNdLG09dShyW3BdLHJbYl0pO2g9TWF0aC5tYXgobVswXS5sZW5ndGgsaCksZltwXT1uZXcgQXJyYXkoaCksZltiXT1uZXcgQXJyYXkoaCk7Zm9yKHZhciBnPTA7ZzxoO2crKyl7dmFyIHc9MHxtWzBdW2ddLF89MHxtWzFdW2ddO2ZbcF1bZ109eVszKih3KzEpKyhfKzEpXSxmW2JdW2ddPTAsYVtwXT12fX1lbHNlIGZbcF09cyhyW3BdLG9bcF0pLGZbYl09cyhyW2JdLG9bYl0pLGg9TWF0aC5tYXgoZltwXS5sZW5ndGgsaCksaD1NYXRoLm1heChmW2JdLmxlbmd0aCxoKX1mb3IodmFyIE09dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLFM9dGhpcy5fd25hZlQ0LGM9aDtjPj0wO2MtLSl7Zm9yKHZhciBFPTA7Yz49MDspe2Zvcih2YXIgQT0hMCxnPTA7ZzxuO2crKylTW2ddPTB8ZltnXVtjXSwwIT09U1tnXSYmKEE9ITEpO2lmKCFBKWJyZWFrO0UrKyxjLS19aWYoYz49MCYmRSsrLE09TS5kYmxwKEUpLGM8MClicmVhaztmb3IodmFyIGc9MDtnPG47ZysrKXt2YXIgZCxrPVNbZ107MCE9PWsmJihrPjA/ZD1hW2ddW2stMT4+MV06azwwJiYoZD1hW2ddWy1rLTE+PjFdLm5lZygpKSxNPVwiYWZmaW5lXCI9PT1kLnR5cGU/TS5taXhlZEFkZChkKTpNLmFkZChkKSl9fWZvcih2YXIgYz0wO2M8bjtjKyspYVtjXT1udWxsO3JldHVybiBpP006TS50b1AoKX0sbi5CYXNlUG9pbnQ9aSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0saS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCxlKXt0PWYudG9BcnJheSh0LGUpO3ZhciByPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT10WzBdfHw2PT09dFswXXx8Nz09PXRbMF0pJiZ0Lmxlbmd0aC0xPT09MipyKXs2PT09dFswXT9oKHRbdC5sZW5ndGgtMV0lMj09PTApOjc9PT10WzBdJiZoKHRbdC5sZW5ndGgtMV0lMj09PTEpO3ZhciBuPXRoaXMucG9pbnQodC5zbGljZSgxLDErciksdC5zbGljZSgxK3IsMSsyKnIpKTtyZXR1cm4gbn1pZigoMj09PXRbMF18fDM9PT10WzBdKSYmdC5sZW5ndGgtMT09PXIpcmV0dXJuIHRoaXMucG9pbnRGcm9tWCh0LnNsaWNlKDEsMStyKSwzPT09dFswXSk7dGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwb2ludCBmb3JtYXRcIil9LGkucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW5jb2RlKHQsITApfSxpLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkscj10aGlzLmdldFgoKS50b0FycmF5KFwiYmVcIixlKTtyZXR1cm4gdD9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQocik6WzRdLmNvbmNhdChyLHRoaXMuZ2V0WSgpLnRvQXJyYXkoXCJiZVwiLGUpKX0saS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYuZW5jb2RlKHRoaXMuX2VuY29kZShlKSx0KX0saS5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBlPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gZS5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLGUuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsdCksZS5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPWUsdGhpc30saS5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIGU9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhZSYmZS5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKHQuYml0TGVuZ3RoKCkrMSkvZS5zdGVwKX0saS5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIHI9W3RoaXNdLG49dGhpcyxpPTA7aTxlO2krPXQpe2Zvcih2YXIgbz0wO288dDtvKyspbj1uLmRibCgpO3IucHVzaChuKX1yZXR1cm57c3RlcDp0LHBvaW50czpyfX0saS5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbih0KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBlPVt0aGlzXSxyPSgxPDx0KS0xLG49MT09PXI/bnVsbDp0aGlzLmRibCgpLGk9MTtpPHI7aSsrKWVbaV09ZVtpLTFdLmFkZChuKTtyZXR1cm57d25kOnQscG9pbnRzOmV9fSxpLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9MDtyPHQ7cisrKWU9ZS5kYmwoKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3RoaXMudHdpc3RlZD0xIT09KDB8dC5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmKDB8dC5hKT09PS0xLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSx1LmNhbGwodGhpcyxcImVkd2FyZHNcIix0KSx0aGlzLmE9bmV3IGYodC5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgZih0LmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IGYodC5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksaCghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09PSgwfHQuYyl9ZnVuY3Rpb24gaSh0LGUscixuLGkpe3UuQmFzZVBvaW50LmNhbGwodGhpcyx0LFwicHJvamVjdGl2ZVwiKSxudWxsPT09ZSYmbnVsbD09PXImJm51bGw9PT1uPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IGYoZSwxNiksdGhpcy55PW5ldyBmKHIsMTYpLHRoaXMuej1uP25ldyBmKG4sMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1pJiZuZXcgZihpLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX12YXIgbz1yKDEwNCksYT1yKDIyKSxmPXIoMzApLHM9cigyKSx1PW8uYmFzZSxoPWEudXRpbHMuYXNzZXJ0O3Mobix1KSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tT25lQT90LnJlZE5lZygpOnRoaXMuYS5yZWRNdWwodCl9LG4ucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9uZUM/dDp0aGlzLmMucmVkTXVsKHQpfSxuLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMucG9pbnQodCxlLHIsbil9LG4ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24odCxlKXt0PW5ldyBmKHQsMTYpLHQucmVkfHwodD10LnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9dC5yZWRTcXIoKSxuPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwocikpLGk9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKHIpKSxvPW4ucmVkTXVsKGkucmVkSW52bSgpKSxhPW8ucmVkU3FydCgpO2lmKDAhPT1hLnJlZFNxcigpLnJlZFN1YihvKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3ZhciBzPWEuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKGUmJiFzfHwhZSYmcykmJihhPWEucmVkTmVnKCkpLHRoaXMucG9pbnQodCxhKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tWT1mdW5jdGlvbih0LGUpe3Q9bmV3IGYodCwxNiksdC5yZWR8fCh0PXQudG9SZWQodGhpcy5yZWQpKTt2YXIgcj10LnJlZFNxcigpLG49ci5yZWRTdWIodGhpcy5vbmUpLGk9ci5yZWRNdWwodGhpcy5kKS5yZWRBZGQodGhpcy5vbmUpLG89bi5yZWRNdWwoaS5yZWRJbnZtKCkpO2lmKDA9PT1vLmNtcCh0aGlzLnplcm8pKXtpZihlKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHQpfXZhciBhPW8ucmVkU3FydCgpO2lmKDAhPT1hLnJlZFNxcigpLnJlZFN1YihvKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3JldHVybiBhLmlzT2RkKCkhPT1lJiYoYT1hLnJlZE5lZygpKSx0aGlzLnBvaW50KGEsdCl9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe2lmKHQuaXNJbmZpbml0eSgpKXJldHVybiEwO3Qubm9ybWFsaXplKCk7dmFyIGU9dC54LnJlZFNxcigpLHI9dC55LnJlZFNxcigpLG49ZS5yZWRNdWwodGhpcy5hKS5yZWRBZGQociksaT10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChlKS5yZWRNdWwocikpKTtyZXR1cm4gMD09PW4uY21wKGkpfSxzKGksdS5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIGkuZnJvbUpTT04odGhpcyx0KX0sbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG5ldyBpKHRoaXMsdCxlLHIsbil9LGkuZnJvbUpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodCxlWzBdLGVbMV0sZVsyXSl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYwPT09dGhpcy55LmNtcCh0aGlzLnopfSxpLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54LnJlZFNxcigpLGU9dGhpcy55LnJlZFNxcigpLHI9dGhpcy56LnJlZFNxcigpO3I9ci5yZWRJQWRkKHIpO3ZhciBuPXRoaXMuY3VydmUuX211bEEodCksaT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1Yih0KS5yZWRJU3ViKGUpLG89bi5yZWRBZGQoZSksYT1vLnJlZFN1YihyKSxmPW4ucmVkU3ViKGUpLHM9aS5yZWRNdWwoYSksdT1vLnJlZE11bChmKSxoPWkucmVkTXVsKGYpLGM9YS5yZWRNdWwobyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocyx1LGMsaCl9LGkucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLGk9dGhpcy54LnJlZFNxcigpLG89dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIGE9dGhpcy5jdXJ2ZS5fbXVsQShpKSxmPWEucmVkQWRkKG8pO2lmKHRoaXMuek9uZSl0PW4ucmVkU3ViKGkpLnJlZFN1YihvKS5yZWRNdWwoZi5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxlPWYucmVkTXVsKGEucmVkU3ViKG8pKSxyPWYucmVkU3FyKCkucmVkU3ViKGYpLnJlZFN1YihmKTtlbHNle3ZhciBzPXRoaXMuei5yZWRTcXIoKSx1PWYucmVkU3ViKHMpLnJlZElTdWIocyk7dD1uLnJlZFN1YihpKS5yZWRJU3ViKG8pLnJlZE11bCh1KSxlPWYucmVkTXVsKGEucmVkU3ViKG8pKSxyPWYucmVkTXVsKHUpfX1lbHNle3ZhciBhPWkucmVkQWRkKG8pLHM9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLmMucmVkTXVsKHRoaXMueikpLnJlZFNxcigpLHU9YS5yZWRTdWIocykucmVkU3ViKHMpO3Q9dGhpcy5jdXJ2ZS5fbXVsQyhuLnJlZElTdWIoYSkpLnJlZE11bCh1KSxlPXRoaXMuY3VydmUuX211bEMoYSkucmVkTXVsKGkucmVkSVN1YihvKSkscj1hLnJlZE11bCh1KX1yZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0LGUscil9LGkucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxpLnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwodC55LnJlZFN1Yih0LngpKSxyPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwodC55LnJlZEFkZCh0LngpKSxuPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKHQudCksaT10aGlzLnoucmVkTXVsKHQuei5yZWRBZGQodC56KSksbz1yLnJlZFN1YihlKSxhPWkucmVkU3ViKG4pLGY9aS5yZWRBZGQobikscz1yLnJlZEFkZChlKSx1PW8ucmVkTXVsKGEpLGg9Zi5yZWRNdWwocyksYz1vLnJlZE11bChzKSxkPWEucmVkTXVsKGYpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHUsaCxkLGMpfSxpLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy56LnJlZE11bCh0LnopLGk9bi5yZWRTcXIoKSxvPXRoaXMueC5yZWRNdWwodC54KSxhPXRoaXMueS5yZWRNdWwodC55KSxmPXRoaXMuY3VydmUuZC5yZWRNdWwobykucmVkTXVsKGEpLHM9aS5yZWRTdWIoZiksdT1pLnJlZEFkZChmKSxoPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwodC54LnJlZEFkZCh0LnkpKS5yZWRJU3ViKG8pLnJlZElTdWIoYSksYz1uLnJlZE11bChzKS5yZWRNdWwoaCk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8oZT1uLnJlZE11bCh1KS5yZWRNdWwoYS5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShvKSkpLHI9cy5yZWRNdWwodSkpOihlPW4ucmVkTXVsKHUpLnJlZE11bChhLnJlZFN1YihvKSkscj10aGlzLmN1cnZlLl9tdWxDKHMpLnJlZE11bCh1KSksdGhpcy5jdXJ2ZS5wb2ludChjLGUscil9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dDp0LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKHQpOnRoaXMuX3Byb2pBZGQodCl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faGFzRG91Ymxlcyh0KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHQpOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx0KX0saS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLGVdLFt0LHJdLDIsITEpfSxpLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLGVdLFt0LHJdLDIsITApfSxpLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodCksdGhpcy55PXRoaXMueS5yZWRNdWwodCksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwodCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30saS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxpLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0saS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8MD09PXRoaXMuZ2V0WCgpLmNtcCh0LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAodC5nZXRZKCkpfSxpLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24odCl7dmFyIGU9dC50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoZSkpcmV0dXJuITA7Zm9yKHZhciByPXQuY2xvbmUoKSxuPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihyLmlhZGQodGhpcy5jdXJ2ZS5uKSxyLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKGUucmVkSUFkZChuKSwwPT09dGhpcy54LmNtcChlKSlyZXR1cm4hMH1yZXR1cm4hMX0saS5wcm90b3R5cGUudG9QPWkucHJvdG90eXBlLm5vcm1hbGl6ZSxpLnByb3RvdHlwZS5taXhlZEFkZD1pLnByb3RvdHlwZS5hZGR9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3MuY2FsbCh0aGlzLFwibW9udFwiLHQpLHRoaXMuYT1uZXcgYSh0LmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IGEodC5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgYSg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBhKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gaSh0LGUscil7cy5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJwcm9qZWN0aXZlXCIpLG51bGw9PT1lJiZudWxsPT09cj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IGEoZSwxNiksdGhpcy56PW5ldyBhKHIsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9dmFyIG89cigxMDQpLGE9cigzMCksZj1yKDIpLHM9by5iYXNlLHU9cigyMiksaD11LnV0aWxzO2YobixzKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lm5vcm1hbGl6ZSgpLngscj1lLnJlZFNxcigpLG49ci5yZWRNdWwoZSkucmVkQWRkKHIucmVkTXVsKHRoaXMuYSkpLnJlZEFkZChlKSxpPW4ucmVkU3FydCgpO3JldHVybiAwPT09aS5yZWRTcXIoKS5jbXAobil9LGYoaSxzLkJhc2VQb2ludCksbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wb2ludChoLnRvQXJyYXkodCxlKSwxKX0sbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodGhpcyx0LGUpfSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCl9LGkucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheShcImJlXCIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LGkuZnJvbUpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodCxlWzBdLGVbMV18fHQub25lKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLngucmVkQWRkKHRoaXMueiksZT10LnJlZFNxcigpLHI9dGhpcy54LnJlZFN1Yih0aGlzLnopLG49ci5yZWRTcXIoKSxpPWUucmVkU3ViKG4pLG89ZS5yZWRNdWwobiksYT1pLnJlZE11bChuLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoaSkpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChvLGEpfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmVcIil9LGkucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLngucmVkQWRkKHRoaXMueiksbj10aGlzLngucmVkU3ViKHRoaXMueiksaT10LngucmVkQWRkKHQueiksbz10LngucmVkU3ViKHQueiksYT1vLnJlZE11bChyKSxmPWkucmVkTXVsKG4pLHM9ZS56LnJlZE11bChhLnJlZEFkZChmKS5yZWRTcXIoKSksdT1lLngucmVkTXVsKGEucmVkSVN1YihmKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocyx1KX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNsb25lKCkscj10aGlzLG49dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLGk9dGhpcyxvPVtdOzAhPT1lLmNtcG4oMCk7ZS5pdXNocm4oMSkpby5wdXNoKGUuYW5kbG4oMSkpO2Zvcih2YXIgYT1vLmxlbmd0aC0xO2E+PTA7YS0tKTA9PT1vW2FdPyhyPXIuZGlmZkFkZChuLGkpLG49bi5kYmwoKSk6KG49ci5kaWZmQWRkKG4saSkscj1yLmRibCgpKTtyZXR1cm4gbn0saS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcCh0LmdldFgoKSl9LGkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtoLmNhbGwodGhpcyxcInNob3J0XCIsdCksdGhpcy5hPW5ldyBzKHQuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgcyh0LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHQpLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIGkodCxlLHIsbil7aC5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJhZmZpbmVcIiksbnVsbD09PWUmJm51bGw9PT1yPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgcyhlLDE2KSx0aGlzLnk9bmV3IHMociwxNiksbiYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBvKHQsZSxyLG4pe2guQmFzZVBvaW50LmNhbGwodGhpcyx0LFwiamFjb2JpYW5cIiksbnVsbD09PWUmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IHMoMCkpOih0aGlzLng9bmV3IHMoZSwxNiksdGhpcy55PW5ldyBzKHIsMTYpLHRoaXMuej1uZXcgcyhuLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfXZhciBhPXIoMTA0KSxmPXIoMjIpLHM9cigzMCksdT1yKDIpLGg9YS5iYXNlLGM9Zi51dGlscy5hc3NlcnQ7dShuLGgpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24odCl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIGUscjtpZih0LmJldGEpZT1uZXcgcyh0LmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBuPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO2U9blswXS5jbXAoblsxXSk8MD9uWzBdOm5bMV0sZT1lLnRvUmVkKHRoaXMucmVkKX1pZih0LmxhbWJkYSlyPW5ldyBzKHQubGFtYmRhLDE2KTtlbHNle3ZhciBpPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKGlbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChlKSk/cj1pWzBdOihyPWlbMV0sYygwPT09dGhpcy5nLm11bChyKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoZSkpKSl9dmFyIG87cmV0dXJuIG89dC5iYXNpcz90LmJhc2lzLm1hcChmdW5jdGlvbih0KXtyZXR1cm57YTpuZXcgcyh0LmEsMTYpLGI6bmV3IHModC5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMocikse2JldGE6ZSxsYW1iZGE6cixiYXNpczpvfX19LG4ucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24odCl7dmFyIGU9dD09PXRoaXMucD90aGlzLnJlZDpzLm1vbnQodCkscj1uZXcgcygyKS50b1JlZChlKS5yZWRJbnZtKCksbj1yLnJlZE5lZygpLGk9bmV3IHMoMykudG9SZWQoZSkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChyKSxvPW4ucmVkQWRkKGkpLmZyb21SZWQoKSxhPW4ucmVkU3ViKGkpLmZyb21SZWQoKTtyZXR1cm5bbyxhXX0sbi5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksbyxhLGYsdSxoLGM9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxkPXQsbD10aGlzLm4uY2xvbmUoKSxwPW5ldyBzKDEpLGI9bmV3IHMoMCksdj1uZXcgcygwKSx5PW5ldyBzKDEpLG09MDswIT09ZC5jbXBuKDApOyl7dmFyIGc9bC5kaXYoZCk7dT1sLnN1YihnLm11bChkKSksaD12LnN1YihnLm11bChwKSk7dmFyIHc9eS5zdWIoZy5tdWwoYikpO2lmKCFuJiZ1LmNtcChjKTwwKWU9Zi5uZWcoKSxyPXAsbj11Lm5lZygpLGk9aDtlbHNlIGlmKG4mJjI9PT0rK20pYnJlYWs7Zj11LGw9ZCxkPXUsdj1wLHA9aCx5PWIsYj13fW89dS5uZWcoKSxhPWg7dmFyIF89bi5zcXIoKS5hZGQoaS5zcXIoKSksTT1vLnNxcigpLmFkZChhLnNxcigpKTtyZXR1cm4gTS5jbXAoXyk+PTAmJihvPWUsYT1yKSxuLm5lZ2F0aXZlJiYobj1uLm5lZygpLGk9aS5uZWcoKSksby5uZWdhdGl2ZSYmKG89by5uZWcoKSxhPWEubmVnKCkpLFt7YTpuLGI6aX0se2E6byxiOmF9XX0sbi5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmVuZG8uYmFzaXMscj1lWzBdLG49ZVsxXSxpPW4uYi5tdWwodCkuZGl2Um91bmQodGhpcy5uKSxvPXIuYi5uZWcoKS5tdWwodCkuZGl2Um91bmQodGhpcy5uKSxhPWkubXVsKHIuYSksZj1vLm11bChuLmEpLHM9aS5tdWwoci5iKSx1PW8ubXVsKG4uYiksaD10LnN1YihhKS5zdWIoZiksYz1zLmFkZCh1KS5uZWcoKTtyZXR1cm57azE6aCxrMjpjfX0sbi5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbih0LGUpe3Q9bmV3IHModCwxNiksdC5yZWR8fCh0PXQudG9SZWQodGhpcy5yZWQpKTt2YXIgcj10LnJlZFNxcigpLnJlZE11bCh0KS5yZWRJQWRkKHQucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxuPXIucmVkU3FydCgpO2lmKDAhPT1uLnJlZFNxcigpLnJlZFN1YihyKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3ZhciBpPW4uZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKGUmJiFpfHwhZSYmaSkmJihuPW4ucmVkTmVnKCkpLHRoaXMucG9pbnQodCxuKX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7aWYodC5pbmYpcmV0dXJuITA7dmFyIGU9dC54LHI9dC55LG49dGhpcy5hLnJlZE11bChlKSxpPWUucmVkU3FyKCkucmVkTXVsKGUpLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09ci5yZWRTcXIoKS5yZWRJU3ViKGkpLmNtcG4oMCl9LG4ucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMuX2VuZG9XbmFmVDEsaT10aGlzLl9lbmRvV25hZlQyLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIGE9dGhpcy5fZW5kb1NwbGl0KGVbb10pLGY9dFtvXSxzPWYuX2dldEJldGEoKTthLmsxLm5lZ2F0aXZlJiYoYS5rMS5pbmVnKCksZj1mLm5lZyghMCkpLGEuazIubmVnYXRpdmUmJihhLmsyLmluZWcoKSxzPXMubmVnKCEwKSksblsyKm9dPWYsblsyKm8rMV09cyxpWzIqb109YS5rMSxpWzIqbysxXT1hLmsyfWZvcih2YXIgdT10aGlzLl93bmFmTXVsQWRkKDEsbixpLDIqbyxyKSxoPTA7aDwyKm87aCsrKW5baF09bnVsbCxpW2hdPW51bGw7cmV0dXJuIHV9LHUoaSxoLkJhc2VQb2ludCksbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgaSh0aGlzLHQsZSxyKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCxlKX0saS5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciB0PXRoaXMucHJlY29tcHV0ZWQ7aWYodCYmdC5iZXRhKXJldHVybiB0LmJldGE7dmFyIGU9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKHQpe3ZhciByPXRoaXMuY3VydmUsbj1mdW5jdGlvbih0KXtyZXR1cm4gci5wb2ludCh0LngucmVkTXVsKHIuZW5kby5iZXRhKSx0LnkpfTt0LmJldGE9ZSxlLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOnQubmFmJiZ7d25kOnQubmFmLnduZCxwb2ludHM6dC5uYWYucG9pbnRzLm1hcChuKX0sZG91Ymxlczp0LmRvdWJsZXMmJntzdGVwOnQuZG91Ymxlcy5zdGVwLHBvaW50czp0LmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiBlfX0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0saS5mcm9tSlNPTj1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdC5wb2ludChlWzBdLGVbMV0scil9XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPUpTT04ucGFyc2UoZSkpO3ZhciBpPXQucG9pbnQoZVswXSxlWzFdLHIpO2lmKCFlWzJdKXJldHVybiBpO3ZhciBvPWVbMl07cmV0dXJuIGkucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOm8uZG91YmxlcyYme3N0ZXA6by5kb3VibGVzLnN0ZXAscG9pbnRzOltpXS5jb25jYXQoby5kb3VibGVzLnBvaW50cy5tYXAobikpfSxuYWY6by5uYWYmJnt3bmQ6by5uYWYud25kLHBvaW50czpbaV0uY29uY2F0KG8ubmFmLnBvaW50cy5tYXAobikpfX0saX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHk6IFwiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtpZih0aGlzLmluZilyZXR1cm4gdDtpZih0LmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKHQpKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEodCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcCh0LngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIGU9dGhpcy55LnJlZFN1Yih0LnkpOzAhPT1lLmNtcG4oMCkmJihlPWUucmVkTXVsKHRoaXMueC5yZWRTdWIodC54KS5yZWRJbnZtKCkpKTt2YXIgcj1lLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKHQueCksbj1lLnJlZE11bCh0aGlzLngucmVkU3ViKHIpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocixuKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT10LmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgZT10aGlzLmN1cnZlLmEscj10aGlzLngucmVkU3FyKCksbj10LnJlZEludm0oKSxpPXIucmVkQWRkKHIpLnJlZElBZGQocikucmVkSUFkZChlKS5yZWRNdWwobiksbz1pLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxhPWkucmVkTXVsKHRoaXMueC5yZWRTdWIobykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChvLGEpfSxpLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0PW5ldyBzKHQsMTYpLHRoaXMuX2hhc0RvdWJsZXModCk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyx0KTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFt0XSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxpLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVt0aGlzLGVdLGk9W3Qscl07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChuLGkpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxuLGksMil9LGkucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVt0aGlzLGVdLGk9W3Qscl07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChuLGksITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxuLGksMiwhMCl9LGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8dGhpcy5pbmY9PT10LmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcCh0LngpJiYwPT09dGhpcy55LmNtcCh0LnkpKX0saS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYodCYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIHI9dGhpcy5wcmVjb21wdXRlZCxuPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5lZygpfTtlLnByZWNvbXB1dGVkPXtuYWY6ci5uYWYmJnt3bmQ6ci5uYWYud25kLHBvaW50czpyLm5hZi5wb2ludHMubWFwKG4pfSxkb3VibGVzOnIuZG91YmxlcyYme3N0ZXA6ci5kb3VibGVzLnN0ZXAscG9pbnRzOnIuZG91Ymxlcy5wb2ludHMubWFwKG4pfX19cmV0dXJuIGV9LGkucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk7dmFyIHQ9dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSk7cmV0dXJuIHR9LFxudShvLGguQmFzZVBvaW50KSxuLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgbyh0aGlzLHQsZSxyKX0sby5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgdD10aGlzLnoucmVkSW52bSgpLGU9dC5yZWRTcXIoKSxyPXRoaXMueC5yZWRNdWwoZSksbj10aGlzLnkucmVkTXVsKGUpLnJlZE11bCh0KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChyLG4pfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHQ7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGU9dC56LnJlZFNxcigpLHI9dGhpcy56LnJlZFNxcigpLG49dGhpcy54LnJlZE11bChlKSxpPXQueC5yZWRNdWwociksbz10aGlzLnkucmVkTXVsKGUucmVkTXVsKHQueikpLGE9dC55LnJlZE11bChyLnJlZE11bCh0aGlzLnopKSxmPW4ucmVkU3ViKGkpLHM9by5yZWRTdWIoYSk7aWYoMD09PWYuY21wbigwKSlyZXR1cm4gMCE9PXMuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgdT1mLnJlZFNxcigpLGg9dS5yZWRNdWwoZiksYz1uLnJlZE11bCh1KSxkPXMucmVkU3FyKCkucmVkSUFkZChoKS5yZWRJU3ViKGMpLnJlZElTdWIoYyksbD1zLnJlZE11bChjLnJlZElTdWIoZCkpLnJlZElTdWIoby5yZWRNdWwoaCkpLHA9dGhpcy56LnJlZE11bCh0LnopLnJlZE11bChmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZCxsLHApfSxvLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdC50b0ooKTtpZih0LmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10aGlzLngsbj10LngucmVkTXVsKGUpLGk9dGhpcy55LG89dC55LnJlZE11bChlKS5yZWRNdWwodGhpcy56KSxhPXIucmVkU3ViKG4pLGY9aS5yZWRTdWIobyk7aWYoMD09PWEuY21wbigwKSlyZXR1cm4gMCE9PWYuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgcz1hLnJlZFNxcigpLHU9cy5yZWRNdWwoYSksaD1yLnJlZE11bChzKSxjPWYucmVkU3FyKCkucmVkSUFkZCh1KS5yZWRJU3ViKGgpLnJlZElTdWIoaCksZD1mLnJlZE11bChoLnJlZElTdWIoYykpLnJlZElTdWIoaS5yZWRNdWwodSkpLGw9dGhpcy56LnJlZE11bChhKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYyxkLGwpfSxvLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCF0KXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXtmb3IodmFyIGU9dGhpcyxyPTA7cjx0O3IrKyllPWUuZGJsKCk7cmV0dXJuIGV9Zm9yKHZhciBuPXRoaXMuY3VydmUuYSxpPXRoaXMuY3VydmUudGludixvPXRoaXMueCxhPXRoaXMueSxmPXRoaXMueixzPWYucmVkU3FyKCkucmVkU3FyKCksdT1hLnJlZEFkZChhKSxyPTA7cjx0O3IrKyl7dmFyIGg9by5yZWRTcXIoKSxjPXUucmVkU3FyKCksZD1jLnJlZFNxcigpLGw9aC5yZWRBZGQoaCkucmVkSUFkZChoKS5yZWRJQWRkKG4ucmVkTXVsKHMpKSxwPW8ucmVkTXVsKGMpLGI9bC5yZWRTcXIoKS5yZWRJU3ViKHAucmVkQWRkKHApKSx2PXAucmVkSVN1YihiKSx5PWwucmVkTXVsKHYpO3k9eS5yZWRJQWRkKHkpLnJlZElTdWIoZCk7dmFyIG09dS5yZWRNdWwoZik7cisxPHQmJihzPXMucmVkTXVsKGQpKSxvPWIsZj1tLHU9eX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobyx1LnJlZE11bChpKSxmKX0sby5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9kYmwoKX0sby5wcm90b3R5cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI7aWYodGhpcy56T25lKXt2YXIgbj10aGlzLngucmVkU3FyKCksaT10aGlzLnkucmVkU3FyKCksbz1pLnJlZFNxcigpLGE9dGhpcy54LnJlZEFkZChpKS5yZWRTcXIoKS5yZWRJU3ViKG4pLnJlZElTdWIobyk7YT1hLnJlZElBZGQoYSk7dmFyIGY9bi5yZWRBZGQobikucmVkSUFkZChuKSxzPWYucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGEpLHU9by5yZWRJQWRkKG8pO3U9dS5yZWRJQWRkKHUpLHU9dS5yZWRJQWRkKHUpLHQ9cyxlPWYucmVkTXVsKGEucmVkSVN1YihzKSkucmVkSVN1Yih1KSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBoPXRoaXMueC5yZWRTcXIoKSxjPXRoaXMueS5yZWRTcXIoKSxkPWMucmVkU3FyKCksbD10aGlzLngucmVkQWRkKGMpLnJlZFNxcigpLnJlZElTdWIoaCkucmVkSVN1YihkKTtsPWwucmVkSUFkZChsKTt2YXIgcD1oLnJlZEFkZChoKS5yZWRJQWRkKGgpLGI9cC5yZWRTcXIoKSx2PWQucmVkSUFkZChkKTt2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSx0PWIucmVkSVN1YihsKS5yZWRJU3ViKGwpLGU9cC5yZWRNdWwobC5yZWRJU3ViKHQpKS5yZWRJU3ViKHYpLHI9dGhpcy55LnJlZE11bCh0aGlzLnopLHI9ci5yZWRJQWRkKHIpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0LGUscil9LG8ucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciB0LGUscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihvKTthPWEucmVkSUFkZChhKTt2YXIgZj1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxzPWYucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGEpO3Q9czt2YXIgdT1vLnJlZElBZGQobyk7dT11LnJlZElBZGQodSksdT11LnJlZElBZGQodSksZT1mLnJlZE11bChhLnJlZElTdWIocykpLnJlZElTdWIodSkscj10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaD10aGlzLnoucmVkU3FyKCksYz10aGlzLnkucmVkU3FyKCksZD10aGlzLngucmVkTXVsKGMpLGw9dGhpcy54LnJlZFN1YihoKS5yZWRNdWwodGhpcy54LnJlZEFkZChoKSk7bD1sLnJlZEFkZChsKS5yZWRJQWRkKGwpO3ZhciBwPWQucmVkSUFkZChkKTtwPXAucmVkSUFkZChwKTt2YXIgYj1wLnJlZEFkZChwKTt0PWwucmVkU3FyKCkucmVkSVN1YihiKSxyPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGMpLnJlZElTdWIoaCk7dmFyIHY9Yy5yZWRTcXIoKTt2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSxlPWwucmVkTXVsKHAucmVkSVN1Yih0KSkucmVkSVN1Yih2KX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodCxlLHIpfSxvLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJ2ZS5hLGU9dGhpcy54LHI9dGhpcy55LG49dGhpcy56LGk9bi5yZWRTcXIoKS5yZWRTcXIoKSxvPWUucmVkU3FyKCksYT1yLnJlZFNxcigpLGY9by5yZWRBZGQobykucmVkSUFkZChvKS5yZWRJQWRkKHQucmVkTXVsKGkpKSxzPWUucmVkQWRkKGUpO3M9cy5yZWRJQWRkKHMpO3ZhciB1PXMucmVkTXVsKGEpLGg9Zi5yZWRTcXIoKS5yZWRJU3ViKHUucmVkQWRkKHUpKSxjPXUucmVkSVN1YihoKSxkPWEucmVkU3FyKCk7ZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCk7dmFyIGw9Zi5yZWRNdWwoYykucmVkSVN1YihkKSxwPXIucmVkQWRkKHIpLnJlZE11bChuKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoaCxsLHApfSxvLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciB0PXRoaXMueC5yZWRTcXIoKSxlPXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPWUucmVkU3FyKCksaT10LnJlZEFkZCh0KS5yZWRJQWRkKHQpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoZSkucmVkU3FyKCkucmVkSVN1Yih0KS5yZWRJU3ViKG4pO2E9YS5yZWRJQWRkKGEpLGE9YS5yZWRBZGQoYSkucmVkSUFkZChhKSxhPWEucmVkSVN1YihvKTt2YXIgZj1hLnJlZFNxcigpLHM9bi5yZWRJQWRkKG4pO3M9cy5yZWRJQWRkKHMpLHM9cy5yZWRJQWRkKHMpLHM9cy5yZWRJQWRkKHMpO3ZhciB1PWkucmVkSUFkZChhKS5yZWRTcXIoKS5yZWRJU3ViKG8pLnJlZElTdWIoZikucmVkSVN1YihzKSxoPWUucmVkTXVsKHUpO2g9aC5yZWRJQWRkKGgpLGg9aC5yZWRJQWRkKGgpO3ZhciBjPXRoaXMueC5yZWRNdWwoZikucmVkSVN1YihoKTtjPWMucmVkSUFkZChjKSxjPWMucmVkSUFkZChjKTt2YXIgZD10aGlzLnkucmVkTXVsKHUucmVkTXVsKHMucmVkSVN1Yih1KSkucmVkSVN1YihhLnJlZE11bChmKSkpO2Q9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpO3ZhciBsPXRoaXMuei5yZWRBZGQoYSkucmVkU3FyKCkucmVkSVN1YihyKS5yZWRJU3ViKGYpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChjLGQsbCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0PW5ldyBzKHQsZSksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtpZihcImFmZmluZVwiPT09dC50eXBlKXJldHVybiB0aGlzLmVxKHQudG9KKCkpO2lmKHRoaXM9PT10KXJldHVybiEwO3ZhciBlPXRoaXMuei5yZWRTcXIoKSxyPXQuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChyKS5yZWRJU3ViKHQueC5yZWRNdWwoZSkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIG49ZS5yZWRNdWwodGhpcy56KSxpPXIucmVkTXVsKHQueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKGkpLnJlZElTdWIodC55LnJlZE11bChuKSkuY21wbigwKX0sby5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuei5yZWRTcXIoKSxyPXQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChlKTtpZigwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMDtmb3IodmFyIG49dC5jbG9uZSgpLGk9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChlKTs7KXtpZihuLmlhZGQodGhpcy5jdXJ2ZS5uKSxuLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKHIucmVkSUFkZChpKSwwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMH1yZXR1cm4hMX0sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBKUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgSlBvaW50IHg6IFwiK3RoaXMueC50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LnRvU3RyaW5nKDE2LDIpK1wiPlwifSxvLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe1wic2hvcnRcIj09PXQudHlwZT90aGlzLmN1cnZlPW5ldyBmLmN1cnZlLnNob3J0KHQpOlwiZWR3YXJkc1wiPT09dC50eXBlP3RoaXMuY3VydmU9bmV3IGYuY3VydmUuZWR3YXJkcyh0KTp0aGlzLmN1cnZlPW5ldyBmLmN1cnZlLm1vbnQodCksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD10Lmhhc2gscyh0aGlzLmcudmFsaWRhdGUoKSxcIkludmFsaWQgY3VydmVcIikscyh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLFwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE9cIil9ZnVuY3Rpb24gaSh0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciByPW5ldyBuKGUpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobyx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSkscn19KX12YXIgbz1lLGE9cig1MCksZj1yKDIyKSxzPWYudXRpbHMuYXNzZXJ0O28uUHJlc2V0Q3VydmU9bixpKFwicDE5MlwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcInAxOTJcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjFcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzFcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMlwiLFwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTFcIl19KSxpKFwicDIyNFwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcInAyMjRcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmVcIixiOlwiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjRcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2RcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMVwiLFwiYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzRcIl19KSxpKFwicDI1NlwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YlwiLG46XCJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MVwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2XCIsXCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNVwiXX0pLGkoXCJwMzg0XCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjXCIsYjpcImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmXCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczXCIsaGFzaDphLnNoYTM4NCxnUmVkOiExLGc6W1wiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjdcIixcIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmXCJdfSksaShcInA1MjFcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDBcIixuOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDlcIixoYXNoOmEuc2hhNTEyLGdSZWQ6ITEsZzpbXCIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NlwiLFwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTBcIl19KSxpKFwiY3VydmUyNTUxOVwiLHt0eXBlOlwibW9udFwiLHByaW1lOlwicDI1NTE5XCIscDpcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIixhOlwiNzZkMDZcIixiOlwiMFwiLG46XCIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiOVwiXX0pLGkoXCJlZDI1NTE5XCIse3R5cGU6XCJlZHdhcmRzXCIscHJpbWU6XCJwMjU1MTlcIixwOlwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiLGE6XCItMVwiLGM6XCIxXCIsZDpcIjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTNcIixuOlwiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZFwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWFcIixcIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NThcIl19KTt2YXIgdTt0cnl7dT1yKDU1Nyl9Y2F0Y2godCl7dT12b2lkIDB9aShcInNlY3AyNTZrMVwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcImsyNTZcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIixhOlwiMFwiLGI6XCI3XCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxXCIsaDpcIjFcIixoYXNoOmEuc2hhMjU2LGJldGE6XCI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlXCIsbGFtYmRhOlwiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MlwiLGJhc2lzOlt7YTpcIjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1XCIsYjpcIi1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjM1wifSx7YTpcIjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOFwiLGI6XCIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNVwifV0sZ1JlZDohMSxnOltcIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OThcIixcIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjhcIix1XX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KFwic3RyaW5nXCI9PXR5cGVvZiB0JiYoZihvLmN1cnZlcy5oYXNPd25Qcm9wZXJ0eSh0KSxcIlVua25vd24gY3VydmUgXCIrdCksdD1vLmN1cnZlc1t0XSksdCBpbnN0YW5jZW9mIG8uY3VydmVzLlByZXNldEN1cnZlJiYodD17Y3VydmU6dH0pLHRoaXMuY3VydmU9dC5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPXQuY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZSh0LmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdm9pZCh0aGlzLmhhc2g9dC5oYXNofHx0LmN1cnZlLmhhc2gpKTpuZXcgbih0KX12YXIgaT1yKDMwKSxvPXIoMjIpLGE9by51dGlscyxmPWEuYXNzZXJ0LHM9cig1NTEpLHU9cig1NTIpO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHRoaXMsdCl9LG4ucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMuZnJvbVByaXZhdGUodGhpcyx0LGUpfSxuLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMuZnJvbVB1YmxpYyh0aGlzLHQsZSl9LG4ucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24odCl7dHx8KHQ9e30pO2Zvcih2YXIgZT1uZXcgby5obWFjRFJCRyh7aGFzaDp0aGlzLmhhc2gscGVyczp0LnBlcnMsZW50cm9weTp0LmVudHJvcHl8fG8ucmFuZCh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxub25jZTp0aGlzLm4udG9BcnJheSgpfSkscj10aGlzLm4uYnl0ZUxlbmd0aCgpLG49dGhpcy5uLnN1YihuZXcgaSgyKSk7Oyl7dmFyIGE9bmV3IGkoZS5nZW5lcmF0ZShyKSk7aWYoIShhLmNtcChuKT4wKSlyZXR1cm4gYS5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKGEpfX0sbi5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKHQsZSl7dmFyIHI9OCp0LmJ5dGVMZW5ndGgoKS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIHI+MCYmKHQ9dC51c2hybihyKSksIWUmJnQuY21wKHRoaXMubik+PTA/dC5zdWIodGhpcy5uKTp0fSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSxyLG4pe1wib2JqZWN0XCI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksbnx8KG49e30pLGU9dGhpcy5rZXlGcm9tUHJpdmF0ZShlLHIpLHQ9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGkodCwxNikpO2Zvcih2YXIgYT10aGlzLm4uYnl0ZUxlbmd0aCgpLGY9ZS5nZXRQcml2YXRlKCkudG9BcnJheShcImJlXCIsYSkscz10LnRvQXJyYXkoXCJiZVwiLGEpLGg9bmV3IG8uaG1hY0RSQkcoe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6Zixub25jZTpzLHBlcnM6bi5wZXJzLHBlcnNFbmM6bi5wZXJzRW5jfSksYz10aGlzLm4uc3ViKG5ldyBpKDEpKSxkPTA7ITA7ZCsrKXt2YXIgbD1uLms/bi5rKGQpOm5ldyBpKGguZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKGw9dGhpcy5fdHJ1bmNhdGVUb04obCwhMCksIShsLmNtcG4oMSk8PTB8fGwuY21wKGMpPj0wKSl7dmFyIHA9dGhpcy5nLm11bChsKTtpZighcC5pc0luZmluaXR5KCkpe3ZhciBiPXAuZ2V0WCgpLHY9Yi51bW9kKHRoaXMubik7aWYoMCE9PXYuY21wbigwKSl7dmFyIHk9bC5pbnZtKHRoaXMubikubXVsKHYubXVsKGUuZ2V0UHJpdmF0ZSgpKS5pYWRkKHQpKTtpZih5PXkudW1vZCh0aGlzLm4pLDAhPT15LmNtcG4oMCkpe3ZhciBtPShwLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1iLmNtcCh2KT8yOjApO3JldHVybiBuLmNhbm9uaWNhbCYmeS5jbXAodGhpcy5uaCk+MCYmKHk9dGhpcy5uLnN1Yih5KSxtXj0xKSxuZXcgdSh7cjp2LHM6eSxyZWNvdmVyeVBhcmFtOm19KX19fX19fSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlLHIsbil7dD10aGlzLl90cnVuY2F0ZVRvTihuZXcgaSh0LDE2KSkscj10aGlzLmtleUZyb21QdWJsaWMocixuKSxlPW5ldyB1KGUsXCJoZXhcIik7dmFyIG89ZS5yLGE9ZS5zO2lmKG8uY21wbigxKTwwfHxvLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO2lmKGEuY21wbigxKTwwfHxhLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBmPWEuaW52bSh0aGlzLm4pLHM9Zi5tdWwodCkudW1vZCh0aGlzLm4pLGg9Zi5tdWwobykudW1vZCh0aGlzLm4pO2lmKCF0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2spe3ZhciBjPXRoaXMuZy5tdWxBZGQocyxyLmdldFB1YmxpYygpLGgpO3JldHVybiFjLmlzSW5maW5pdHkoKSYmMD09PWMuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAobyl9dmFyIGM9dGhpcy5nLmptdWxBZGQocyxyLmdldFB1YmxpYygpLGgpO3JldHVybiFjLmlzSW5maW5pdHkoKSYmYy5lcVhUb1Aobyl9LG4ucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVuY3Rpb24odCxlLHIsbil7ZigoMyZyKT09PXIsXCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzXCIpLGU9bmV3IHUoZSxuKTt2YXIgbz10aGlzLm4sYT1uZXcgaSh0KSxzPWUucixoPWUucyxjPTEmcixkPXI+PjE7aWYocy5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJmQpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlXCIpO3M9ZD90aGlzLmN1cnZlLnBvaW50RnJvbVgocy5hZGQodGhpcy5jdXJ2ZS5uKSxjKTp0aGlzLmN1cnZlLnBvaW50RnJvbVgocyxjKTt2YXIgbD1lLnIuaW52bShvKSxwPW8uc3ViKGEpLm11bChsKS51bW9kKG8pLGI9aC5tdWwobCkudW1vZChvKTtyZXR1cm4gdGhpcy5nLm11bEFkZChwLHMsYil9LG4ucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24odCxlLHIsbil7aWYoZT1uZXcgdShlLG4pLG51bGwhPT1lLnJlY292ZXJ5UGFyYW0pcmV0dXJuIGUucmVjb3ZlcnlQYXJhbTtmb3IodmFyIGk9MDtpPDQ7aSsrKXt2YXIgbzt0cnl7bz10aGlzLnJlY292ZXJQdWJLZXkodCxlLGkpfWNhdGNoKHQpe2NvbnRpbnVlfWlmKG8uZXEocikpcmV0dXJuIGl9dGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yXCIpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVjPXQsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxlLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoZS5wcml2LGUucHJpdkVuYyksZS5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhlLnB1YixlLnB1YkVuYyl9dmFyIGk9cigzMCk7dC5leHBvcnRzPW4sbi5mcm9tUHVibGljPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwdWI6ZSxwdWJFbmM6cn0pfSxuLmZyb21Qcml2YXRlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwcml2OmUscHJpdkVuYzpyfSl9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gdC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246XCJJbnZhbGlkIHB1YmxpYyBrZXlcIn06dC52YWxpZGF0ZSgpP3QubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOlwiUHVibGljIGtleSAqIE4gIT0gT1wifTp7cmVzdWx0OiExLHJlYXNvbjpcIlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnRcIn19LG4ucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYoZT10LHQ9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLGU/dGhpcy5wdWIuZW5jb2RlKGUsdCk6dGhpcy5wdWJ9LG4ucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sbi5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLnByaXY9bmV3IGkodCxlfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LG4ucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54fHx0Lnk/dm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KHQueCx0LnkpKTp2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQodCxlKSl9LG4ucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmVjLnNpZ24odCx0aGlzLGUscil9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVjLnZlcmlmeSh0LGUsdGhpcyl9LG4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm5cIjxLZXkgcHJpdjogXCIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKStcIiBwdWI6IFwiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKStcIiA+XCJ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygbj90OnZvaWQodGhpcy5faW1wb3J0REVSKHQsZSl8fChjKHQuciYmdC5zLFwiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzXCIpLHRoaXMucj1uZXcgcyh0LnIsMTYpLHRoaXMucz1uZXcgcyh0LnMsMTYpLHZvaWQgMD09PXQucmVjb3ZlcnlQYXJhbT90aGlzLnJlY292ZXJ5UGFyYW09bnVsbDp0aGlzLnJlY292ZXJ5UGFyYW09dC5yZWNvdmVyeVBhcmFtKSl9ZnVuY3Rpb24gaSgpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dFtlLnBsYWNlKytdO2lmKCEoMTI4JnIpKXJldHVybiByO2Zvcih2YXIgbj0xNSZyLGk9MCxvPTAsYT1lLnBsYWNlO288bjtvKyssYSsrKWk8PD04LGl8PXRbYV07cmV0dXJuIGUucGxhY2U9YSxpfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aC0xOyF0W2VdJiYhKDEyOCZ0W2UrMV0pJiZlPHI7KWUrKztyZXR1cm4gMD09PWU/dDp0LnNsaWNlKGUpfWZ1bmN0aW9uIGYodCxlKXtpZihlPDEyOClyZXR1cm4gdm9pZCB0LnB1c2goZSk7dmFyIHI9MSsoTWF0aC5sb2coZSkvTWF0aC5MTjI+Pj4zKTtmb3IodC5wdXNoKDEyOHxyKTstLXI7KXQucHVzaChlPj4+KHI8PDMpJjI1NSk7dC5wdXNoKGUpfXZhciBzPXIoMzApLHU9cigyMiksaD11LnV0aWxzLGM9aC5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlvbih0LGUpe3Q9aC50b0FycmF5KHQsZSk7dmFyIHI9bmV3IGk7aWYoNDghPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIG49byh0LHIpO2lmKG4rci5wbGFjZSE9PXQubGVuZ3RoKXJldHVybiExO2lmKDIhPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIGE9byh0LHIpLGY9dC5zbGljZShyLnBsYWNlLGErci5wbGFjZSk7aWYoci5wbGFjZSs9YSwyIT09dFtyLnBsYWNlKytdKXJldHVybiExO3ZhciB1PW8odCxyKTtpZih0Lmxlbmd0aCE9PXUrci5wbGFjZSlyZXR1cm4hMTt2YXIgYz10LnNsaWNlKHIucGxhY2UsdStyLnBsYWNlKTtyZXR1cm4gMD09PWZbMF0mJjEyOCZmWzFdJiYoZj1mLnNsaWNlKDEpKSwwPT09Y1swXSYmMTI4JmNbMV0mJihjPWMuc2xpY2UoMSkpLHRoaXMucj1uZXcgcyhmKSx0aGlzLnM9bmV3IHMoYyksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LG4ucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuci50b0FycmF5KCkscj10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmZVswXSYmKGU9WzBdLmNvbmNhdChlKSksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpLGU9YShlKSxyPWEocik7IShyWzBdfHwxMjgmclsxXSk7KXI9ci5zbGljZSgxKTt2YXIgbj1bMl07ZihuLGUubGVuZ3RoKSxuPW4uY29uY2F0KGUpLG4ucHVzaCgyKSxmKG4sci5sZW5ndGgpO3ZhciBpPW4uY29uY2F0KHIpLG89WzQ4XTtyZXR1cm4gZihvLGkubGVuZ3RoKSxvPW8uY29uY2F0KGkpLGguZW5jb2RlKG8sdCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtpZihmKFwiZWQyNTUxOVwiPT09dCxcIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXJcIiksISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQpO3ZhciB0PW8uY3VydmVzW3RdLmN1cnZlO3RoaXMuY3VydmU9dCx0aGlzLmc9dC5nLHRoaXMuZy5wcmVjb21wdXRlKHQubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9dC5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKHQubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9aS5zaGE1MTJ9dmFyIGk9cig1MCksbz1yKDIyKSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPWEucGFyc2VCeXRlcyx1PXIoNTU0KSxoPXIoNTU1KTt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSl7dD1zKHQpO3ZhciByPXRoaXMua2V5RnJvbVNlY3JldChlKSxuPXRoaXMuaGFzaEludChyLm1lc3NhZ2VQcmVmaXgoKSx0KSxpPXRoaXMuZy5tdWwobiksbz10aGlzLmVuY29kZVBvaW50KGkpLGE9dGhpcy5oYXNoSW50KG8sci5wdWJCeXRlcygpLHQpLm11bChyLnByaXYoKSksZj1uLmFkZChhKS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjppLFM6ZixSZW5jb2RlZDpvfSl9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUscil7dD1zKHQpLGU9dGhpcy5tYWtlU2lnbmF0dXJlKGUpO3ZhciBuPXRoaXMua2V5RnJvbVB1YmxpYyhyKSxpPXRoaXMuaGFzaEludChlLlJlbmNvZGVkKCksbi5wdWJCeXRlcygpLHQpLG89dGhpcy5nLm11bChlLlMoKSksYT1lLlIoKS5hZGQobi5wdWIoKS5tdWwoaSkpO3JldHVybiBhLmVxKG8pfSxuLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuaGFzaCgpLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQudXBkYXRlKGFyZ3VtZW50c1tlXSk7cmV0dXJuIGEuaW50RnJvbUxFKHQuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sbi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbih0KXtyZXR1cm4gdS5mcm9tUHVibGljKHRoaXMsdCl9LG4ucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHUuZnJvbVNlY3JldCh0aGlzLHQpfSxuLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaD90Om5ldyBoKHRoaXMsdCl9LG4ucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0WSgpLnRvQXJyYXkoXCJsZVwiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBlW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PXQuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsZX0sbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCl7dD1hLnBhcnNlQnl0ZXModCk7dmFyIGU9dC5sZW5ndGgtMSxyPXQuc2xpY2UoMCxlKS5jb25jYXQodFtlXSYtMTI5KSxuPTAhPT0oMTI4JnRbZV0pLGk9YS5pbnRGcm9tTEUocik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShpLG4pfSxuLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9BcnJheShcImxlXCIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LG4ucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbih0KXtyZXR1cm4gYS5pbnRGcm9tTEUodCl9LG4ucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWRkc2E9dCx0aGlzLl9zZWNyZXQ9ZihlLnNlY3JldCksdC5pc1BvaW50KGUucHViKT90aGlzLl9wdWI9ZS5wdWI6dGhpcy5fcHViQnl0ZXM9ZihlLnB1Yil9dmFyIGk9cigyMiksbz1pLnV0aWxzLGE9by5hc3NlcnQsZj1vLnBhcnNlQnl0ZXMscz1vLmNhY2hlZFByb3BlcnR5O24uZnJvbVB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3B1YjplfSl9LG4uZnJvbVNlY3JldD1mdW5jdGlvbih0LGUpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3NlY3JldDplfSl9LG4ucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LHMobixcInB1YkJ5dGVzXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLHMobixcInB1YlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSkscyhuLFwicHJpdkJ5dGVzXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVkZHNhLGU9dGhpcy5oYXNoKCkscj10LmVuY29kaW5nTGVuZ3RoLTEsbj1lLnNsaWNlKDAsdC5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIG5bMF0mPTI0OCxuW3JdJj0xMjcsbltyXXw9NjQsbn0pLHMobixcInByaXZcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLHMobixcImhhc2hcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxzKG4sXCJtZXNzYWdlUHJlZml4XCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMuX3NlY3JldCxcIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5XCIpLHRoaXMuZWRkc2Euc2lnbih0LHRoaXMpfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkodCxlLHRoaXMpfSxuLnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5fc2VjcmV0LFwiS2V5UGFpciBpcyBwdWJsaWMgb25seVwiKSxvLmVuY29kZSh0aGlzLnNlY3JldCgpLHQpfSxuLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZW5jb2RlKHRoaXMucHViQnl0ZXMoKSx0KX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5lZGRzYT10LFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT11KGUpKSxBcnJheS5pc0FycmF5KGUpJiYoZT17UjplLnNsaWNlKDAsdC5lbmNvZGluZ0xlbmd0aCksUzplLnNsaWNlKHQuZW5jb2RpbmdMZW5ndGgpfSksZihlLlImJmUuUyxcIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgU1wiKSx0LmlzUG9pbnQoZS5SKSYmKHRoaXMuX1I9ZS5SKSxlLlMgaW5zdGFuY2VvZiBpJiYodGhpcy5fUz1lLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoZS5SKT9lLlI6ZS5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KGUuUyk/ZS5TOmUuU2VuY29kZWR9dmFyIGk9cigzMCksbz1yKDIyKSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPWEuY2FjaGVkUHJvcGVydHksdT1hLnBhcnNlQnl0ZXM7cyhuLFwiU1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxzKG4sXCJSXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSkscyhuLFwiUmVuY29kZWRcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLHMobixcIlNlbmNvZGVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksbi5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LG4ucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZW5jb2RlKHRoaXMudG9CeXRlcygpLFwiaGV4XCIpLnRvVXBwZXJDYXNlKCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCk7dGhpcy5oYXNoPXQuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF0LnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PXQubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLnJlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgZT1hLnRvQXJyYXkodC5lbnRyb3B5LHQuZW50cm9weUVuYykscj1hLnRvQXJyYXkodC5ub25jZSx0Lm5vbmNlRW5jKSxpPWEudG9BcnJheSh0LnBlcnMsdC5wZXJzRW5jKTtmKGUubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCxcIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogXCIrdGhpcy5taW5FbnRyb3B5K1wiIGJpdHNcIiksdGhpcy5faW5pdChlLHIsaSl9dmFyIGk9cig1MCksbz1yKDIyKSxhPW8udXRpbHMsZj1hLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7dmFyIG49dC5jb25jYXQoZSkuY29uY2F0KHIpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIGk9MDtpPHRoaXMuVi5sZW5ndGg7aSsrKXRoaXMuS1tpXT0wLHRoaXMuVltpXT0xO3RoaXMuX3VwZGF0ZShuKSx0aGlzLnJlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxuLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaS5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTt0JiYoZT1lLnVwZGF0ZSh0KSksdGhpcy5LPWUuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSx0JiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUodCkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LG4ucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbih0LGUscixuKXtcInN0cmluZ1wiIT10eXBlb2YgZSYmKG49cixyPWUsZT1udWxsKSx0PWEudG9CdWZmZXIodCxlKSxyPWEudG9CdWZmZXIocixuKSxmKHQubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCxcIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogXCIrdGhpcy5taW5FbnRyb3B5K1wiIGJpdHNcIiksdGhpcy5fdXBkYXRlKHQuY29uY2F0KHJ8fFtdKSksdGhpcy5yZXNlZWQ9MX0sbi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodGhpcy5yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoXCJSZXNlZWQgaXMgcmVxdWlyZWRcIik7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihuPXIscj1lLGU9bnVsbCksciYmKHI9YS50b0FycmF5KHIsbiksdGhpcy5fdXBkYXRlKHIpKTtmb3IodmFyIGk9W107aS5sZW5ndGg8dDspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxpPWkuY29uY2F0KHRoaXMuVik7dmFyIG89aS5zbGljZSgwLHQpO3JldHVybiB0aGlzLl91cGRhdGUociksdGhpcy5yZXNlZWQrKyxhLmVuY29kZShvLGUpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1tcImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGFcIixcImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjFcIl0sW1wiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOFwiLFwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZlwiXSxbXCIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5XCIsXCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1XCJdLFtcIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDBcIixcIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOVwiXSxbXCI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjXCIsXCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2XCJdLFtcIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGFcIixcIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWZcIl0sW1wiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYVwiLFwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OVwiXSxbXCIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwXCIsXCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5XCJdLFtcImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmRcIixcIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGRcIl0sW1wiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZFwiLFwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OFwiXSxbXCJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxXCIsXCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkXCJdLFtcIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzBcIixcIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzhcIl0sW1wiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0N1wiLFwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYVwiXSxbXCIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyXCIsXCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzXCJdLFtcIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhN1wiLFwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MFwiXSxbXCIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkXCIsXCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwXCJdLFtcIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODNcIixcIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTZcIl0sW1wiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhXCIsXCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5XCJdLFtcIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZThcIixcImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTdcIl0sW1wiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZFwiLFwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYVwiXSxbXCJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1XCIsXCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkXCJdLFtcIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTRcIixcIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjJcIl0sW1wiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzY1wiLFwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNlwiXSxbXCJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2XCIsXCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmXCJdLFtcIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzlcIixcImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDFcIl0sW1wiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MVwiLFwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjM1wiXSxbXCJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiXCIsXCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmXCJdLFtcImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDNcIixcIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTdcIl0sW1wiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZFwiLFwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OFwiXSxbXCJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwXCIsXCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExXCJdLFtcIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDRcIixcImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MFwiXSxbXCI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhXCIsXCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyXCJdLFtcImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTFcIixcIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmNcIl0sW1wiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZVwiLFwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YlwiXSxbXCJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxXCIsXCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxXCJdLFtcImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWZcIixcIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NVwiXSxbXCJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4XCIsXCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwXCJdLFtcIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWRcIixcIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODRcIl0sW1wiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NlwiLFwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWRcIl0sW1wiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZFwiLFwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZFwiXSxbXCI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1XCIsXCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4XCJdLFtcImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjZcIixcIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzhcIl0sW1wiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MVwiLFwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhY1wiXSxbXCI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWNcIixcImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWZcIl0sW1wiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MVwiLFwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MlwiXSxbXCJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlXCIsXCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3XCJdLFtcIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDFcIixcImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWNcIl0sW1wiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiM1wiLFwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZFwiXSxbXCJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmXCIsXCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0XCJdLFtcIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTlcIixcImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmRcIl0sW1wiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZVwiLFwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMFwiXSxbXCJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5XCIsXCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExXCJdLFtcImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzJcIixcIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjFcIl0sW1wiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxM1wiLFwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwY1wiXSxbXCIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjXCIsXCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczXCJdLFtcIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmFcIixcIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmRcIl0sW1wiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MVwiLFwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNVwiXSxbXCI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczXCIsXCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5XCJdLFtcIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NThcIixcIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2VcIl0sW1wiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YlwiLFwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyN1wiXSxbXCJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2XCIsXCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzFcIl0sW1wiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYVwiLFwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MlwiXSxbXCI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTBcIixcIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDVcIl0sW1wiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4N1wiLFwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3M1wiXSxbXCJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlXCIsXCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyXCJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1tcImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjlcIixcIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzJcIl0sW1wiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNFwiLFwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNlwiXSxbXCI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjXCIsXCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhXCJdLFtcImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmVcIixcImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzdcIl0sW1wiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYlwiLFwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYlwiXSxbXCJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4XCIsXCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODFcIl0sW1wiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZVwiLFwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OFwiXSxbXCJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0XCIsXCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3XCJdLFtcIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmNcIixcIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2FcIl0sW1wiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNVwiLFwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4Y1wiXSxbXCIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmXCIsXCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjdcIl0sW1wiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNFwiLFwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMlwiXSxbXCJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5XCIsXCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1XCJdLFtcImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGJcIixcIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODJcIl0sW1wiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNFwiLFwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MlwiXSxbXCIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1XCIsXCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2XCJdLFtcIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzlcIixcIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OVwiXSxbXCI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkXCIsXCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmXCJdLFtcIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmZcIixcIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2FcIl0sW1wiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYlwiLFwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3XCJdLFtcImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzlcIixcImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzNcIl0sW1wiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzXCIsXCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhXCJdLFtcIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzRcIixcIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDZcIl0sW1wiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMFwiLFwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzN1wiXSxbXCI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViXCIsXCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlXCJdLFtcImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDdcIixcImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjZcIl0sW1wiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMVwiLFwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NlwiXSxbXCIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwXCIsXCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwXCJdLFtcIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzVcIixcIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MVwiXSxbXCI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4XCIsXCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODNcIl0sW1wiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOFwiLFwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNVwiXSxbXCIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViXCIsXCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiXCJdLFtcImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2ZcIixcIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTdcIl0sW1wiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0M1wiLFwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OFwiXSxbXCIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhXCIsXCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhXCJdLFtcImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDVcIixcImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzZcIl0sW1wiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YVwiLFwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NlwiXSxbXCI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlXCIsXCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlXCJdLFtcImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjhcIixcImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2RcIl0sW1wiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyY1wiLFwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMlwiXSxbXCI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5XCIsXCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlXCJdLFtcIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWJcIixcIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzdcIl0sW1wiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYVwiLFwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMVwiXSxbXCJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmXCIsXCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0XCJdLFtcIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTBcIixcIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzVcIl0sW1wiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNFwiLFwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZFwiXSxbXCIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjXCIsXCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkXCJdLFtcImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDBcIixcImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjlcIl0sW1wiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MFwiLFwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2XCJdLFtcIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjNcIixcIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzRcIl0sW1wiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZlwiLFwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlXCJdLFtcImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjNcIixcIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDFcIl0sW1wiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OFwiLFwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYlwiXSxbXCIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmXCIsXCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxXCJdLFtcIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjVcIixcIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjZcIl0sW1wiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNlwiLFwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZVwiXSxbXCIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1XCIsXCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkXCJdLFtcImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTlcIixcImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGNcIl0sW1wiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxXCIsXCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0XCJdLFtcIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTVcIixcIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmNcIl0sW1wiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNVwiLFwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YlwiXSxbXCJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3XCIsXCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTNcIl0sW1wiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MVwiLFwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0XCJdLFtcIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDVcIixcIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjVcIl0sW1wiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NlwiLFwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmY1wiXSxbXCIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjZcIixcImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjRcIl0sW1wiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZVwiLFwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZVwiXSxbXCIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0XCIsXCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjZcIl0sW1wiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMVwiLFwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMVwiXSxbXCIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxXCIsXCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGJcIl0sW1wiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MlwiLFwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMlwiXSxbXCI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTVcIixcImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2NcIl0sW1wiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYlwiLFwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhM1wiXSxbXCJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0XCIsXCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkXCJdLFtcImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWZcIixcIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDBcIl0sW1wiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODlcIixcIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTRcIl0sW1wiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NlwiLFwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NlwiXSxbXCIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0XCIsXCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0XCJdLFtcIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2FcIixcImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTdcIl0sW1wiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMFwiLFwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxM1wiXSxbXCJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3XCIsXCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2XCJdLFtcImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5M1wiLFwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOFwiXSxbXCJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmXCIsXCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWZcIl0sW1wiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOFwiLFwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OFwiXSxbXCJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhXCIsXCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhXCJdLFtcImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTFcIixcIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDRcIl0sW1wiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMlwiLFwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzN1wiXSxbXCIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhXCIsXCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3XCJdLFtcImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjZcIixcIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmRcIl0sW1wiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NlwiLFwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYVwiXSxbXCJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlXCIsXCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0XCJdLFtcIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzRcIixcIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzdcIl0sW1wiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYVwiLFwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxN1wiXSxbXCI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5XCIsXCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwXCJdLFtcImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWZcIixcImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjVcIl0sW1wiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwY1wiLFwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZVwiXSxbXCIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyXCIsXCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxXCJdLFtcImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGFcIixcIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjJcIl0sW1wiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MFwiLFwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyM1wiXSxbXCJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkXCIsXCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4XCJdLFtcIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTFcIixcImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NThcIl0sW1wiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2M1wiLFwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1XCJdLFtcImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTJcIixcIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2RcIl0sW1wiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5M1wiLFwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlY1wiXSxbXCI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwXCIsXCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzBcIl0sW1wiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OFwiLFwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzY1wiXSxbXCJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3XCIsXCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0XCJdLFtcIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYThcIixcImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWZcIl0sW1wiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZVwiLFwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OVwiXSxbXCIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkXCIsXCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjZcIl0sW1wiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YlwiLFwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNVwiXSxbXCJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmXCIsXCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3XCJdLFtcIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjZcIixcIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2JcIl0sW1wiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5N1wiLFwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliY1wiXSxbXCI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhXCIsXCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjXCJdLFtcImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmNcIixcImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWZcIl0sW1wiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MlwiLFwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YVwiXSxbXCJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiXCIsXCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2XCJdLFtcIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjVcIixcImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2ZcIl0sW1wiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxN1wiLFwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwM1wiXSxbXCI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5XCIsXCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4XCJdLFtcIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTNcIixcIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjhcIl0sW1wiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1N1wiLFwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczXCJdLFtcIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjZcIixcImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzNcIl0sW1wiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOFwiLFwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOFwiXSxbXCI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxXCIsXCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxXCJdLFtcIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODBcIixcIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjlcIl1dXG59fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LnNsaWNlKCk7aWYoIXQpcmV0dXJuW107dmFyIHI9W107aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXJbbl09MHx0W25dO3JldHVybiByfWlmKGUpe2lmKFwiaGV4XCI9PT1lKXt0PXQucmVwbGFjZSgvW15hLXowLTldKy9naSxcIlwiKSx0Lmxlbmd0aCUyIT09MCYmKHQ9XCIwXCIrdCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0yKXIucHVzaChwYXJzZUludCh0W25dK3RbbisxXSwxNikpfX1lbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10LmNoYXJDb2RlQXQobiksbz1pPj44LGE9MjU1Jmk7bz9yLnB1c2gobyxhKTpyLnB1c2goYSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09PXQubGVuZ3RoP1wiMFwiK3Q6dH1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyllKz1pKHRbcl0udG9TdHJpbmcoMTYpKTtyZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVtdLG49MTw8ZSsxLGk9dC5jbG9uZSgpO2kuY21wbigxKT49MDspe3ZhciBvO2lmKGkuaXNPZGQoKSl7dmFyIGE9aS5hbmRsbihuLTEpO289YT4obj4+MSktMT8obj4+MSktYTphLGkuaXN1Ym4obyl9ZWxzZSBvPTA7ci5wdXNoKG8pO2Zvcih2YXIgZj0wIT09aS5jbXBuKDApJiYwPT09aS5hbmRsbihuLTEpP2UrMToxLHM9MTtzPGY7cysrKXIucHVzaCgwKTtpLml1c2hybihmKX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9W1tdLFtdXTt0PXQuY2xvbmUoKSxlPWUuY2xvbmUoKTtmb3IodmFyIG49MCxpPTA7dC5jbXBuKC1uKT4wfHxlLmNtcG4oLWkpPjA7KXt2YXIgbz10LmFuZGxuKDMpK24mMyxhPWUuYW5kbG4oMykraSYzOzM9PT1vJiYobz0tMSksMz09PWEmJihhPS0xKTt2YXIgZjtpZigwPT09KDEmbykpZj0wO2Vsc2V7dmFyIHM9dC5hbmRsbig3KStuJjc7Zj0zIT09cyYmNSE9PXN8fDIhPT1hP286LW99clswXS5wdXNoKGYpO3ZhciB1O2lmKDA9PT0oMSZhKSl1PTA7ZWxzZXt2YXIgcz1lLmFuZGxuKDcpK2kmNzt1PTMhPT1zJiY1IT09c3x8MiE9PW8/YTotYX1yWzFdLnB1c2godSksMipuPT09ZisxJiYobj0xLW4pLDIqaT09PXUrMSYmKGk9MS1pKSx0Lml1c2hybigxKSxlLml1c2hybigxKX1yZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1cIl9cIitlO3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbbl0/dGhpc1tuXTp0aGlzW25dPXIuY2FsbCh0aGlzKX19ZnVuY3Rpb24gdSh0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9jLnRvQXJyYXkodCxcImhleFwiKTp0fWZ1bmN0aW9uIGgodCl7cmV0dXJuIG5ldyBkKHQsXCJoZXhcIixcImxlXCIpfXZhciBjPWUsZD1yKDMwKTtjLmFzc2VydD1mdW5jdGlvbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9LGMudG9BcnJheT1uLGMuemVybzI9aSxjLnRvSGV4PW8sYy5lbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImhleFwiPT09ZT9vKHQpOnR9LGMuZ2V0TkFGPWEsYy5nZXRKU0Y9ZixjLmNhY2hlZFByb3BlcnR5PXMsYy5wYXJzZUJ5dGVzPXUsYy5pbnRGcm9tTEU9aH0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5yYW5kPXR9dmFyIGk7aWYodC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpfHwoaT1uZXcgbihudWxsKSksaS5nZW5lcmF0ZSh0KX0sdC5leHBvcnRzLlJhbmQ9bixuLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFuZCh0KX0sXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyl3aW5kb3cuY3J5cHRvJiZ3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9uLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSksZX06d2luZG93Lm1zQ3J5cHRvJiZ3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiB3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGV9Om4ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkIHlldFwiKX07ZWxzZSB0cnl7dmFyIG89cig2MTApO24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBvLnJhbmRvbUJ5dGVzKHQpfX1jYXRjaCh0KXtuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkodCkscj0wO3I8ZS5sZW5ndGg7cisrKWVbcl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gZX19fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPVwiYmlnXCIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn12YXIgaT1yKDUwKSxvPWkudXRpbHMsYT1vLmFzc2VydDtlLkJsb2NrSGFzaD1uLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKHQ9by50b0FycmF5KHQsZSksdGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZz10aGlzLnBlbmRpbmcuY29uY2F0KHQpOnRoaXMucGVuZGluZz10LHRoaXMucGVuZGluZ1RvdGFsKz10Lmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3Q9dGhpcy5wZW5kaW5nO3ZhciByPXQubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9dC5zbGljZSh0Lmxlbmd0aC1yLHQubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSx0PW8uam9pbjMyKHQsMCx0Lmxlbmd0aC1yLHRoaXMuZW5kaWFuKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHQsbixuK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxhKG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdCh0KX0sbi5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucGVuZGluZ1RvdGFsLGU9dGhpcy5fZGVsdGE4LHI9ZS0odCt0aGlzLnBhZExlbmd0aCklZSxuPW5ldyBBcnJheShyK3RoaXMucGFkTGVuZ3RoKTtuWzBdPTEyODtmb3IodmFyIGk9MTtpPHI7aSsrKW5baV09MDtpZih0PDw9MyxcImJpZ1wiPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgbz04O288dGhpcy5wYWRMZW5ndGg7bysrKW5baSsrXT0wO25baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT10Pj4+MjQmMjU1LG5baSsrXT10Pj4+MTYmMjU1LG5baSsrXT10Pj4+OCYyNTUsbltpKytdPTI1NSZ0fWVsc2V7bltpKytdPTI1NSZ0LG5baSsrXT10Pj4+OCYyNTUsbltpKytdPXQ+Pj4xNiYyNTUsbltpKytdPXQ+Pj4yNCYyNTUsbltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPTA7Zm9yKHZhciBvPTg7bzx0aGlzLnBhZExlbmd0aDtvKyspbltpKytdPTB9cmV0dXJuIG59fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh0aGlzLkhhc2g9dCx0aGlzLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT10Lm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHZvaWQgdGhpcy5faW5pdChvLnRvQXJyYXkoZSxyKSkpOm5ldyBuKHQsZSxyKX12YXIgaT1yKDUwKSxvPWkudXRpbHMsYT1vLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0KXt0Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHQ9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh0KS5kaWdlc3QoKSksYSh0Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgZT10Lmxlbmd0aDtlPHRoaXMuYmxvY2tTaXplO2UrKyl0LnB1c2goMCk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXV49NTQ7dGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHQpO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV1ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodCl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZSh0LGUpLHRoaXN9LG4ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3QodCl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8obC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHZvaWQodGhpcy5lbmRpYW49XCJsaXR0bGVcIikpOm5ldyBufWZ1bmN0aW9uIGkodCxlLHIsbil7cmV0dXJuIHQ8PTE1P2Vecl5uOnQ8PTMxP2Umcnx+ZSZuOnQ8PTQ3PyhlfH5yKV5uOnQ8PTYzP2UmbnxyJn5uOmVeKHJ8fm4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PTE1PzA6dDw9MzE/MTUxODUwMDI0OTp0PD00Nz8xODU5Nzc1MzkzOnQ8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiBhKHQpe3JldHVybiB0PD0xNT8xMzUyODI5OTI2OnQ8PTMxPzE1NDg2MDM2ODQ6dDw9NDc/MTgzNjA3MjY5MTp0PD02Mz8yMDUzOTk0MjE3OjB9dmFyIGY9cig1MCkscz1mLnV0aWxzLHU9cy5yb3RsMzIsaD1zLnN1bTMyLGM9cy5zdW0zMl8zLGQ9cy5zdW0zMl80LGw9Zi5jb21tb24uQmxvY2tIYXNoO3MuaW5oZXJpdHMobixsKSxlLnJpcGVtZDE2MD1uLG4uYmxvY2tTaXplPTUxMixuLm91dFNpemU9MTYwLG4uaG1hY1N0cmVuZ3RoPTE5MixuLnBhZExlbmd0aD02NCxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuaFswXSxuPXRoaXMuaFsxXSxmPXRoaXMuaFsyXSxzPXRoaXMuaFszXSxsPXRoaXMuaFs0XSxtPXIsZz1uLHc9ZixfPXMsTT1sLFM9MDtTPDgwO1MrKyl7dmFyIEU9aCh1KGQocixpKFMsbixmLHMpLHRbcFtTXStlXSxvKFMpKSx2W1NdKSxsKTtyPWwsbD1zLHM9dShmLDEwKSxmPW4sbj1FLEU9aCh1KGQobSxpKDc5LVMsZyx3LF8pLHRbYltTXStlXSxhKFMpKSx5W1NdKSxNKSxtPU0sTT1fLF89dSh3LDEwKSx3PWcsZz1FfUU9Yyh0aGlzLmhbMV0sZixfKSx0aGlzLmhbMV09Yyh0aGlzLmhbMl0scyxNKSx0aGlzLmhbMl09Yyh0aGlzLmhbM10sbCxtKSx0aGlzLmhbM109Yyh0aGlzLmhbNF0scixnKSx0aGlzLmhbNF09Yyh0aGlzLmhbMF0sbix3KSx0aGlzLmhbMF09RX0sbi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9zLnRvSGV4MzIodGhpcy5oLFwibGl0dGxlXCIpOnMuc3BsaXQzMih0aGlzLmgsXCJsaXR0bGVcIil9O3ZhciBwPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGI9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sdj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0seT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVksdm9pZCh0aGlzLlc9bmV3IEFycmF5KDY0KSkpOm5ldyBufWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/KG4uY2FsbCh0aGlzKSx2b2lkKHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF0pKTpuZXcgaX1mdW5jdGlvbiBvKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBvPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9Vyx2b2lkKHRoaXMuVz1uZXcgQXJyYXkoMTYwKSkpOm5ldyBvfWZ1bmN0aW9uIGEoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGE/KG8uY2FsbCh0aGlzKSx2b2lkKHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF0pKTpuZXcgYX1mdW5jdGlvbiBmKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdm9pZCh0aGlzLlc9bmV3IEFycmF5KDgwKSkpOm5ldyBmfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiB0JmVefnQmcn1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4gdCZlXnQmcl5lJnJ9ZnVuY3Rpb24gaCh0LGUscil7cmV0dXJuIHReZV5yfWZ1bmN0aW9uIGModCl7cmV0dXJuIFIodCwyKV5SKHQsMTMpXlIodCwyMil9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gUih0LDYpXlIodCwxMSleUih0LDI1KX1mdW5jdGlvbiBsKHQpe3JldHVybiBSKHQsNyleUih0LDE4KV50Pj4+M31mdW5jdGlvbiBwKHQpe3JldHVybiBSKHQsMTcpXlIodCwxOSledD4+PjEwfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIDA9PT10P3MoZSxyLG4pOjE9PT10fHwzPT09dD9oKGUscixuKToyPT09dD91KGUscixuKTp2b2lkIDB9ZnVuY3Rpb24gdih0LGUscixuLGksbyl7dmFyIGE9dCZyXn50Jmk7cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24geSh0LGUscixuLGksbyl7dmFyIGE9ZSZuXn5lJm87cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gbSh0LGUscixuLGksbyl7dmFyIGE9dCZyXnQmaV5yJmk7cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gZyh0LGUscixuLGksbyl7dmFyIGE9ZSZuXmUmb15uJm87cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPU4odCxlLDI4KSxuPU4oZSx0LDIpLGk9TihlLHQsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBfKHQsZSl7dmFyIHI9TCh0LGUsMjgpLG49TChlLHQsMiksaT1MKGUsdCw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIE0odCxlKXt2YXIgcj1OKHQsZSwxNCksbj1OKHQsZSwxOCksaT1OKGUsdCw5KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIFModCxlKXt2YXIgcj1MKHQsZSwxNCksbj1MKHQsZSwxOCksaT1MKGUsdCw5KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj1OKHQsZSwxKSxuPU4odCxlLDgpLGk9VSh0LGUsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBBKHQsZSl7dmFyIHI9TCh0LGUsMSksbj1MKHQsZSw4KSxpPXoodCxlLDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gayh0LGUpe3ZhciByPU4odCxlLDE5KSxuPU4oZSx0LDI5KSxpPVUodCxlLDYpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24geCh0LGUpe3ZhciByPUwodCxlLDE5KSxuPUwoZSx0LDI5KSxpPXoodCxlLDYpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99dmFyIEk9cig1MCksQj1JLnV0aWxzLE89Qi5hc3NlcnQsUj1CLnJvdHIzMixQPUIucm90bDMyLFQ9Qi5zdW0zMixqPUIuc3VtMzJfNCxDPUIuc3VtMzJfNSxOPUIucm90cjY0X2hpLEw9Qi5yb3RyNjRfbG8sVT1CLnNocjY0X2hpLHo9Qi5zaHI2NF9sbyxEPUIuc3VtNjQscT1CLnN1bTY0X2hpLEY9Qi5zdW02NF9sbyxLPUIuc3VtNjRfNF9oaSxHPUIuc3VtNjRfNF9sbyxWPUIuc3VtNjRfNV9oaSxIPUIuc3VtNjRfNV9sbyxYPUkuY29tbW9uLkJsb2NrSGFzaCxZPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLFc9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSxaPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtCLmluaGVyaXRzKG4sWCksZS5zaGEyNTY9bixuLmJsb2NrU2l6ZT01MTIsbi5vdXRTaXplPTI1NixuLmhtYWNTdHJlbmd0aD0xOTIsbi5wYWRMZW5ndGg9NjQsbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MTY7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKyspcltuXT1qKHAocltuLTJdKSxyW24tN10sbChyW24tMTVdKSxyW24tMTZdKTt2YXIgaT10aGlzLmhbMF0sbz10aGlzLmhbMV0sYT10aGlzLmhbMl0sZj10aGlzLmhbM10saD10aGlzLmhbNF0sYj10aGlzLmhbNV0sdj10aGlzLmhbNl0seT10aGlzLmhbN107Tyh0aGlzLmsubGVuZ3RoPT09ci5sZW5ndGgpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgbT1DKHksZChoKSxzKGgsYix2KSx0aGlzLmtbbl0scltuXSksZz1UKGMoaSksdShpLG8sYSkpO3k9dix2PWIsYj1oLGg9VChmLG0pLGY9YSxhPW8sbz1pLGk9VChtLGcpfXRoaXMuaFswXT1UKHRoaXMuaFswXSxpKSx0aGlzLmhbMV09VCh0aGlzLmhbMV0sbyksdGhpcy5oWzJdPVQodGhpcy5oWzJdLGEpLHRoaXMuaFszXT1UKHRoaXMuaFszXSxmKSx0aGlzLmhbNF09VCh0aGlzLmhbNF0saCksdGhpcy5oWzVdPVQodGhpcy5oWzVdLGIpLHRoaXMuaFs2XT1UKHRoaXMuaFs2XSx2KSx0aGlzLmhbN109VCh0aGlzLmhbN10seSl9LG4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfSxCLmluaGVyaXRzKGksbiksZS5zaGEyMjQ9aSxpLmJsb2NrU2l6ZT01MTIsaS5vdXRTaXplPTIyNCxpLmhtYWNTdHJlbmd0aD0xOTIsaS5wYWRMZW5ndGg9NjQsaS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLFwiYmlnXCIpfSxCLmluaGVyaXRzKG8sWCksZS5zaGE1MTI9byxvLmJsb2NrU2l6ZT0xMDI0LG8ub3V0U2l6ZT01MTIsby5obWFjU3RyZW5ndGg9MTkyLG8ucGFkTGVuZ3RoPTEyOCxvLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuVyxuPTA7bjwzMjtuKyspcltuXT10W2Urbl07Zm9yKDtuPHIubGVuZ3RoO24rPTIpe3ZhciBpPWsocltuLTRdLHJbbi0zXSksbz14KHJbbi00XSxyW24tM10pLGE9cltuLTE0XSxmPXJbbi0xM10scz1FKHJbbi0zMF0scltuLTI5XSksdT1BKHJbbi0zMF0scltuLTI5XSksaD1yW24tMzJdLGM9cltuLTMxXTtyW25dPUsoaSxvLGEsZixzLHUsaCxjKSxyW24rMV09RyhpLG8sYSxmLHMsdSxoLGMpfX0sby5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ByZXBhcmVCbG9jayh0LGUpO3ZhciByPXRoaXMuVyxuPXRoaXMuaFswXSxpPXRoaXMuaFsxXSxvPXRoaXMuaFsyXSxhPXRoaXMuaFszXSxmPXRoaXMuaFs0XSxzPXRoaXMuaFs1XSx1PXRoaXMuaFs2XSxoPXRoaXMuaFs3XSxjPXRoaXMuaFs4XSxkPXRoaXMuaFs5XSxsPXRoaXMuaFsxMF0scD10aGlzLmhbMTFdLGI9dGhpcy5oWzEyXSxFPXRoaXMuaFsxM10sQT10aGlzLmhbMTRdLGs9dGhpcy5oWzE1XTtPKHRoaXMuay5sZW5ndGg9PT1yLmxlbmd0aCk7Zm9yKHZhciB4PTA7eDxyLmxlbmd0aDt4Kz0yKXt2YXIgST1BLEI9ayxSPU0oYyxkKSxQPVMoYyxkKSxUPXYoYyxkLGwscCxiLEUpLGo9eShjLGQsbCxwLGIsRSksQz10aGlzLmtbeF0sTj10aGlzLmtbeCsxXSxMPXJbeF0sVT1yW3grMV0sej1WKEksQixSLFAsVCxqLEMsTixMLFUpLEs9SChJLEIsUixQLFQsaixDLE4sTCxVKSxJPXcobixpKSxCPV8obixpKSxSPW0obixpLG8sYSxmLHMpLFA9ZyhuLGksbyxhLGYscyksRz1xKEksQixSLFApLFg9RihJLEIsUixQKTtBPWIsaz1FLGI9bCxFPXAsbD1jLHA9ZCxjPXEodSxoLHosSyksZD1GKGgsaCx6LEspLHU9ZixoPXMsZj1vLHM9YSxvPW4sYT1pLG49cSh6LEssRyxYKSxpPUYoeixLLEcsWCl9RCh0aGlzLmgsMCxuLGkpLEQodGhpcy5oLDIsbyxhKSxEKHRoaXMuaCw0LGYscyksRCh0aGlzLmgsNix1LGgpLEQodGhpcy5oLDgsYyxkKSxEKHRoaXMuaCwxMCxsLHApLEQodGhpcy5oLDEyLGIsRSksRCh0aGlzLmgsMTQsQSxrKX0sby5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9LEIuaW5oZXJpdHMoYSxvKSxlLnNoYTM4ND1hLGEuYmxvY2tTaXplPTEwMjQsYS5vdXRTaXplPTM4NCxhLmhtYWNTdHJlbmd0aD0xOTIsYS5wYWRMZW5ndGg9MTI4LGEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLFwiYmlnXCIpfSxCLmluaGVyaXRzKGYsWCksZS5zaGExPWYsZi5ibG9ja1NpemU9NTEyLGYub3V0U2l6ZT0xNjAsZi5obWFjU3RyZW5ndGg9ODAsZi5wYWRMZW5ndGg9NjQsZi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MTY7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKyspcltuXT1QKHJbbi0zXV5yW24tOF1ecltuLTE0XV5yW24tMTZdLDEpO2Zvcih2YXIgaT10aGlzLmhbMF0sbz10aGlzLmhbMV0sYT10aGlzLmhbMl0sZj10aGlzLmhbM10scz10aGlzLmhbNF0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgdT1+fihuLzIwKSxoPUMoUChpLDUpLGIodSxvLGEsZikscyxyW25dLFpbdV0pO3M9ZixmPWEsYT1QKG8sMzApLG89aSxpPWh9dGhpcy5oWzBdPVQodGhpcy5oWzBdLGkpLHRoaXMuaFsxXT1UKHRoaXMuaFsxXSxvKSx0aGlzLmhbMl09VCh0aGlzLmhbMl0sYSksdGhpcy5oWzNdPVQodGhpcy5oWzNdLGYpLHRoaXMuaFs0XT1UKHRoaXMuaFs0XSxzKX0sZi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuc2xpY2UoKTtpZighdClyZXR1cm5bXTt2YXIgcj1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpZihlKXtpZihcImhleFwiPT09ZSl7dD10LnJlcGxhY2UoL1teYS16MC05XSsvZ2ksXCJcIiksdC5sZW5ndGglMiE9PTAmJih0PVwiMFwiK3QpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MilyLnB1c2gocGFyc2VJbnQodFtuXSt0W24rMV0sMTYpKX19ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dC5jaGFyQ29kZUF0KG4pLG89aT4+OCxhPTI1NSZpO28/ci5wdXNoKG8sYSk6ci5wdXNoKGEpfWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT0wfHRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspZSs9Zih0W3JdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0KXt2YXIgZT10Pj4+MjR8dD4+PjgmNjUyODB8dDw8OCYxNjcxMTY4MHwoMjU1JnQpPDwyNDtyZXR1cm4gZT4+PjB9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1cIlwiLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtcImxpdHRsZVwiPT09ZSYmKGk9byhpKSkscis9cyhpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP1wiMFwiK3Q6dH1mdW5jdGlvbiBzKHQpe3JldHVybiA3PT09dC5sZW5ndGg/XCIwXCIrdDo2PT09dC5sZW5ndGg/XCIwMFwiK3Q6NT09PXQubGVuZ3RoP1wiMDAwXCIrdDo0PT09dC5sZW5ndGg/XCIwMDAwXCIrdDozPT09dC5sZW5ndGg/XCIwMDAwMFwiK3Q6Mj09PXQubGVuZ3RoP1wiMDAwMDAwXCIrdDoxPT09dC5sZW5ndGg/XCIwMDAwMDAwXCIrdDp0fWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9ci1lO3koaSU0PT09MCk7Zm9yKHZhciBvPW5ldyBBcnJheShpLzQpLGE9MCxmPWU7YTxvLmxlbmd0aDthKyssZis9NCl7dmFyIHM7cz1cImJpZ1wiPT09bj90W2ZdPDwyNHx0W2YrMV08PDE2fHRbZisyXTw8OHx0W2YrM106dFtmKzNdPDwyNHx0W2YrMl08PDE2fHRbZisxXTw8OHx0W2ZdLG9bYV09cz4+PjB9cmV0dXJuIG99ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoNCp0Lmxlbmd0aCksbj0wLGk9MDtuPHQubGVuZ3RoO24rKyxpKz00KXt2YXIgbz10W25dO1wiYmlnXCI9PT1lPyhyW2ldPW8+Pj4yNCxyW2krMV09bz4+PjE2JjI1NSxyW2krMl09bz4+PjgmMjU1LHJbaSszXT0yNTUmbyk6KHJbaSszXT1vPj4+MjQscltpKzJdPW8+Pj4xNiYyNTUscltpKzFdPW8+Pj44JjI1NSxyW2ldPTI1NSZvKX1yZXR1cm4gcn1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQ+Pj5lfHQ8PDMyLWV9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0PDxlfHQ+Pj4zMi1lfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdCtlPj4+MH1mdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gdCtlK3I+Pj4wfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIHQrZStyK24+Pj4wfWZ1bmN0aW9uIHYodCxlLHIsbixpKXtyZXR1cm4gdCtlK3IrbitpPj4+MH1mdW5jdGlvbiB5KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBpPXRbZV0sbz10W2UrMV0sYT1uK28+Pj4wLGY9KGE8bj8xOjApK3IraTt0W2VdPWY+Pj4wLHRbZSsxXT1hfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9ZStuPj4+MCxvPShpPGU/MTowKSt0K3I7cmV0dXJuIG8+Pj4wfWZ1bmN0aW9uIHcodCxlLHIsbil7dmFyIGk9ZStuO3JldHVybiBpPj4+MH1mdW5jdGlvbiBfKHQsZSxyLG4saSxvLGEsZil7dmFyIHM9MCx1PWU7dT11K24+Pj4wLHMrPXU8ZT8xOjAsdT11K28+Pj4wLHMrPXU8bz8xOjAsdT11K2Y+Pj4wLHMrPXU8Zj8xOjA7dmFyIGg9dCtyK2krYStzO3JldHVybiBoPj4+MH1mdW5jdGlvbiBNKHQsZSxyLG4saSxvLGEsZil7dmFyIHM9ZStuK28rZjtyZXR1cm4gcz4+PjB9ZnVuY3Rpb24gUyh0LGUscixuLGksbyxhLGYscyx1KXt2YXIgaD0wLGM9ZTtjPWMrbj4+PjAsaCs9YzxlPzE6MCxjPWMrbz4+PjAsaCs9YzxvPzE6MCxjPWMrZj4+PjAsaCs9YzxmPzE6MCxjPWMrdT4+PjAsaCs9Yzx1PzE6MDt2YXIgZD10K3IraSthK3MraDtyZXR1cm4gZD4+PjB9ZnVuY3Rpb24gRSh0LGUscixuLGksbyxhLGYscyx1KXt2YXIgaD1lK24rbytmK3U7cmV0dXJuIGg+Pj4wfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPWU8PDMyLXJ8dD4+PnI7cmV0dXJuIG4+Pj4wfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPXQ8PDMyLXJ8ZT4+PnI7cmV0dXJuIG4+Pj4wfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiB0Pj4+cn1mdW5jdGlvbiBJKHQsZSxyKXt2YXIgbj10PDwzMi1yfGU+Pj5yO3JldHVybiBuPj4+MH12YXIgQj1lLE89cigyKTtCLnRvQXJyYXk9bixCLnRvSGV4PWksQi5odG9ubD1vLEIudG9IZXgzMj1hLEIuemVybzI9ZixCLnplcm84PXMsQi5qb2luMzI9dSxCLnNwbGl0MzI9aCxCLnJvdHIzMj1jLEIucm90bDMyPWQsQi5zdW0zMj1sLEIuc3VtMzJfMz1wLEIuc3VtMzJfND1iLEIuc3VtMzJfNT12LEIuYXNzZXJ0PXksQi5pbmhlcml0cz1PLGUuc3VtNjQ9bSxlLnN1bTY0X2hpPWcsZS5zdW02NF9sbz13LGUuc3VtNjRfNF9oaT1fLGUuc3VtNjRfNF9sbz1NLGUuc3VtNjRfNV9oaT1TLGUuc3VtNjRfNV9sbz1FLGUucm90cjY0X2hpPUEsZS5yb3RyNjRfbG89ayxlLnNocjY0X2hpPXgsZS5zaHI2NF9sbz1JfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSxyKXtpZihlLmxlbmd0aCVvIT09MCl7dmFyIG49ZS5sZW5ndGgrKG8tZS5sZW5ndGglbyk7ZT10LmNvbmNhdChbZSxhXSxuKX1mb3IodmFyIGk9W10sZj1yP2UucmVhZEludDMyQkU6ZS5yZWFkSW50MzJMRSxzPTA7czxlLmxlbmd0aDtzKz1vKWkucHVzaChmLmNhbGwoZSxzKSk7cmV0dXJuIGl9ZnVuY3Rpb24gbihlLHIsbil7Zm9yKHZhciBpPW5ldyB0KHIpLG89bj9pLndyaXRlSW50MzJCRTppLndyaXRlSW50MzJMRSxhPTA7YTxlLmxlbmd0aDthKyspby5jYWxsKGksZVthXSw0KmEsITApO3JldHVybiBpfWZ1bmN0aW9uIGkoZSxpLG8sYSl7dC5pc0J1ZmZlcihlKXx8KGU9bmV3IHQoZSkpO3ZhciBzPWkocihlLGEpLGUubGVuZ3RoKmYpO3JldHVybiBuKHMsbyxhKX12YXIgbz00LGE9bmV3IHQobyk7YS5maWxsKDApO3ZhciBmPTg7ZS5oYXNoPWl9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9XCJzdHJpbmdcIj09dHlwZW9mIHQsdGhpcy5oYXNoTW9kZT90aGlzW3RdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXZhciBpPXIoMzEpLlRyYW5zZm9ybSxvPXIoMiksYT1yKDUyKS5TdHJpbmdEZWNvZGVyO3QuZXhwb3J0cz1uLG8obixpKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKTt2YXIgaT10aGlzLl91cGRhdGUodCk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoobiYmKGk9dGhpcy5fdG9TdHJpbmcoaSxuKSksaSl9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodCk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh0KSl9Y2F0Y2godCl7bj10fWZpbmFsbHl7cihuKX19LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dGhpcy5wdXNoKHRoaXMuX2ZpbmFsKCkpfWNhdGNoKHQpe2U9dH1maW5hbGx5e3QoZSl9fSxuLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9maW5hbCgpfHxuZXcgZShcIlwiKTtyZXR1cm4gdCYmKHI9dGhpcy5fdG9TdHJpbmcocix0LCEwKSkscn0sbi5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgYShlKSx0aGlzLl9lbmNvZGluZz1lKSx0aGlzLl9lbmNvZGluZyE9PWUpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc3dpdGNoIGVuY29kaW5nc1wiKTt2YXIgbj10aGlzLl9kZWNvZGVyLndyaXRlKHQpO3JldHVybiByJiYobis9dGhpcy5fZGVjb2Rlci5lbmQoKSksbn19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7Zm9yKHZhciBlPVtdLHI9MCxuPTA7cjx0Lmxlbmd0aDtyKyssbis9OCllW24+Pj41XXw9dFtyXTw8MjQtbiUzMjtyZXR1cm4gZX1mdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjwzMip0Lmxlbmd0aDtyKz04KWUucHVzaCh0W3I+Pj41XT4+PjI0LXIlMzImMjU1KTtyZXR1cm4gZX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49MDtuPDE2O24rKyl7dmFyIGk9cituLGM9ZVtpXTtlW2ldPTE2NzExOTM1JihjPDw4fGM+Pj4yNCl8NDI3ODI1NTM2MCYoYzw8MjR8Yz4+PjgpfXZhciBtLGcsdyxfLE0sUyxFLEEsayx4O1M9bT10WzBdLEU9Zz10WzFdLEE9dz10WzJdLGs9Xz10WzNdLHg9TT10WzRdO3ZhciBJO2ZvcihuPTA7bjw4MDtuKz0xKUk9bStlW3IrZFtuXV18MCxJKz1uPDE2P28oZyx3LF8pK3ZbMF06bjwzMj9hKGcsdyxfKSt2WzFdOm48NDg/ZihnLHcsXykrdlsyXTpuPDY0P3MoZyx3LF8pK3ZbM106dShnLHcsXykrdls0XSxJfD0wLEk9aChJLHBbbl0pLEk9SStNfDAsbT1NLE09XyxfPWgodywxMCksdz1nLGc9SSxJPVMrZVtyK2xbbl1dfDAsSSs9bjwxNj91KEUsQSxrKSt5WzBdOm48MzI/cyhFLEEsaykreVsxXTpuPDQ4P2YoRSxBLGspK3lbMl06bjw2ND9hKEUsQSxrKSt5WzNdOm8oRSxBLGspK3lbNF0sSXw9MCxJPWgoSSxiW25dKSxJPUkreHwwLFM9eCx4PWssaz1oKEEsMTApLEE9RSxFPUk7ST10WzFdK3cra3wwLHRbMV09dFsyXStfK3h8MCx0WzJdPXRbM10rTStTfDAsdFszXT10WzRdK20rRXwwLHRbNF09dFswXStnK0F8MCx0WzBdPUl9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHReZV5yfWZ1bmN0aW9uIGEodCxlLHIpe3JldHVybiB0JmV8fnQmcn1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4odHx+ZSlecn1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gdCZyfGUmfnJ9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHReKGV8fnIpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdDw8ZXx0Pj4+MzItZX1mdW5jdGlvbiBjKHQpe3ZhciBvPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF07XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQsXCJ1dGY4XCIpKTt2YXIgYT1yKHQpLGY9OCp0Lmxlbmd0aCxzPTgqdC5sZW5ndGg7YVtmPj4+NV18PTEyODw8MjQtZiUzMixhWyhmKzY0Pj4+OTw8NCkrMTRdPTE2NzExOTM1JihzPDw4fHM+Pj4yNCl8NDI3ODI1NTM2MCYoczw8MjR8cz4+PjgpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSs9MTYpaShvLGEsdSk7Zm9yKHU9MDt1PDU7dSsrKXt2YXIgaD1vW3VdO29bdV09MTY3MTE5MzUmKGg8PDh8aD4+PjI0KXw0Mjc4MjU1MzYwJihoPDwyNHxoPj4+OCl9dmFyIGM9bihvKTtyZXR1cm4gbmV3IGUoYyl9LyoqIEBwcmVzZXJ2ZVxuKGMpIDIwMTIgYnkgQ8OpZHJpYyBNZXNuaWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xudmFyIGQ9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sbD1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxwPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxiPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSx2PVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLHk9WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQyMTcsMF07dC5leHBvcnRzPWN9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7dmFyIGU9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3Q9dC50b0xvd2VyQ2FzZSgpO3ZhciByPWVbdF07aWYoIXIpdGhyb3cgbmV3IEVycm9yKHQrXCIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpXCIpO3JldHVybiBuZXcgcn07ZS5zaGE9cig1NjkpLGUuc2hhMT1yKDU3MCksZS5zaGEyMjQ9cig1NzEpLGUuc2hhMjU2PXIoMjI3KSxlLnNoYTM4ND1yKDU3MiksZS5zaGE1MTI9cigyMjgpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmluaXQoKSx0aGlzLl93PWgscy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ8PDV8dD4+PjI3fWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PDMwfHQ+Pj4yfWZ1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuIDA9PT10P2Umcnx+ZSZuOjI9PT10P2UmcnxlJm58ciZuOmVecl5ufXZhciBmPXIoMikscz1yKDYwKSx1PVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0saD1uZXcgQXJyYXkoODApO2YobixzKSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl93LHI9MHx0aGlzLl9hLG49MHx0aGlzLl9iLGY9MHx0aGlzLl9jLHM9MHx0aGlzLl9kLGg9MHx0aGlzLl9lLGM9MDtjPDE2OysrYyllW2NdPXQucmVhZEludDMyQkUoNCpjKTtmb3IoO2M8ODA7KytjKWVbY109ZVtjLTNdXmVbYy04XV5lW2MtMTRdXmVbYy0xNl07Zm9yKHZhciBkPTA7ZDw4MDsrK2Qpe3ZhciBsPX5+KGQvMjApLHA9aShyKSthKGwsbixmLHMpK2grZVtkXSt1W2xdfDA7aD1zLHM9ZixmPW8obiksbj1yLHI9cH10aGlzLl9hPXIrdGhpcy5fYXwwLHRoaXMuX2I9bit0aGlzLl9ifDAsdGhpcy5fYz1mK3RoaXMuX2N8MCx0aGlzLl9kPXMrdGhpcy5fZHwwLHRoaXMuX2U9aCt0aGlzLl9lfDB9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUoMjApO3JldHVybiB0LndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksdH0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmluaXQoKSx0aGlzLl93PWMsdS5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ8PDF8dD4+PjMxfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PDV8dD4+PjI3fWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQ8PDMwfHQ+Pj4yfWZ1bmN0aW9uIGYodCxlLHIsbil7cmV0dXJuIDA9PT10P2Umcnx+ZSZuOjI9PT10P2UmcnxlJm58ciZuOmVecl5ufXZhciBzPXIoMiksdT1yKDYwKSxoPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sYz1uZXcgQXJyYXkoODApO3Mobix1KSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl93LHI9MHx0aGlzLl9hLG49MHx0aGlzLl9iLHM9MHx0aGlzLl9jLHU9MHx0aGlzLl9kLGM9MHx0aGlzLl9lLGQ9MDtkPDE2OysrZCllW2RdPXQucmVhZEludDMyQkUoNCpkKTtmb3IoO2Q8ODA7KytkKWVbZF09aShlW2QtM11eZVtkLThdXmVbZC0xNF1eZVtkLTE2XSk7Zm9yKHZhciBsPTA7bDw4MDsrK2wpe3ZhciBwPX5+KGwvMjApLGI9byhyKStmKHAsbixzLHUpK2MrZVtsXStoW3BdfDA7Yz11LHU9cyxzPWEobiksbj1yLHI9Yn10aGlzLl9hPXIrdGhpcy5fYXwwLHRoaXMuX2I9bit0aGlzLl9ifDAsdGhpcy5fYz1zK3RoaXMuX2N8MCx0aGlzLl9kPXUrdGhpcy5fZHwwLHRoaXMuX2U9Yyt0aGlzLl9lfDB9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUoMjApO3JldHVybiB0LndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksdH0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmluaXQoKSx0aGlzLl93PWYsYS5jYWxsKHRoaXMsNjQsNTYpfXZhciBpPXIoMiksbz1yKDIyNyksYT1yKDYwKSxmPW5ldyBBcnJheSg2NCk7aShuLG8pLG4ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sbi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSgyOCk7cmV0dXJuIHQud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksdC53cml0ZUludDMyQkUodGhpcy5fYiw0KSx0LndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLHQud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLHR9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz1mLGEuY2FsbCh0aGlzLDEyOCwxMTIpfXZhciBpPXIoMiksbz1yKDIyOCksYT1yKDYwKSxmPW5ldyBBcnJheSgxNjApO2kobixvKSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sbi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtyLndyaXRlSW50MzJCRSh0LG4pLHIud3JpdGVJbnQzMkJFKGUsbis0KX12YXIgcj1uZXcgZSg0OCk7cmV0dXJuIHQodGhpcy5fYWgsdGhpcy5fYWwsMCksdCh0aGlzLl9iaCx0aGlzLl9ibCw4KSx0KHRoaXMuX2NoLHRoaXMuX2NsLDE2KSx0KHRoaXMuX2RoLHRoaXMuX2RsLDI0KSx0KHRoaXMuX2VoLHRoaXMuX2VsLDMyKSx0KHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxyfSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXt2YXIgcj1uZXcgdChhW2VdLnByaW1lLFwiaGV4XCIpLG49bmV3IHQoYVtlXS5nZW4sXCJoZXhcIik7cmV0dXJuIG5ldyBmKHIsbil9ZnVuY3Rpb24gaShlLHIsbixhKXtyZXR1cm4gdC5pc0J1ZmZlcihyKXx8dm9pZCAwPT09c1tyXT9pKGUsXCJiaW5hcnlcIixyLG4pOihyPXJ8fFwiYmluYXJ5XCIsYT1hfHxcImJpbmFyeVwiLG49bnx8bmV3IHQoWzJdKSx0LmlzQnVmZmVyKG4pfHwobj1uZXcgdChuLGEpKSxcIm51bWJlclwiPT10eXBlb2YgZT9uZXcgZihvKGUsbiksbiwhMCk6KHQuaXNCdWZmZXIoZSl8fChlPW5ldyB0KGUscikpLG5ldyBmKGUsbiwhMCkpKX12YXIgbz1yKDIyOSksYT1yKDQ2OCksZj1yKDU3NCkscz17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O2UuRGlmZmllSGVsbG1hbkdyb3VwPWUuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPWUuZ2V0RGlmZmllSGVsbG1hbj1uLGUuY3JlYXRlRGlmZmllSGVsbG1hbj1lLkRpZmZpZUhlbGxtYW49aX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIpe3JldHVybiByPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpLHRoaXMuX3B1Yj1uZXcgcyh0KSx0aGlzfWZ1bmN0aW9uIGkodCxyKXtyZXR1cm4gcj1yfHxcInV0ZjhcIixlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LHIpKSx0aGlzLl9wcml2PW5ldyBzKHQpLHRoaXN9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWUudG9TdHJpbmcoXCJoZXhcIiksbj1bcix0LnRvU3RyaW5nKDE2KV0uam9pbihcIl9cIik7aWYobiBpbiBtKXJldHVybiBtW25dO3ZhciBpPTA7aWYodC5pc0V2ZW4oKXx8IXYuc2ltcGxlU2lldmV8fCF2LmZlcm1hdFRlc3QodCl8fCFoLnRlc3QodCkpcmV0dXJuIGkrPTEsaSs9XCIwMlwiPT09cnx8XCIwNVwiPT09cj84OjQsbVtuXT1pLGk7aC50ZXN0KHQuc2hybigxKSl8fChpKz0yKTt2YXIgbztzd2l0Y2gocil7Y2FzZVwiMDJcIjp0Lm1vZChjKS5jbXAoZCkmJihpKz04KTticmVhaztjYXNlXCIwNVwiOm89dC5tb2QobCksby5jbXAocCkmJm8uY21wKGIpJiYoaSs9OCk7YnJlYWs7ZGVmYXVsdDppKz00fXJldHVybiBtW25dPWksaX1mdW5jdGlvbiBhKHQsZSxyKXt0aGlzLnNldEdlbmVyYXRvcihlKSx0aGlzLl9fcHJpbWU9bmV3IHModCksdGhpcy5fcHJpbWU9cy5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49dC5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLHI/KHRoaXMuc2V0UHVibGljS2V5PW4sdGhpcy5zZXRQcml2YXRlS2V5PWkpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIGYodCxyKXt2YXIgbj1uZXcgZSh0LnRvQXJyYXkoKSk7cmV0dXJuIHI/bi50b1N0cmluZyhyKTpufXZhciBzPXIoMTUwKSx1PXIoMjMwKSxoPW5ldyB1LGM9bmV3IHMoMjQpLGQ9bmV3IHMoMTEpLGw9bmV3IHMoMTApLHA9bmV3IHMoMyksYj1uZXcgcyg3KSx2PXIoMjI5KSx5PXIoNjEpO3QuZXhwb3J0cz1hO3ZhciBtPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSxcInZlcmlmeUVycm9yXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1vKHRoaXMuX19wcmltZSx0aGlzLl9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLGEucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgcyh5KHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0sYS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbih0KXt0PW5ldyBzKHQpLHQ9dC50b1JlZCh0aGlzLl9wcmltZSk7dmFyIHI9dC5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLG49bmV3IGUoci50b0FycmF5KCkpLGk9dGhpcy5nZXRQcmltZSgpO2lmKG4ubGVuZ3RoPGkubGVuZ3RoKXt2YXIgbz1uZXcgZShpLmxlbmd0aC1uLmxlbmd0aCk7by5maWxsKDApLG49ZS5jb25jYXQoW28sbl0pfXJldHVybiBufSxhLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGYodGhpcy5fcHViLHQpfSxhLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBmKHRoaXMuX3ByaXYsdCl9LGEucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKHQpe3JldHVybiBmKHRoaXMuX19wcmltZSx0KX0sYS5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBmKHRoaXMuX2dlbix0KX0sYS5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKHQscil7cmV0dXJuIHI9cnx8XCJ1dGY4XCIsZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxyKSksdGhpcy5fX2dlbj10LHRoaXMuX2dlbj1uZXcgcyh0KSx0aGlzfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMucmFuZD10fXZhciBpO2lmKHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXx8KGk9bmV3IG4obnVsbCkpLGkuZ2VuZXJhdGUodCl9LHQuZXhwb3J0cy5SYW5kPW4sbi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhbmQodCl9LFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpd2luZG93LmNyeXB0byYmd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGV9OndpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9uLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlfTpuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZCB5ZXRcIil9O2Vsc2UgdHJ5e3ZhciBvPXIoNjExKTtuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gby5yYW5kb21CeXRlcyh0KX19Y2F0Y2godCl7bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHQpLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIGV9fX0sZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnBvdygyLDMwKS0xO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJJdGVyYXRpb25zIG5vdCBhIG51bWJlclwiKTtpZih0PDApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJhZCBpdGVyYXRpb25zXCIpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJLZXkgbGVuZ3RoIG5vdCBhIG51bWJlclwiKTtpZihlPDB8fGU+cnx8ZSE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJhZCBrZXkgbGVuZ3RoXCIpfX0sZnVuY3Rpb24odCxlLHIpe2UucHVibGljRW5jcnlwdD1yKDU5MyksZS5wcml2YXRlRGVjcnlwdD1yKDU5MiksZS5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbih0LHIpe3JldHVybiBlLnB1YmxpY0VuY3J5cHQodCxyLCEwKX0sZS5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKHQscil7cmV0dXJuIGUucHJpdmF0ZURlY3J5cHQodCxyLCEwKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEwNiksaT1uLmRlZmluZShcIlJTQVByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcIm1vZHVsdXNcIikuaW50KCksdGhpcy5rZXkoXCJwdWJsaWNFeHBvbmVudFwiKS5pbnQoKSx0aGlzLmtleShcInByaXZhdGVFeHBvbmVudFwiKS5pbnQoKSx0aGlzLmtleShcInByaW1lMVwiKS5pbnQoKSx0aGlzLmtleShcInByaW1lMlwiKS5pbnQoKSx0aGlzLmtleShcImV4cG9uZW50MVwiKS5pbnQoKSx0aGlzLmtleShcImV4cG9uZW50MlwiKS5pbnQoKSx0aGlzLmtleShcImNvZWZmaWNpZW50XCIpLmludCgpKX0pO2UuUlNBUHJpdmF0ZUtleT1pO3ZhciBvPW4uZGVmaW5lKFwiUlNBUHVibGljS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcIm1vZHVsdXNcIikuaW50KCksdGhpcy5rZXkoXCJwdWJsaWNFeHBvbmVudFwiKS5pbnQoKSl9KTtlLlJTQVB1YmxpY0tleT1vO3ZhciBhPW4uZGVmaW5lKFwiU3ViamVjdFB1YmxpY0tleUluZm9cIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnVzZShmKSx0aGlzLmtleShcInN1YmplY3RQdWJsaWNLZXlcIikuYml0c3RyKCkpfSk7ZS5QdWJsaWNLZXk9YTt2YXIgZj1uLmRlZmluZShcIkFsZ29yaXRobUlkZW50aWZpZXJcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLm9iamlkKCksdGhpcy5rZXkoXCJub25lXCIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleShcImN1cnZlXCIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleShcInBhcmFtc1wiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJwXCIpLmludCgpLHRoaXMua2V5KFwicVwiKS5pbnQoKSx0aGlzLmtleShcImdcIikuaW50KCkpLm9wdGlvbmFsKCkpfSkscz1uLmRlZmluZShcIlByaXZhdGVLZXlJbmZvXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJhbGdvcml0aG1cIikudXNlKGYpLHRoaXMua2V5KFwic3ViamVjdFByaXZhdGVLZXlcIikub2N0c3RyKCkpfSk7ZS5Qcml2YXRlS2V5PXM7dmFyIHU9bi5kZWZpbmUoXCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mb1wiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikuc2VxKCkub2JqKHRoaXMua2V5KFwiaWRcIikub2JqaWQoKSx0aGlzLmtleShcImRlY3J5cHRcIikuc2VxKCkub2JqKHRoaXMua2V5KFwia2RlXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImlkXCIpLm9iamlkKCksdGhpcy5rZXkoXCJrZGVwYXJhbXNcIikuc2VxKCkub2JqKHRoaXMua2V5KFwic2FsdFwiKS5vY3RzdHIoKSx0aGlzLmtleShcIml0ZXJzXCIpLmludCgpKSksdGhpcy5rZXkoXCJjaXBoZXJcIikuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb1wiKS5vYmppZCgpLHRoaXMua2V5KFwiaXZcIikub2N0c3RyKCkpKSksdGhpcy5rZXkoXCJzdWJqZWN0UHJpdmF0ZUtleVwiKS5vY3RzdHIoKSl9KTtlLkVuY3J5cHRlZFByaXZhdGVLZXk9dTt2YXIgaD1uLmRlZmluZShcIkRTQVByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcInBcIikuaW50KCksdGhpcy5rZXkoXCJxXCIpLmludCgpLHRoaXMua2V5KFwiZ1wiKS5pbnQoKSx0aGlzLmtleShcInB1Yl9rZXlcIikuaW50KCksdGhpcy5rZXkoXCJwcml2X2tleVwiKS5pbnQoKSl9KTtlLkRTQVByaXZhdGVLZXk9aCxlLkRTQXBhcmFtPW4uZGVmaW5lKFwiRFNBcGFyYW1cIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgYz1uLmRlZmluZShcIkVDUHJpdmF0ZUtleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwicHJpdmF0ZUtleVwiKS5vY3RzdHIoKSx0aGlzLmtleShcInBhcmFtZXRlcnNcIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoZCksdGhpcy5rZXkoXCJwdWJsaWNLZXlcIikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtlLkVDUHJpdmF0ZUtleT1jO3ZhciBkPW4uZGVmaW5lKFwiRUNQYXJhbWV0ZXJzXCIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pO2Uuc2lnbmF0dXJlPW4uZGVmaW5lKFwic2lnbmF0dXJlXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInJcIikuaW50KCksdGhpcy5rZXkoXCJzXCIpLmludCgpKX0pfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe3ZhciBuPS9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEXFxyP1xcbkRFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylcXHI/XFxuXFxyP1xcbihbMC05QS16XFxuXFxyXFwrXFwvXFw9XSspXFxyP1xcbi9tLGk9L14tLS0tLUJFR0lOICguKikgS0VZLS0tLS1cXHI/XFxuL20sbz0vXi0tLS0tQkVHSU4gKC4qKSBLRVktLS0tLVxccj9cXG4oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxccj9cXG4tLS0tLUVORCBcXDEgS0VZLS0tLS0kL20sYT1yKDE1MyksZj1yKDIzOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7dmFyIHMsdT10LnRvU3RyaW5nKCksaD11Lm1hdGNoKG4pO2lmKGgpe3ZhciBjPVwiYWVzXCIraFsxXSxkPW5ldyBlKGhbMl0sXCJoZXhcIiksbD1uZXcgZShoWzNdLnJlcGxhY2UoL1xccj9cXG4vZyxcIlwiKSxcImJhc2U2NFwiKSxwPWEocixkLnNsaWNlKDAsOCkscGFyc2VJbnQoaFsxXSwxMCkpLmtleSxiPVtdLHY9Zi5jcmVhdGVEZWNpcGhlcml2KGMscCxkKTtiLnB1c2godi51cGRhdGUobCkpLGIucHVzaCh2LmZpbmFsKCkpLHM9ZS5jb25jYXQoYil9ZWxzZXt2YXIgeT11Lm1hdGNoKG8pO3M9bmV3IGUoeVsyXS5yZXBsYWNlKC9cXHI/XFxuL2csXCJcIiksXCJiYXNlNjRcIil9dmFyIG09dS5tYXRjaChpKVsxXStcIiBLRVlcIjtyZXR1cm57dGFnOm0sZGF0YTpzfX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3RoaXMubmFtZT10LHRoaXMuYm9keT1lLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX12YXIgaT1yKDEwNiksbz1yKDIpLGE9ZTthLmRlZmluZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgbih0LGUpfSxuLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9cigyNTEpLnJ1bkluVGhpc0NvbnRleHQoXCIoZnVuY3Rpb24gXCIrdGhpcy5uYW1lK1wiKGVudGl0eSkge1xcbiAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XFxufSlcIil9Y2F0Y2godCl7ZT1mdW5jdGlvbih0KXt0aGlzLl9pbml0TmFtZWQodCl9fXJldHVybiBvKGUsdCksZS5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihlKXt0LmNhbGwodGhpcyxlKX0sbmV3IGUodGhpcyl9LG4ucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PXR8fFwiZGVyXCIsdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuZGVjb2RlcnNbdF09dGhpcy5fY3JlYXRlTmFtZWQoaS5kZWNvZGVyc1t0XSkpLHRoaXMuZGVjb2RlcnNbdF19LG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoZSkuZGVjb2RlKHQscil9LG4ucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PXR8fFwiZGVyXCIsdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuZW5jb2RlcnNbdF09dGhpcy5fY3JlYXRlTmFtZWQoaS5lbmNvZGVyc1t0XSkpLHRoaXMuZW5jb2RlcnNbdF19LG4ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoZSkuZW5jb2RlKHQscil9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXt9O3RoaXMuX2Jhc2VTdGF0ZT1yLHIuZW5jPXQsci5wYXJlbnQ9ZXx8bnVsbCxyLmNoaWxkcmVuPW51bGwsci50YWc9bnVsbCxyLmFyZ3M9bnVsbCxyLnJldmVyc2VBcmdzPW51bGwsci5jaG9pY2U9bnVsbCxyLm9wdGlvbmFsPSExLHIuYW55PSExLHIub2JqPSExLHIudXNlPW51bGwsci51c2VEZWNvZGVyPW51bGwsci5rZXk9bnVsbCxyLmRlZmF1bHQ9bnVsbCxyLmV4cGxpY2l0PW51bGwsci5pbXBsaWNpdD1udWxsLHIuY29udGFpbnM9bnVsbCxyLnBhcmVudHx8KHIuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX12YXIgaT1yKDcxKS5SZXBvcnRlcixvPXIoNzEpLkVuY29kZXJCdWZmZXIsYT1yKDcxKS5EZWNvZGVyQnVmZmVyLGY9cig1ODgpLHM9W1wic2VxXCIsXCJzZXFvZlwiLFwic2V0XCIsXCJzZXRvZlwiLFwib2JqaWRcIixcImJvb2xcIixcImdlbnRpbWVcIixcInV0Y3RpbWVcIixcIm51bGxfXCIsXCJlbnVtXCIsXCJpbnRcIixcImJpdHN0clwiLFwiYm1wc3RyXCIsXCJjaGFyc3RyXCIsXCJnZW5zdHJcIixcImdyYXBoc3RyXCIsXCJpYTVzdHJcIixcImlzbzY0NnN0clwiLFwibnVtc3RyXCIsXCJvY3RzdHJcIixcInByaW50c3RyXCIsXCJ0NjFzdHJcIixcInVuaXN0clwiLFwidXRmOHN0clwiLFwidmlkZW9zdHJcIl0sdT1bXCJrZXlcIixcIm9ialwiLFwidXNlXCIsXCJvcHRpb25hbFwiLFwiZXhwbGljaXRcIixcImltcGxpY2l0XCIsXCJkZWZcIixcImNob2ljZVwiLFwiYW55XCIsXCJjb250YWluc1wiXS5jb25jYXQocyksaD1bXCJfcGVla1RhZ1wiLFwiX2RlY29kZVRhZ1wiLFwiX3VzZVwiLFwiX2RlY29kZVN0clwiLFwiX2RlY29kZU9iamlkXCIsXCJfZGVjb2RlVGltZVwiLFwiX2RlY29kZU51bGxcIixcIl9kZWNvZGVJbnRcIixcIl9kZWNvZGVCb29sXCIsXCJfZGVjb2RlTGlzdFwiLFwiX2VuY29kZUNvbXBvc2l0ZVwiLFwiX2VuY29kZVN0clwiLFwiX2VuY29kZU9iamlkXCIsXCJfZW5jb2RlVGltZVwiLFwiX2VuY29kZU51bGxcIixcIl9lbmNvZGVJbnRcIixcIl9lbmNvZGVCb29sXCJdO3QuZXhwb3J0cz1uO3ZhciBjPVtcImVuY1wiLFwicGFyZW50XCIsXCJjaGlsZHJlblwiLFwidGFnXCIsXCJhcmdzXCIsXCJyZXZlcnNlQXJnc1wiLFwiY2hvaWNlXCIsXCJvcHRpb25hbFwiLFwiYW55XCIsXCJvYmpcIixcInVzZVwiLFwiYWx0ZXJlZFVzZVwiLFwia2V5XCIsXCJkZWZhdWx0XCIsXCJleHBsaWNpdFwiLFwiaW1wbGljaXRcIixcImNvbnRhaW5zXCJdO24ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlLGU9e307Yy5mb3JFYWNoKGZ1bmN0aW9uKHIpe2Vbcl09dFtyXX0pO3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUucGFyZW50KTtyZXR1cm4gci5fYmFzZVN0YXRlPWUscn0sbi5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7dS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RoaXNbZV09ZnVuY3Rpb24oKXt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gdC5jaGlsZHJlbi5wdXNoKHIpLHJbZV0uYXBwbHkocixhcmd1bWVudHMpfX0sdGhpcyl9LG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtmKG51bGw9PT1lLnBhcmVudCksdC5jYWxsKHRoaXMpLGUuY2hpbGRyZW49ZS5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxmLmVxdWFsKGUuY2hpbGRyZW4ubGVuZ3RoLDEsXCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGRcIil9LG4ucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSxyPXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7dD10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PXIubGVuZ3RoJiYoZihudWxsPT09ZS5jaGlsZHJlbiksZS5jaGlsZHJlbj1yLHIuZm9yRWFjaChmdW5jdGlvbih0KXt0Ll9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09dC5sZW5ndGgmJihmKG51bGw9PT1lLmFyZ3MpLGUuYXJncz10LGUucmV2ZXJzZUFyZ3M9dC5tYXAoZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHR8fHQuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIHQ7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cj09KDB8cikmJihyfD0wKTt2YXIgbj10W3JdO2Vbbl09cn0pLGV9KSl9LGguZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTt0aHJvdyBuZXcgRXJyb3IodCtcIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiBcIitlLmVuYyl9fSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gZihudWxsPT09ZS50YWcpLGUudGFnPXQsdGhpcy5fdXNlQXJncyhyKSx0aGlzfX0pLG4ucHJvdG90eXBlLnVzZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUudXNlKSxlLnVzZT10LHRoaXN9LG4ucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0Lm9wdGlvbmFsPSEwLHRoaXN9LG4ucHJvdG90eXBlLmRlZj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuZGVmYXVsdCksZS5kZWZhdWx0PXQsZS5vcHRpb25hbD0hMCx0aGlzfSxuLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuZXhwbGljaXQmJm51bGw9PT1lLmltcGxpY2l0KSxlLmV4cGxpY2l0PXQsdGhpc30sbi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmV4cGxpY2l0JiZudWxsPT09ZS5pbXBsaWNpdCksZS5pbXBsaWNpdD10LHRoaXN9LG4ucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZSxlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHQub2JqPSEwLDAhPT1lLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhlKSx0aGlzfSxuLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmtleSksZS5rZXk9dCx0aGlzfSxuLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHQuYW55PSEwLHRoaXN9LG4ucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuY2hvaWNlKSxlLmNob2ljZT10LHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLHRoaXN9LG4ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS51c2UpLGUuY29udGFpbnM9dCx0aGlzfSxuLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1yLnBhcmVudClyZXR1cm4gdC53cmFwUmVzdWx0KHIuY2hpbGRyZW5bMF0uX2RlY29kZSh0LGUpKTt2YXIgbj1yLmRlZmF1bHQsaT0hMCxvPW51bGw7aWYobnVsbCE9PXIua2V5JiYobz10LmVudGVyS2V5KHIua2V5KSksci5vcHRpb25hbCl7dmFyIGY9bnVsbDtpZihudWxsIT09ci5leHBsaWNpdD9mPXIuZXhwbGljaXQ6bnVsbCE9PXIuaW1wbGljaXQ/Zj1yLmltcGxpY2l0Om51bGwhPT1yLnRhZyYmKGY9ci50YWcpLG51bGwhPT1mfHxyLmFueSl7aWYoaT10aGlzLl9wZWVrVGFnKHQsZixyLmFueSksdC5pc0Vycm9yKGkpKXJldHVybiBpfWVsc2V7dmFyIHM9dC5zYXZlKCk7dHJ5e251bGw9PT1yLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHIudGFnLHQsZSk6dGhpcy5fZGVjb2RlQ2hvaWNlKHQsZSksaT0hMH1jYXRjaCh0KXtpPSExfXQucmVzdG9yZShzKX19dmFyIHU7aWYoci5vYmomJmkmJih1PXQuZW50ZXJPYmplY3QoKSksaSl7aWYobnVsbCE9PXIuZXhwbGljaXQpe3ZhciBoPXRoaXMuX2RlY29kZVRhZyh0LHIuZXhwbGljaXQpO2lmKHQuaXNFcnJvcihoKSlyZXR1cm4gaDt0PWh9dmFyIGM9dC5vZmZzZXQ7aWYobnVsbD09PXIudXNlJiZudWxsPT09ci5jaG9pY2Upe2lmKHIuYW55KXZhciBzPXQuc2F2ZSgpO3ZhciBkPXRoaXMuX2RlY29kZVRhZyh0LG51bGwhPT1yLmltcGxpY2l0P3IuaW1wbGljaXQ6ci50YWcsci5hbnkpO2lmKHQuaXNFcnJvcihkKSlyZXR1cm4gZDtyLmFueT9uPXQucmF3KHMpOnQ9ZH1pZihlJiZlLnRyYWNrJiZudWxsIT09ci50YWcmJmUudHJhY2sodC5wYXRoKCksYyx0Lmxlbmd0aCxcInRhZ2dlZFwiKSxlJiZlLnRyYWNrJiZudWxsIT09ci50YWcmJmUudHJhY2sodC5wYXRoKCksdC5vZmZzZXQsdC5sZW5ndGgsXCJjb250ZW50XCIpLG49ci5hbnk/bjpudWxsPT09ci5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhyLnRhZyx0LGUpOnRoaXMuX2RlY29kZUNob2ljZSh0LGUpLHQuaXNFcnJvcihuKSlyZXR1cm4gbjtpZihyLmFueXx8bnVsbCE9PXIuY2hvaWNlfHxudWxsPT09ci5jaGlsZHJlbnx8ci5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuX2RlY29kZSh0LGUpfSksci5jb250YWlucyYmKFwib2N0c3RyXCI9PT1yLnRhZ3x8XCJiaXRzdHJcIj09PXIudGFnKSl7dmFyIGw9bmV3IGEobik7bj10aGlzLl9nZXRVc2Uoci5jb250YWlucyx0Ll9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShsLGUpfX1yZXR1cm4gci5vYmomJmkmJihuPXQubGVhdmVPYmplY3QodSkpLG51bGw9PT1yLmtleXx8bnVsbD09PW4mJmkhPT0hMD9udWxsIT09byYmdC5leGl0S2V5KG8pOnQubGVhdmVLZXkobyxyLmtleSxuKSxufSxuLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO3JldHVyblwic2VxXCI9PT10fHxcInNldFwiPT09dD9udWxsOlwic2Vxb2ZcIj09PXR8fFwic2V0b2ZcIj09PXQ/dGhpcy5fZGVjb2RlTGlzdChlLHQsbi5hcmdzWzBdLHIpOi9zdHIkLy50ZXN0KHQpP3RoaXMuX2RlY29kZVN0cihlLHQscik6XCJvYmppZFwiPT09dCYmbi5hcmdzP3RoaXMuX2RlY29kZU9iamlkKGUsbi5hcmdzWzBdLG4uYXJnc1sxXSxyKTpcIm9iamlkXCI9PT10P3RoaXMuX2RlY29kZU9iamlkKGUsbnVsbCxudWxsLHIpOlwiZ2VudGltZVwiPT09dHx8XCJ1dGN0aW1lXCI9PT10P3RoaXMuX2RlY29kZVRpbWUoZSx0LHIpOlwibnVsbF9cIj09PXQ/dGhpcy5fZGVjb2RlTnVsbChlLHIpOlwiYm9vbFwiPT09dD90aGlzLl9kZWNvZGVCb29sKGUscik6XCJpbnRcIj09PXR8fFwiZW51bVwiPT09dD90aGlzLl9kZWNvZGVJbnQoZSxuLmFyZ3MmJm4uYXJnc1swXSxyKTpudWxsIT09bi51c2U/dGhpcy5fZ2V0VXNlKG4udXNlLGUuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGUscik6ZS5lcnJvcihcInVua25vd24gdGFnOiBcIit0KX0sbi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gci51c2VEZWNvZGVyPXRoaXMuX3VzZSh0LGUpLGYobnVsbD09PXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksci51c2VEZWNvZGVyPXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLHIuaW1wbGljaXQhPT1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKHIudXNlRGVjb2Rlcj1yLnVzZURlY29kZXIuY2xvbmUoKSxyLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1yLmltcGxpY2l0KSxyLnVzZURlY29kZXJ9LG4ucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGUsbj1udWxsLGk9ITE7cmV0dXJuIE9iamVjdC5rZXlzKHIuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKG8pe3ZhciBhPXQuc2F2ZSgpLGY9ci5jaG9pY2Vbb107dHJ5e3ZhciBzPWYuX2RlY29kZSh0LGUpO2lmKHQuaXNFcnJvcihzKSlyZXR1cm4hMTtuPXt0eXBlOm8sdmFsdWU6c30saT0hMH1jYXRjaChlKXtyZXR1cm4gdC5yZXN0b3JlKGEpLCExfXJldHVybiEwfSx0aGlzKSxpP246dC5lcnJvcihcIkNob2ljZSBub3QgbWF0Y2hlZFwiKX0sbi5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsdGhpcy5yZXBvcnRlcil9LG4ucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09bi5kZWZhdWx0fHxuLmRlZmF1bHQhPT10KXt2YXIgaT10aGlzLl9lbmNvZGVWYWx1ZSh0LGUscik7aWYodm9pZCAwIT09aSYmIXRoaXMuX3NraXBEZWZhdWx0KGksZSxyKSlyZXR1cm4gaX19LG4ucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1uLnBhcmVudClyZXR1cm4gbi5jaGlsZHJlblswXS5fZW5jb2RlKHQsZXx8bmV3IGkpO3ZhciBvPW51bGw7aWYodGhpcy5yZXBvcnRlcj1lLG4ub3B0aW9uYWwmJnZvaWQgMD09PXQpe2lmKG51bGw9PT1uLmRlZmF1bHQpcmV0dXJuO3Q9bi5kZWZhdWx0fXZhciBhPW51bGwsZj0hMTtpZihuLmFueSlvPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk7ZWxzZSBpZihuLmNob2ljZSlvPXRoaXMuX2VuY29kZUNob2ljZSh0LGUpO2Vsc2UgaWYobi5jb250YWlucylhPXRoaXMuX2dldFVzZShuLmNvbnRhaW5zLHIpLl9lbmNvZGUodCxlKSxmPSEwO2Vsc2UgaWYobi5jaGlsZHJlbilhPW4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHIpe2lmKFwibnVsbF9cIj09PXIuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHIuX2VuY29kZShudWxsLGUsdCk7aWYobnVsbD09PXIuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIGUuZXJyb3IoXCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleVwiKTt2YXIgbj1lLmVudGVyS2V5KHIuX2Jhc2VTdGF0ZS5rZXkpO2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0KXJldHVybiBlLmVycm9yKFwiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0XCIpO3ZhciBpPXIuX2VuY29kZSh0W3IuX2Jhc2VTdGF0ZS5rZXldLGUsdCk7cmV0dXJuIGUubGVhdmVLZXkobiksaX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGEpO2Vsc2UgaWYoXCJzZXFvZlwiPT09bi50YWd8fFwic2V0b2ZcIj09PW4udGFnKXtpZighbi5hcmdzfHwxIT09bi5hcmdzLmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIlRvbyBtYW55IGFyZ3MgZm9yIDogXCIrbi50YWcpO2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmVycm9yKFwic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheVwiKTt2YXIgcz10aGlzLmNsb25lKCk7cy5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdGhpcy5fZ2V0VXNlKG4uYXJnc1swXSx0KS5fZW5jb2RlKHIsZSl9LHMpKX1lbHNlIG51bGwhPT1uLnVzZT9vPXRoaXMuX2dldFVzZShuLnVzZSxyKS5fZW5jb2RlKHQsZSk6KGE9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKG4udGFnLHQpLGY9ITApO3ZhciBvO2lmKCFuLmFueSYmbnVsbD09PW4uY2hvaWNlKXt2YXIgdT1udWxsIT09bi5pbXBsaWNpdD9uLmltcGxpY2l0Om4udGFnLGg9bnVsbD09PW4uaW1wbGljaXQ/XCJ1bml2ZXJzYWxcIjpcImNvbnRleHRcIjtudWxsPT09dT9udWxsPT09bi51c2UmJmUuZXJyb3IoXCJUYWcgY291bGQgYmUgb21taXRlZCBvbmx5IGZvciAudXNlKClcIik6bnVsbD09PW4udXNlJiYobz10aGlzLl9lbmNvZGVDb21wb3NpdGUodSxmLGgsYSkpfXJldHVybiBudWxsIT09bi5leHBsaWNpdCYmKG89dGhpcy5fZW5jb2RlQ29tcG9zaXRlKG4uZXhwbGljaXQsITEsXCJjb250ZXh0XCIsbykpLG99LG4ucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGUsbj1yLmNob2ljZVt0LnR5cGVdO3JldHVybiBufHxmKCExLHQudHlwZStcIiBub3QgZm91bmQgaW4gXCIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoci5jaG9pY2UpKSksbi5fZW5jb2RlKHQudmFsdWUsZSl9LG4ucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QodCkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihlLHQpO2lmKFwib2JqaWRcIj09PXQmJnIuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZSxyLnJldmVyc2VBcmdzWzBdLHIuYXJnc1sxXSk7aWYoXCJvYmppZFwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZSxudWxsLG51bGwpO2lmKFwiZ2VudGltZVwiPT09dHx8XCJ1dGN0aW1lXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKGUsdCk7aWYoXCJudWxsX1wiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKFwiaW50XCI9PT10fHxcImVudW1cIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZUludChlLHIuYXJncyYmci5yZXZlcnNlQXJnc1swXSk7aWYoXCJib29sXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVCb29sKGUpO3Rocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHRhZzogXCIrdCl9LG4ucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbih0KXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KHQpfSxuLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbih0KXtyZXR1cm4vXltBLVphLXowLTkgJ1xcKFxcKVxcKyxcXC1cXC5cXC86PVxcP10qJC8udGVzdCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczp0fHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIGkodCxlKXt0aGlzLnBhdGg9dCx0aGlzLnJldGhyb3coZSl9dmFyIG89cigyKTtlLlJlcG9ydGVyPW4sbi5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl9LG4ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6dC5vYmoscGF0aExlbjp0LnBhdGgubGVuZ3RofX0sbi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO2Uub2JqPXQub2JqLGUucGF0aD1lLnBhdGguc2xpY2UoMCx0LnBhdGhMZW4pfSxuLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2godCl9LG4ucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtlLnBhdGg9ZS5wYXRoLnNsaWNlKDAsdC0xKX0sbi5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHQpLG51bGwhPT1uLm9iaiYmKG4ub2JqW2VdPXIpfSxuLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKFwiL1wiKX0sbi5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlLGU9dC5vYmo7cmV0dXJuIHQub2JqPXt9LGV9LG4ucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGUscj1lLm9iajtyZXR1cm4gZS5vYmo9dCxyfSxuLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX3JlcG9ydGVyU3RhdGUsbj10IGluc3RhbmNlb2YgaTtpZihlPW4/dDpuZXcgaShyLnBhdGgubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiW1wiK0pTT04uc3RyaW5naWZ5KHQpK1wiXVwifSkuam9pbihcIlwiKSx0Lm1lc3NhZ2V8fHQsdC5zdGFjayksIXIub3B0aW9ucy5wYXJ0aWFsKXRocm93IGU7cmV0dXJuIG58fHIuZXJyb3JzLnB1c2goZSksZX0sbi5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBlLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcih0KT9udWxsOnQsZXJyb3JzOmUuZXJyb3JzfTp0fSxvKGksRXJyb3IpLGkucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24odCl7aWYodGhpcy5tZXNzYWdlPXQrXCIgYXQ6IFwiKyh0aGlzLnBhdGh8fFwiKHNoYWxsb3cpXCIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGkpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaCh0KXt0aGlzLnN0YWNrPXQuc3RhY2t9cmV0dXJuIHRoaXN9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMzUpO2UudGFnQ2xhc3M9ezA6XCJ1bml2ZXJzYWxcIiwxOlwiYXBwbGljYXRpb25cIiwyOlwiY29udGV4dFwiLDM6XCJwcml2YXRlXCJ9LGUudGFnQ2xhc3NCeU5hbWU9bi5fcmV2ZXJzZShlLnRhZ0NsYXNzKSxlLnRhZz17MDpcImVuZFwiLDE6XCJib29sXCIsMjpcImludFwiLDM6XCJiaXRzdHJcIiw0Olwib2N0c3RyXCIsNTpcIm51bGxfXCIsNjpcIm9iamlkXCIsNzpcIm9iakRlc2NcIiw4OlwiZXh0ZXJuYWxcIiw5OlwicmVhbFwiLDEwOlwiZW51bVwiLDExOlwiZW1iZWRcIiwxMjpcInV0ZjhzdHJcIiwxMzpcInJlbGF0aXZlT2lkXCIsMTY6XCJzZXFcIiwxNzpcInNldFwiLDE4OlwibnVtc3RyXCIsMTk6XCJwcmludHN0clwiLDIwOlwidDYxc3RyXCIsMjE6XCJ2aWRlb3N0clwiLDIyOlwiaWE1c3RyXCIsMjM6XCJ1dGN0aW1lXCIsMjQ6XCJnZW50aW1lXCIsMjU6XCJncmFwaHN0clwiLDI2OlwiaXNvNjQ2c3RyXCIsMjc6XCJnZW5zdHJcIiwyODpcInVuaXN0clwiLDI5OlwiY2hhcnN0clwiLDMwOlwiYm1wc3RyXCJ9LGUudGFnQnlOYW1lPW4uX3JldmVyc2UoZS50YWcpfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmRlcj1yKDIzNiksbi5wZW09cig1ODUpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXthLmNhbGwodGhpcyx0KSx0aGlzLmVuYz1cInBlbVwifXZhciBpPXIoMiksbz1yKDEpLkJ1ZmZlcixhPXIoMjM2KTtpKG4sYSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQudG9TdHJpbmcoKS5zcGxpdCgvW1xcclxcbl0rL2cpLG49ZS5sYWJlbC50b1VwcGVyQ2FzZSgpLGk9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLGY9LTEscz0tMSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciBoPXJbdV0ubWF0Y2goaSk7aWYobnVsbCE9PWgmJmhbMl09PT1uKXtpZihmIT09LTEpe2lmKFwiRU5EXCIhPT1oWzFdKWJyZWFrO3M9dTticmVha31pZihcIkJFR0lOXCIhPT1oWzFdKWJyZWFrO2Y9dX19aWYoZj09PS0xfHxzPT09LTEpdGhyb3cgbmV3IEVycm9yKFwiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogXCIrbik7dmFyIGM9ci5zbGljZShmKzEscykuam9pbihcIlwiKTtjLnJlcGxhY2UoL1teYS16MC05XFwrXFwvPV0rL2dpLFwiXCIpO3ZhciBkPW5ldyBvKGMsXCJiYXNlNjRcIik7cmV0dXJuIGEucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsZCxlKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uZGVyPXIoMjM3KSxuLnBlbT1yKDU4Nyl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe28uY2FsbCh0aGlzLHQpLHRoaXMuZW5jPVwicGVtXCJ9dmFyIGk9cigyKSxvPXIoMjM3KTtpKG4sbyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdCksbj1yLnRvU3RyaW5nKFwiYmFzZTY0XCIpLGk9W1wiLS0tLS1CRUdJTiBcIitlLmxhYmVsK1wiLS0tLS1cIl0sYT0wO2E8bi5sZW5ndGg7YSs9NjQpaS5wdXNoKG4uc2xpY2UoYSxhKzY0KSk7cmV0dXJuIGkucHVzaChcIi0tLS0tRU5EIFwiK2UubGFiZWwrXCItLS0tLVwiKSxpLmpvaW4oXCJcXG5cIil9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfXQuZXhwb3J0cz1yLHIuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe2lmKHQhPWUpdGhyb3cgbmV3IEVycm9yKHJ8fFwiQXNzZXJ0aW9uIGZhaWxlZDogXCIrdCtcIiAhPSBcIitlKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh1LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBzLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyB0KG8ubGVuZ3RoKSxvLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT1lLHZvaWQodGhpcy5fYXV0b3BhZGRpbmc9ITApKTpuZXcgbihlLHIsbyl9ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT92b2lkKHRoaXMuY2FjaGU9bmV3IHQoXCJcIikpOm5ldyBpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXRbMTVdLHI9LTE7KytyPGU7KWlmKHRbcisoMTYtZSldIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhXCIpO2lmKDE2IT09ZSlyZXR1cm4gdC5zbGljZSgwLDE2LWUpfWZ1bmN0aW9uIGEoZSxyLGkpe3ZhciBvPWNbZS50b0xvd2VyQ2FzZSgpXTtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT1uZXcgdChpKSksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyB0KHIpKSxyLmxlbmd0aCE9PW8ua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQga2V5IGxlbmd0aCBcIityLmxlbmd0aCk7aWYoaS5sZW5ndGghPT1vLml2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGl2IGxlbmd0aCBcIitpLmxlbmd0aCk7cmV0dXJuXCJzdHJlYW1cIj09PW8udHlwZT9uZXcgZChiW28ubW9kZV0scixpLCEwKTpcImF1dGhcIj09PW8udHlwZT9uZXcgbChiW28ubW9kZV0scixpLCEwKTpuZXcgbihiW28ubW9kZV0scixpKX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9Y1t0LnRvTG93ZXJDYXNlKCldO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7dmFyIG49cChlLCExLHIua2V5LHIuaXYpO3JldHVybiBhKHQsbi5rZXksbi5pdil9dmFyIHM9cigxMDcpLHU9cigxMDkpLGg9cigyKSxjPXIoMTUyKSxkPXIoMjQ2KSxsPXIoMjM4KSxwPXIoMTUzKTtoKG4sdSksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9jYWNoZS5hZGQoZSk7Zm9yKHZhciByLG4saT1bXTtyPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KW49dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gbyh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyx0KSk7aWYodCl0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXQsdGhpc30saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9dC5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYodCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIGU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLGV9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIGU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLGU7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9O3ZhciBiPXtFQ0I6cigyNDQpLENCQzpyKDI0MCksQ0ZCOnIoMjQxKSxDRkI4OnIoMjQzKSxDRkIxOnIoMjQyKSxPRkI6cigyNDUpLENUUjpyKDEwOCksR0NNOnIoMTA4KX07ZS5jcmVhdGVEZWNpcGhlcj1mLGUuY3JlYXRlRGVjaXBoZXJpdj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHMuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9jaXBoZXI9bmV3IGYuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyhlLHIsaSl7dmFyIG89aFtlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKHBbby5tb2RlXSxyLGkpOlwiYXV0aFwiPT09by50eXBlP25ldyBsKHBbby5tb2RlXSxyLGkpOm5ldyBuKHBbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1oW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1jKGUsITEsci5rZXksci5pdik7cmV0dXJuIG8odCxuLmtleSxuLml2KX12YXIgZj1yKDEwNykscz1yKDEwOSksdT1yKDIpLGg9cigxNTIpLGM9cigxNTMpLGQ9cigyNDYpLGw9cigyMzgpO3UobixzKSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KCk7KW49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gdD10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KSx0aGlzLl9jaXBoZXIuc2NydWIoKSx0O2lmKFwiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTBcIiE9PXQudG9TdHJpbmcoXCJoZXhcIikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciB0PXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdH1yZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MTYtdGhpcy5jYWNoZS5sZW5ndGgscj1uZXcgdChlKSxuPS0xOysrbjxlOylyLndyaXRlVUludDgoZSxuKTt2YXIgaT10LmNvbmNhdChbdGhpcy5jYWNoZSxyXSk7cmV0dXJuIGl9O3ZhciBwPXtFQ0I6cigyNDQpLENCQzpyKDI0MCksQ0ZCOnIoMjQxKSxDRkI4OnIoMjQzKSxDRkIxOnIoMjQyKSxPRkI6cigyNDUpLENUUjpyKDEwOCksR0NNOnIoMTA4KX07ZS5jcmVhdGVDaXBoZXJpdj1vLGUuY3JlYXRlQ2lwaGVyPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7dGhpcy5oPXQsdGhpcy5zdGF0ZT1uZXcgZSgxNiksdGhpcy5zdGF0ZS5maWxsKDApLHRoaXMuY2FjaGU9bmV3IGUoXCJcIil9ZnVuY3Rpb24gbih0KXtyZXR1cm5bdC5yZWFkVUludDMyQkUoMCksdC5yZWFkVUludDMyQkUoNCksdC5yZWFkVUludDMyQkUoOCksdC5yZWFkVUludDMyQkUoMTIpXX1mdW5jdGlvbiBpKHQpe3Q9dC5tYXAobyk7dmFyIHI9bmV3IGUoMTYpO3JldHVybiByLndyaXRlVUludDMyQkUodFswXSwwKSxyLndyaXRlVUludDMyQkUodFsxXSw0KSxyLndyaXRlVUludDMyQkUodFsyXSw4KSxyLndyaXRlVUludDMyQkUodFszXSwxMikscn1mdW5jdGlvbiBvKHQpe3ZhciBlLHI7cmV0dXJuIGU9dD5zfHx0PDA/KHI9TWF0aC5hYnModCklcyx0PDA/cy1yOnIpOnR9ZnVuY3Rpb24gYSh0LGUpe3JldHVyblt0WzBdXmVbMF0sdFsxXV5lWzFdLHRbMl1eZVsyXSx0WzNdXmVbM11dfXZhciBmPW5ldyBlKDE2KTtmLmZpbGwoMCksdC5leHBvcnRzPXIsci5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xOysrZTx0Lmxlbmd0aDspdGhpcy5zdGF0ZVtlXV49dFtlXTt0aGlzLl9tdWx0aXBseSgpfSxyLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyLG89bih0aGlzLmgpLGY9WzAsMCwwLDBdLHM9LTE7KytzPDEyODspe2ZvcihlPTAhPT0odGhpcy5zdGF0ZVt+fihzLzgpXSYxPDw3LXMlOCksZSYmKGY9YShmLG8pKSxyPTAhPT0oMSZvWzNdKSx0PTM7dD4wO3QtLSlvW3RdPW9bdF0+Pj4xfCgxJm9bdC0xXSk8PDMxO29bMF09b1swXT4+PjEsciYmKG9bMF09b1swXV4yMjU8PDI0KX10aGlzLnN0YXRlPWkoZil9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmNhY2hlPWUuY29uY2F0KFt0aGlzLmNhY2hlLHRdKTtmb3IodmFyIHI7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylyPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKHIpfSxyLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChlLmNvbmNhdChbdGhpcy5jYWNoZSxmXSwxNikpLHRoaXMuZ2hhc2goaShbMCx0LDAscl0pKSx0aGlzLnN0YXRlfTt2YXIgcz1NYXRoLnBvdygyLDMyKX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIpe3ZhciBuPSh0Lm1vZHVsdXMsdC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSksaT0oci5sZW5ndGgsYyhcInNoYTFcIikudXBkYXRlKG5ldyBlKFwiXCIpKS5kaWdlc3QoKSksYT1pLmxlbmd0aDtpZigwIT09clswXSl0aHJvdyBuZXcgRXJyb3IoXCJkZWNyeXB0aW9uIGVycm9yXCIpO3ZhciB1PXIuc2xpY2UoMSxhKzEpLGg9ci5zbGljZShhKzEpLGQ9cyh1LGYoaCxhKSksbD1zKGgsZihkLG4tYS0xKSk7aWYobyhpLGwuc2xpY2UoMCxhKSkpdGhyb3cgbmV3IEVycm9yKFwiZGVjcnlwdGlvbiBlcnJvclwiKTtmb3IodmFyIHA9YTswPT09bFtwXTspcCsrO2lmKDEhPT1sW3ArK10pdGhyb3cgbmV3IEVycm9yKFwiZGVjcnlwdGlvbiBlcnJvclwiKTtyZXR1cm4gbC5zbGljZShwKX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49ZS5zbGljZSgwLDIpLGk9MixvPTA7MCE9PWVbaSsrXTspaWYoaT49ZS5sZW5ndGgpe28rKzticmVha312YXIgYT1lLnNsaWNlKDIsaS0xKTtlLnNsaWNlKGktMSxpKTtpZigoXCIwMDAyXCIhPT1uLnRvU3RyaW5nKFwiaGV4XCIpJiYhcnx8XCIwMDAxXCIhPT1uLnRvU3RyaW5nKFwiaGV4XCIpJiZyKSYmbysrLGEubGVuZ3RoPDgmJm8rKyxvKXRocm93IG5ldyBFcnJvcihcImRlY3J5cHRpb24gZXJyb3JcIik7cmV0dXJuIGUuc2xpY2UoaSl9ZnVuY3Rpb24gbyh0LHIpe3Q9bmV3IGUodCkscj1uZXcgZShyKTt2YXIgbj0wLGk9dC5sZW5ndGg7dC5sZW5ndGghPT1yLmxlbmd0aCYmKG4rKyxpPU1hdGgubWluKHQubGVuZ3RoLHIubGVuZ3RoKSk7Zm9yKHZhciBvPS0xOysrbzxpOyluKz10W29dXnJbb107cmV0dXJuIG59dmFyIGE9cigyMzMpLGY9cigyMzEpLHM9cigyNDgpLHU9cig3MCksaD1yKDIzMiksYz1yKDU5KSxkPXIoMjQ3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyLG8pe3ZhciBmO2Y9dC5wYWRkaW5nP3QucGFkZGluZzpvPzE6NDt2YXIgcz1hKHQpLGM9cy5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihyLmxlbmd0aD5jfHxuZXcgdShyKS5jbXAocy5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoXCJkZWNyeXB0aW9uIGVycm9yXCIpO3ZhciBsO2w9bz9kKG5ldyB1KHIpLHMpOmgocixzKTt2YXIgcD1uZXcgZShjLWwubGVuZ3RoKTtpZihwLmZpbGwoMCksbD1lLmNvbmNhdChbcCxsXSxjKSw0PT09ZilyZXR1cm4gbihzLGwpO2lmKDE9PT1mKXJldHVybiBpKHMsbCxvKTtpZigzPT09ZilyZXR1cm4gbDt0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHBhZGRpbmdcIil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscil7dmFyIG49dC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxpPXIubGVuZ3RoLG89cyhcInNoYTFcIikudXBkYXRlKG5ldyBlKFwiXCIpKS5kaWdlc3QoKSxhPW8ubGVuZ3RoLGQ9MiphO2lmKGk+bi1kLTIpdGhyb3cgbmV3IEVycm9yKFwibWVzc2FnZSB0b28gbG9uZ1wiKTt2YXIgbD1uZXcgZShuLWktZC0yKTtsLmZpbGwoMCk7dmFyIHA9bi1hLTEsYj1mKGEpLHY9aChlLmNvbmNhdChbbyxsLG5ldyBlKFsxXSkscl0scCksdShiLHApKSx5PWgoYix1KHYsYSkpO3JldHVybiBuZXcgYyhlLmNvbmNhdChbbmV3IGUoWzBdKSx5LHZdLG4pKX1mdW5jdGlvbiBpKHQscixuKXt2YXIgaT1yLmxlbmd0aCxhPXQubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoaT5hLTExKXRocm93IG5ldyBFcnJvcihcIm1lc3NhZ2UgdG9vIGxvbmdcIik7dmFyIGY7cmV0dXJuIG4/KGY9bmV3IGUoYS1pLTMpLGYuZmlsbCgyNTUpKTpmPW8oYS1pLTMpLG5ldyBjKGUuY29uY2F0KFtuZXcgZShbMCxuPzE6Ml0pLGYsbmV3IGUoWzBdKSxyXSxhKSl9ZnVuY3Rpb24gbyh0LHIpe2Zvcih2YXIgbixpPW5ldyBlKHQpLG89MCxhPWYoMip0KSxzPTA7bzx0OylzPT09YS5sZW5ndGgmJihhPWYoMip0KSxzPTApLG49YVtzKytdLG4mJihpW28rK109bik7cmV0dXJuIGl9dmFyIGE9cigyMzMpLGY9cig2MSkscz1yKDU5KSx1PXIoMjMxKSxoPXIoMjQ4KSxjPXIoNzApLGQ9cigyNDcpLGw9cigyMzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG87bz10LnBhZGRpbmc/dC5wYWRkaW5nOnI/MTo0O3ZhciBmLHM9YSh0KTtpZig0PT09bylmPW4ocyxlKTtlbHNlIGlmKDE9PT1vKWY9aShzLGUscik7ZWxzZXtpZigzIT09byl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHBhZGRpbmdcIik7aWYoZj1uZXcgYyhlKSxmLmNtcChzLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcihcImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXNcIil9cmV0dXJuIHI/bChmLHMpOmQoZixzKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXRbbl07XCIuXCI9PT1pP3Quc3BsaWNlKG4sMSk6XCIuLlwiPT09aT8odC5zcGxpY2UobiwxKSxcbnIrKyk6ciYmKHQuc3BsaWNlKG4sMSksci0tKX1pZihlKWZvcig7ci0tO3IpdC51bnNoaWZ0KFwiLi5cIik7cmV0dXJuIHR9ZnVuY3Rpb24gbih0LGUpe2lmKHQuZmlsdGVyKXJldHVybiB0LmZpbHRlcihlKTtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSxuLHQpJiZyLnB1c2godFtuXSk7cmV0dXJuIHJ9dmFyIGk9L14oXFwvP3wpKFtcXHNcXFNdKj8pKCg/OlxcLnsxLDJ9fFteXFwvXSs/fCkoXFwuW14uXFwvXSp8KSkoPzpbXFwvXSopJC8sbz1mdW5jdGlvbih0KXtyZXR1cm4gaS5leGVjKHQpLnNsaWNlKDEpfTtlLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9XCJcIixpPSExLG89YXJndW1lbnRzLmxlbmd0aC0xO28+PS0xJiYhaTtvLS0pe3ZhciBhPW8+PTA/YXJndW1lbnRzW29dOnQuY3dkKCk7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzXCIpO2EmJihlPWErXCIvXCIrZSxpPVwiL1wiPT09YS5jaGFyQXQoMCkpfXJldHVybiBlPXIobihlLnNwbGl0KFwiL1wiKSxmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSwhaSkuam9pbihcIi9cIiksKGk/XCIvXCI6XCJcIikrZXx8XCIuXCJ9LGUubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBpPWUuaXNBYnNvbHV0ZSh0KSxvPVwiL1wiPT09YSh0LC0xKTtyZXR1cm4gdD1yKG4odC5zcGxpdChcIi9cIiksZnVuY3Rpb24odCl7cmV0dXJuISF0fSksIWkpLmpvaW4oXCIvXCIpLHR8fGl8fCh0PVwiLlwiKSx0JiZvJiYodCs9XCIvXCIpLChpP1wiL1wiOlwiXCIpK3R9LGUuaXNBYnNvbHV0ZT1mdW5jdGlvbih0KXtyZXR1cm5cIi9cIj09PXQuY2hhckF0KDApfSxlLmpvaW49ZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIGUubm9ybWFsaXplKG4odCxmdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5nc1wiKTtyZXR1cm4gdH0pLmpvaW4oXCIvXCIpKX0sZS5yZWxhdGl2ZT1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aCYmXCJcIj09PXRbZV07ZSsrKTtmb3IodmFyIHI9dC5sZW5ndGgtMTtyPj0wJiZcIlwiPT09dFtyXTtyLS0pO3JldHVybiBlPnI/W106dC5zbGljZShlLHItZSsxKX10PWUucmVzb2x2ZSh0KS5zdWJzdHIoMSkscj1lLnJlc29sdmUocikuc3Vic3RyKDEpO2Zvcih2YXIgaT1uKHQuc3BsaXQoXCIvXCIpKSxvPW4oci5zcGxpdChcIi9cIikpLGE9TWF0aC5taW4oaS5sZW5ndGgsby5sZW5ndGgpLGY9YSxzPTA7czxhO3MrKylpZihpW3NdIT09b1tzXSl7Zj1zO2JyZWFrfWZvcih2YXIgdT1bXSxzPWY7czxpLmxlbmd0aDtzKyspdS5wdXNoKFwiLi5cIik7cmV0dXJuIHU9dS5jb25jYXQoby5zbGljZShmKSksdS5qb2luKFwiL1wiKX0sZS5zZXA9XCIvXCIsZS5kZWxpbWl0ZXI9XCI6XCIsZS5kaXJuYW1lPWZ1bmN0aW9uKHQpe3ZhciBlPW8odCkscj1lWzBdLG49ZVsxXTtyZXR1cm4gcnx8bj8obiYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSkscituKTpcIi5cIn0sZS5iYXNlbmFtZT1mdW5jdGlvbih0LGUpe3ZhciByPW8odClbMl07cmV0dXJuIGUmJnIuc3Vic3RyKC0xKmUubGVuZ3RoKT09PWUmJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtZS5sZW5ndGgpKSxyfSxlLmV4dG5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIG8odClbM119O3ZhciBhPVwiYlwiPT09XCJhYlwiLnN1YnN0cigtMSk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LnN1YnN0cihlLHIpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIGU8MCYmKGU9dC5sZW5ndGgrZSksdC5zdWJzdHIoZSxyKX19KS5jYWxsKGUscigyNikpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoNTEpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbigpe3RoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIGk9KHIoMSkuQnVmZmVyLHIoMTU2KSk7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXt2YXIgZT17ZGF0YTp0LG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1lOnRoaXMuaGVhZD1lLHRoaXMudGFpbD1lLCsrdGhpcy5sZW5ndGh9LG4ucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24odCl7dmFyIGU9e2RhdGE6dCxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPWUpLHRoaXMuaGVhZD1lLCsrdGhpcy5sZW5ndGh9LG4ucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmhlYWQuZGF0YTtyZXR1cm4gMT09PXRoaXMubGVuZ3RoP3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCx0fX0sbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sbi5wcm90b3R5cGUuam9pbj1mdW5jdGlvbih0KXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuXCJcIjtmb3IodmFyIGU9dGhpcy5oZWFkLHI9XCJcIitlLmRhdGE7ZT1lLm5leHQ7KXIrPXQrZS5kYXRhO3JldHVybiByfSxuLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBpLmFsbG9jKDApO2lmKDE9PT10aGlzLmxlbmd0aClyZXR1cm4gdGhpcy5oZWFkLmRhdGE7Zm9yKHZhciBlPWkuYWxsb2NVbnNhZmUodD4+PjApLHI9dGhpcy5oZWFkLG49MDtyOylyLmRhdGEuY29weShlLG4pLG4rPXIuZGF0YS5sZW5ndGgscj1yLm5leHQ7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUpe3ZhciByPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PXIuY2FsbCh0KX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LGUpe2Z1bmN0aW9uIHIoKXtpZighaSl7aWYobihcInRocm93RGVwcmVjYXRpb25cIikpdGhyb3cgbmV3IEVycm9yKGUpO24oXCJ0cmFjZURlcHJlY2F0aW9uXCIpP2NvbnNvbGUudHJhY2UoZSk6Y29uc29sZS53YXJuKGUpLGk9ITB9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKG4oXCJub0RlcHJlY2F0aW9uXCIpKXJldHVybiB0O3ZhciBpPSExO3JldHVybiByfWZ1bmN0aW9uIG4odCl7dHJ5e2lmKCFlLmxvY2FsU3RvcmFnZSlyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX12YXIgcj1lLmxvY2FsU3RvcmFnZVt0XTtyZXR1cm4gbnVsbCE9ciYmXCJ0cnVlXCI9PT1TdHJpbmcocikudG9Mb3dlckNhc2UoKX10LmV4cG9ydHM9cn0pLmNhbGwoZSxyKDM5KSl9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cigyNDkpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKG4pe3ZhciBpPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiByKDMxKX1jYXRjaCh0KXt9fSgpO2U9dC5leHBvcnRzPXIoMjUwKSxlLlN0cmVhbT1pfHxlLGUuUmVhZGFibGU9ZSxlLldyaXRhYmxlPXIoMTU1KSxlLkR1cGxleD1yKDUxKSxlLlRyYW5zZm9ybT1yKDE1NCksZS5QYXNzVGhyb3VnaD1yKDI0OSksIW4uYnJvd3NlciYmXCJkaXNhYmxlXCI9PT1uLmVudi5SRUFEQUJMRV9TVFJFQU0mJmkmJih0LmV4cG9ydHM9aSl9KS5jYWxsKGUscigyNikpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoMTU0KX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDE1NSl9LGZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT90LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTp0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0sZnVuY3Rpb24odCxlKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OnQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29weSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5maWxsJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnJlYWRVSW50OH19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBpKHQscil7dmFyIG49e3NlZW46W10sc3R5bGl6ZTphfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKG4uZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYobi5jb2xvcnM9YXJndW1lbnRzWzNdKSxiKHIpP24uc2hvd0hpZGRlbj1yOnImJmUuX2V4dGVuZChuLHIpLF8obi5zaG93SGlkZGVuKSYmKG4uc2hvd0hpZGRlbj0hMSksXyhuLmRlcHRoKSYmKG4uZGVwdGg9MiksXyhuLmNvbG9ycykmJihuLmNvbG9ycz0hMSksXyhuLmN1c3RvbUluc3BlY3QpJiYobi5jdXN0b21JbnNwZWN0PSEwKSxuLmNvbG9ycyYmKG4uc3R5bGl6ZT1vKSxzKG4sdCxuLmRlcHRoKX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9aS5zdHlsZXNbZV07cmV0dXJuIHI/XCJcdTAwMWJbXCIraS5jb2xvcnNbcl1bMF0rXCJtXCIrdCtcIlx1MDAxYltcIitpLmNvbG9yc1tyXVsxXStcIm1cIjp0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdH1mdW5jdGlvbiBmKHQpe3ZhciBlPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCxyKXtlW3RdPSEwfSksZX1mdW5jdGlvbiBzKHQscixuKXtpZih0LmN1c3RvbUluc3BlY3QmJnImJmsoci5pbnNwZWN0KSYmci5pbnNwZWN0IT09ZS5pbnNwZWN0JiYoIXIuY29uc3RydWN0b3J8fHIuY29uc3RydWN0b3IucHJvdG90eXBlIT09cikpe3ZhciBpPXIuaW5zcGVjdChuLHQpO3JldHVybiBnKGkpfHwoaT1zKHQsaSxuKSksaX12YXIgbz11KHQscik7aWYobylyZXR1cm4gbzt2YXIgYT1PYmplY3Qua2V5cyhyKSxiPWYoYSk7aWYodC5zaG93SGlkZGVuJiYoYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKSksQShyKSYmKGEuaW5kZXhPZihcIm1lc3NhZ2VcIik+PTB8fGEuaW5kZXhPZihcImRlc2NyaXB0aW9uXCIpPj0wKSlyZXR1cm4gaChyKTtpZigwPT09YS5sZW5ndGgpe2lmKGsocikpe3ZhciB2PXIubmFtZT9cIjogXCIrci5uYW1lOlwiXCI7cmV0dXJuIHQuc3R5bGl6ZShcIltGdW5jdGlvblwiK3YrXCJdXCIsXCJzcGVjaWFsXCIpfWlmKE0ocikpcmV0dXJuIHQuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwociksXCJyZWdleHBcIik7aWYoRShyKSlyZXR1cm4gdC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwociksXCJkYXRlXCIpO2lmKEEocikpcmV0dXJuIGgocil9dmFyIHk9XCJcIixtPSExLHc9W1wie1wiLFwifVwiXTtpZihwKHIpJiYobT0hMCx3PVtcIltcIixcIl1cIl0pLGsocikpe3ZhciBfPXIubmFtZT9cIjogXCIrci5uYW1lOlwiXCI7eT1cIiBbRnVuY3Rpb25cIitfK1wiXVwifWlmKE0ocikmJih5PVwiIFwiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSksRShyKSYmKHk9XCIgXCIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChyKSksQShyKSYmKHk9XCIgXCIraChyKSksMD09PWEubGVuZ3RoJiYoIW18fDA9PXIubGVuZ3RoKSlyZXR1cm4gd1swXSt5K3dbMV07aWYobjwwKXJldHVybiBNKHIpP3Quc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwociksXCJyZWdleHBcIik6dC5zdHlsaXplKFwiW09iamVjdF1cIixcInNwZWNpYWxcIik7dC5zZWVuLnB1c2gocik7dmFyIFM7cmV0dXJuIFM9bT9jKHQscixuLGIsYSk6YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGQodCxyLG4sYixlLG0pfSksdC5zZWVuLnBvcCgpLGwoUyx5LHcpfWZ1bmN0aW9uIHUodCxlKXtpZihfKGUpKXJldHVybiB0LnN0eWxpemUoXCJ1bmRlZmluZWRcIixcInVuZGVmaW5lZFwiKTtpZihnKGUpKXt2YXIgcj1cIidcIitKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9eXCJ8XCIkL2csXCJcIikucmVwbGFjZSgvJy9nLFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csJ1wiJykrXCInXCI7cmV0dXJuIHQuc3R5bGl6ZShyLFwic3RyaW5nXCIpfXJldHVybiBtKGUpP3Quc3R5bGl6ZShcIlwiK2UsXCJudW1iZXJcIik6YihlKT90LnN0eWxpemUoXCJcIitlLFwiYm9vbGVhblwiKTp2KGUpP3Quc3R5bGl6ZShcIm51bGxcIixcIm51bGxcIik6dm9pZCAwfWZ1bmN0aW9uIGgodCl7cmV0dXJuXCJbXCIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkrXCJdXCJ9ZnVuY3Rpb24gYyh0LGUscixuLGkpe2Zvcih2YXIgbz1bXSxhPTAsZj1lLmxlbmd0aDthPGY7KythKVIoZSxTdHJpbmcoYSkpP28ucHVzaChkKHQsZSxyLG4sU3RyaW5nKGEpLCEwKSk6by5wdXNoKFwiXCIpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxcZCskLyl8fG8ucHVzaChkKHQsZSxyLG4saSwhMCkpfSksb31mdW5jdGlvbiBkKHQsZSxyLG4saSxvKXt2YXIgYSxmLHU7aWYodT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsaSl8fHt2YWx1ZTplW2ldfSx1LmdldD9mPXUuc2V0P3Quc3R5bGl6ZShcIltHZXR0ZXIvU2V0dGVyXVwiLFwic3BlY2lhbFwiKTp0LnN0eWxpemUoXCJbR2V0dGVyXVwiLFwic3BlY2lhbFwiKTp1LnNldCYmKGY9dC5zdHlsaXplKFwiW1NldHRlcl1cIixcInNwZWNpYWxcIikpLFIobixpKXx8KGE9XCJbXCIraStcIl1cIiksZnx8KHQuc2Vlbi5pbmRleE9mKHUudmFsdWUpPDA/KGY9dihyKT9zKHQsdS52YWx1ZSxudWxsKTpzKHQsdS52YWx1ZSxyLTEpLGYuaW5kZXhPZihcIlxcblwiKT4tMSYmKGY9bz9mLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIiAgXCIrdH0pLmpvaW4oXCJcXG5cIikuc3Vic3RyKDIpOlwiXFxuXCIrZi5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCIgICBcIit0fSkuam9pbihcIlxcblwiKSkpOmY9dC5zdHlsaXplKFwiW0NpcmN1bGFyXVwiLFwic3BlY2lhbFwiKSksXyhhKSl7aWYobyYmaS5tYXRjaCgvXlxcZCskLykpcmV0dXJuIGY7YT1KU09OLnN0cmluZ2lmeShcIlwiK2kpLGEubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pPyhhPWEuc3Vic3RyKDEsYS5sZW5ndGgtMiksYT10LnN0eWxpemUoYSxcIm5hbWVcIikpOihhPWEucmVwbGFjZSgvJy9nLFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csJ1wiJykucmVwbGFjZSgvKF5cInxcIiQpL2csXCInXCIpLGE9dC5zdHlsaXplKGEsXCJzdHJpbmdcIikpfXJldHVybiBhK1wiOiBcIitmfWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPTAsaT10LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBuKyssZS5pbmRleE9mKFwiXFxuXCIpPj0wJiZuKyssdCtlLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLFwiXCIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gaT42MD9yWzBdKyhcIlwiPT09ZT9cIlwiOmUrXCJcXG4gXCIpK1wiIFwiK3Quam9pbihcIixcXG4gIFwiKStcIiBcIityWzFdOnJbMF0rZStcIiBcIit0LmpvaW4oXCIsIFwiKStcIiBcIityWzFdfWZ1bmN0aW9uIHAodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gYih0KXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbnVsbD09PXR9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbnVsbD09dH1mdW5jdGlvbiBtKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGcodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR9ZnVuY3Rpb24gdyh0KXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdH1mdW5jdGlvbiBfKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIE0odCl7cmV0dXJuIFModCkmJlwiW29iamVjdCBSZWdFeHBdXCI9PT1JKHQpfWZ1bmN0aW9uIFModCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIEUodCl7cmV0dXJuIFModCkmJlwiW29iamVjdCBEYXRlXVwiPT09SSh0KX1mdW5jdGlvbiBBKHQpe3JldHVybiBTKHQpJiYoXCJbb2JqZWN0IEVycm9yXVwiPT09SSh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBrKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9ZnVuY3Rpb24geCh0KXtyZXR1cm4gbnVsbD09PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJudW1iZXJcIj09dHlwZW9mIHR8fFwic3RyaW5nXCI9PXR5cGVvZiB0fHxcInN5bWJvbFwiPT10eXBlb2YgdHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIHR9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQ8MTA/XCIwXCIrdC50b1N0cmluZygxMCk6dC50b1N0cmluZygxMCl9ZnVuY3Rpb24gTygpe3ZhciB0PW5ldyBEYXRlLGU9W0IodC5nZXRIb3VycygpKSxCKHQuZ2V0TWludXRlcygpKSxCKHQuZ2V0U2Vjb25kcygpKV0uam9pbihcIjpcIik7cmV0dXJuW3QuZ2V0RGF0ZSgpLENbdC5nZXRNb250aCgpXSxlXS5qb2luKFwiIFwiKX1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXZhciBQPS8lW3NkaiVdL2c7ZS5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoIWcodCkpe2Zvcih2YXIgZT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllLnB1c2goaShhcmd1bWVudHNbcl0pKTtyZXR1cm4gZS5qb2luKFwiIFwiKX1mb3IodmFyIHI9MSxuPWFyZ3VtZW50cyxvPW4ubGVuZ3RoLGE9U3RyaW5nKHQpLnJlcGxhY2UoUCxmdW5jdGlvbih0KXtpZihcIiUlXCI9PT10KXJldHVyblwiJVwiO2lmKHI+PW8pcmV0dXJuIHQ7c3dpdGNoKHQpe2Nhc2VcIiVzXCI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2VcIiVkXCI6cmV0dXJuIE51bWJlcihuW3IrK10pO2Nhc2VcIiVqXCI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuW3IrK10pfWNhdGNoKHQpe3JldHVyblwiW0NpcmN1bGFyXVwifWRlZmF1bHQ6cmV0dXJuIHR9fSksZj1uW3JdO3I8bztmPW5bKytyXSlhKz12KGYpfHwhUyhmKT9cIiBcIitmOlwiIFwiK2koZik7cmV0dXJuIGF9LGUuZGVwcmVjYXRlPWZ1bmN0aW9uKHIsaSl7ZnVuY3Rpb24gbygpe2lmKCFhKXtpZihuLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO24udHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKGkpOmNvbnNvbGUuZXJyb3IoaSksYT0hMH1yZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoXyh0LnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmRlcHJlY2F0ZShyLGkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYobi5ub0RlcHJlY2F0aW9uPT09ITApcmV0dXJuIHI7dmFyIGE9ITE7cmV0dXJuIG99O3ZhciBULGo9e307ZS5kZWJ1Z2xvZz1mdW5jdGlvbih0KXtpZihfKFQpJiYoVD1uLmVudi5OT0RFX0RFQlVHfHxcIlwiKSx0PXQudG9VcHBlckNhc2UoKSwhalt0XSlpZihuZXcgUmVnRXhwKFwiXFxcXGJcIit0K1wiXFxcXGJcIixcImlcIikudGVzdChUKSl7dmFyIHI9bi5waWQ7alt0XT1mdW5jdGlvbigpe3ZhciBuPWUuZm9ybWF0LmFwcGx5KGUsYXJndW1lbnRzKTtjb25zb2xlLmVycm9yKFwiJXMgJWQ6ICVzXCIsdCxyLG4pfX1lbHNlIGpbdF09ZnVuY3Rpb24oKXt9O3JldHVybiBqW3RdfSxlLmluc3BlY3Q9aSxpLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0saS5zdHlsZXM9e3NwZWNpYWw6XCJjeWFuXCIsbnVtYmVyOlwieWVsbG93XCIsYm9vbGVhbjpcInllbGxvd1wiLHVuZGVmaW5lZDpcImdyZXlcIixudWxsOlwiYm9sZFwiLHN0cmluZzpcImdyZWVuXCIsZGF0ZTpcIm1hZ2VudGFcIixyZWdleHA6XCJyZWRcIn0sZS5pc0FycmF5PXAsZS5pc0Jvb2xlYW49YixlLmlzTnVsbD12LGUuaXNOdWxsT3JVbmRlZmluZWQ9eSxlLmlzTnVtYmVyPW0sZS5pc1N0cmluZz1nLGUuaXNTeW1ib2w9dyxlLmlzVW5kZWZpbmVkPV8sZS5pc1JlZ0V4cD1NLGUuaXNPYmplY3Q9UyxlLmlzRGF0ZT1FLGUuaXNFcnJvcj1BLGUuaXNGdW5jdGlvbj1rLGUuaXNQcmltaXRpdmU9eCxlLmlzQnVmZmVyPXIoNjA1KTt2YXIgQz1bXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdO2UubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coXCIlcyAtICVzXCIsTygpLGUuZm9ybWF0LmFwcGx5KGUsYXJndW1lbnRzKSl9LGUuaW5oZXJpdHM9cig2MDQpLGUuX2V4dGVuZD1mdW5jdGlvbih0LGUpe2lmKCFlfHwhUyhlKSlyZXR1cm4gdDtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksbj1yLmxlbmd0aDtuLS07KXRbcltuXV09ZVtyW25dXTtyZXR1cm4gdH19KS5jYWxsKGUscigzOSkscigyNikpfSxmdW5jdGlvbih0LGUpe3ZhciByPVtdLmluZGV4T2Y7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYocilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKWlmKHRbbl09PT1lKXJldHVybiBuO3JldHVybi0xfX0sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUscil7cigyNTMpLHQuZXhwb3J0cz1yKDI1Mil9XSl9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vZml2ZS1iZWxscy1jb25kaXRpb24vZGlzdC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXHJcbiAqIFtqcy1zaGEzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZW1uMTc4L2pzLXNoYTN9XHJcbiAqXHJcbiAqIEB2ZXJzaW9uIDAuNS43XHJcbiAqIEBhdXRob3IgQ2hlbiwgWWktQ3l1YW4gW2VtbjE3OEBnbWFpbC5jb21dXHJcbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNS0yMDE2XHJcbiAqIEBsaWNlbnNlIE1JVFxyXG4gKi9cclxuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xyXG4oZnVuY3Rpb24gKCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgdmFyIHJvb3QgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyA/IHdpbmRvdyA6IHt9O1xyXG4gIHZhciBOT0RFX0pTID0gIXJvb3QuSlNfU0hBM19OT19OT0RFX0pTICYmIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcclxuICBpZiAoTk9ERV9KUykge1xyXG4gICAgcm9vdCA9IGdsb2JhbDtcclxuICB9XHJcbiAgdmFyIENPTU1PTl9KUyA9ICFyb290LkpTX1NIQTNfTk9fQ09NTU9OX0pTICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzO1xyXG4gIHZhciBIRVhfQ0hBUlMgPSAnMDEyMzQ1Njc4OWFiY2RlZicuc3BsaXQoJycpO1xyXG4gIHZhciBTSEFLRV9QQURESU5HID0gWzMxLCA3OTM2LCAyMDMxNjE2LCA1MjAwOTM2OTZdO1xyXG4gIHZhciBLRUNDQUtfUEFERElORyA9IFsxLCAyNTYsIDY1NTM2LCAxNjc3NzIxNl07XHJcbiAgdmFyIFBBRERJTkcgPSBbNiwgMTUzNiwgMzkzMjE2LCAxMDA2NjMyOTZdO1xyXG4gIHZhciBTSElGVCA9IFswLCA4LCAxNiwgMjRdO1xyXG4gIHZhciBSQyA9IFsxLCAwLCAzMjg5OCwgMCwgMzI5MDYsIDIxNDc0ODM2NDgsIDIxNDc1MTY0MTYsIDIxNDc0ODM2NDgsIDMyOTA3LCAwLCAyMTQ3NDgzNjQ5LFxyXG4gICAgICAgICAgICAwLCAyMTQ3NTE2NTQ1LCAyMTQ3NDgzNjQ4LCAzMjc3NywgMjE0NzQ4MzY0OCwgMTM4LCAwLCAxMzYsIDAsIDIxNDc1MTY0MjUsIDAsXHJcbiAgICAgICAgICAgIDIxNDc0ODM2NTgsIDAsIDIxNDc1MTY1NTUsIDAsIDEzOSwgMjE0NzQ4MzY0OCwgMzI5MDUsIDIxNDc0ODM2NDgsIDMyNzcxLFxyXG4gICAgICAgICAgICAyMTQ3NDgzNjQ4LCAzMjc3MCwgMjE0NzQ4MzY0OCwgMTI4LCAyMTQ3NDgzNjQ4LCAzMjc3OCwgMCwgMjE0NzQ4MzY1OCwgMjE0NzQ4MzY0OCxcclxuICAgICAgICAgICAgMjE0NzUxNjU0NSwgMjE0NzQ4MzY0OCwgMzI4OTYsIDIxNDc0ODM2NDgsIDIxNDc0ODM2NDksIDAsIDIxNDc1MTY0MjQsIDIxNDc0ODM2NDhdO1xyXG4gIHZhciBCSVRTID0gWzIyNCwgMjU2LCAzODQsIDUxMl07XHJcbiAgdmFyIFNIQUtFX0JJVFMgPSBbMTI4LCAyNTZdO1xyXG4gIHZhciBPVVRQVVRfVFlQRVMgPSBbJ2hleCcsICdidWZmZXInLCAnYXJyYXlCdWZmZXInLCAnYXJyYXknXTtcclxuXHJcbiAgdmFyIGNyZWF0ZU91dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nLCBvdXRwdXRUeXBlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgYml0cykudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBjcmVhdGVTaGFrZU91dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nLCBvdXRwdXRUeXBlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UsIG91dHB1dEJpdHMpIHtcclxuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgb3V0cHV0Qml0cykudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoYml0cywgcGFkZGluZykge1xyXG4gICAgdmFyIG1ldGhvZCA9IGNyZWF0ZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCAnaGV4Jyk7XHJcbiAgICBtZXRob2QuY3JlYXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBiaXRzKTtcclxuICAgIH07XHJcbiAgICBtZXRob2QudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcclxuICAgICAgcmV0dXJuIG1ldGhvZC5jcmVhdGUoKS51cGRhdGUobWVzc2FnZSk7XHJcbiAgICB9O1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBPVVRQVVRfVFlQRVMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgdmFyIHR5cGUgPSBPVVRQVVRfVFlQRVNbaV07XHJcbiAgICAgIG1ldGhvZFt0eXBlXSA9IGNyZWF0ZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCB0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRob2Q7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGNyZWF0ZVNoYWtlTWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcpIHtcclxuICAgIHZhciBtZXRob2QgPSBjcmVhdGVTaGFrZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCAnaGV4Jyk7XHJcbiAgICBtZXRob2QuY3JlYXRlID0gZnVuY3Rpb24gKG91dHB1dEJpdHMpIHtcclxuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgb3V0cHV0Qml0cyk7XHJcbiAgICB9O1xyXG4gICAgbWV0aG9kLnVwZGF0ZSA9IGZ1bmN0aW9uIChtZXNzYWdlLCBvdXRwdXRCaXRzKSB7XHJcbiAgICAgIHJldHVybiBtZXRob2QuY3JlYXRlKG91dHB1dEJpdHMpLnVwZGF0ZShtZXNzYWdlKTtcclxuICAgIH07XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE9VVFBVVF9UWVBFUy5sZW5ndGg7ICsraSkge1xyXG4gICAgICB2YXIgdHlwZSA9IE9VVFBVVF9UWVBFU1tpXTtcclxuICAgICAgbWV0aG9kW3R5cGVdID0gY3JlYXRlU2hha2VPdXRwdXRNZXRob2QoYml0cywgcGFkZGluZywgdHlwZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWV0aG9kO1xyXG4gIH07XHJcblxyXG4gIHZhciBhbGdvcml0aG1zID0gW1xyXG4gICAge25hbWU6ICdrZWNjYWsnLCBwYWRkaW5nOiBLRUNDQUtfUEFERElORywgYml0czogQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVNZXRob2R9LFxyXG4gICAge25hbWU6ICdzaGEzJywgcGFkZGluZzogUEFERElORywgYml0czogQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVNZXRob2R9LFxyXG4gICAge25hbWU6ICdzaGFrZScsIHBhZGRpbmc6IFNIQUtFX1BBRERJTkcsIGJpdHM6IFNIQUtFX0JJVFMsIGNyZWF0ZU1ldGhvZDogY3JlYXRlU2hha2VNZXRob2R9XHJcbiAgXTtcclxuXHJcbiAgdmFyIG1ldGhvZHMgPSB7fSwgbWV0aG9kTmFtZXMgPSBbXTtcclxuXHJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGdvcml0aG1zLmxlbmd0aDsgKytpKSB7XHJcbiAgICB2YXIgYWxnb3JpdGhtID0gYWxnb3JpdGhtc1tpXTtcclxuICAgIHZhciBiaXRzICA9IGFsZ29yaXRobS5iaXRzO1xyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiaXRzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgIHZhciBtZXRob2ROYW1lID0gYWxnb3JpdGhtLm5hbWUgKydfJyArIGJpdHNbal07XHJcbiAgICAgIG1ldGhvZE5hbWVzLnB1c2gobWV0aG9kTmFtZSk7XHJcbiAgICAgIG1ldGhvZHNbbWV0aG9kTmFtZV0gPSBhbGdvcml0aG0uY3JlYXRlTWV0aG9kKGJpdHNbal0sIGFsZ29yaXRobS5wYWRkaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIEtlY2NhayhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKSB7XHJcbiAgICB0aGlzLmJsb2NrcyA9IFtdO1xyXG4gICAgdGhpcy5zID0gW107XHJcbiAgICB0aGlzLnBhZGRpbmcgPSBwYWRkaW5nO1xyXG4gICAgdGhpcy5vdXRwdXRCaXRzID0gb3V0cHV0Qml0cztcclxuICAgIHRoaXMucmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy5ibG9jayA9IDA7XHJcbiAgICB0aGlzLnN0YXJ0ID0gMDtcclxuICAgIHRoaXMuYmxvY2tDb3VudCA9ICgxNjAwIC0gKGJpdHMgPDwgMSkpID4+IDU7XHJcbiAgICB0aGlzLmJ5dGVDb3VudCA9IHRoaXMuYmxvY2tDb3VudCA8PCAyO1xyXG4gICAgdGhpcy5vdXRwdXRCbG9ja3MgPSBvdXRwdXRCaXRzID4+IDU7XHJcbiAgICB0aGlzLmV4dHJhQnl0ZXMgPSAob3V0cHV0Qml0cyAmIDMxKSA+PiAzO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkge1xyXG4gICAgICB0aGlzLnNbaV0gPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgS2VjY2FrLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgdmFyIG5vdFN0cmluZyA9IHR5cGVvZiBtZXNzYWdlICE9PSAnc3RyaW5nJztcclxuICAgIGlmIChub3RTdHJpbmcgJiYgbWVzc2FnZS5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcclxuICAgICAgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gICAgdmFyIGxlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoLCBibG9ja3MgPSB0aGlzLmJsb2NrcywgYnl0ZUNvdW50ID0gdGhpcy5ieXRlQ291bnQsXHJcbiAgICAgIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIGluZGV4ID0gMCwgcyA9IHRoaXMucywgaSwgY29kZTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcclxuICAgICAgaWYgKHRoaXMucmVzZXQpIHtcclxuICAgICAgICB0aGlzLnJlc2V0ID0gZmFsc2U7XHJcbiAgICAgICAgYmxvY2tzWzBdID0gdGhpcy5ibG9jaztcclxuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYmxvY2tDb3VudCArIDE7ICsraSkge1xyXG4gICAgICAgICAgYmxvY2tzW2ldID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vdFN0cmluZykge1xyXG4gICAgICAgIGZvciAoaSA9IHRoaXMuc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCBieXRlQ291bnQ7ICsraW5kZXgpIHtcclxuICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9IG1lc3NhZ2VbaW5kZXhdIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGkgPSB0aGlzLnN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgYnl0ZUNvdW50OyArK2luZGV4KSB7XHJcbiAgICAgICAgICBjb2RlID0gbWVzc2FnZS5jaGFyQ29kZUF0KGluZGV4KTtcclxuICAgICAgICAgIGlmIChjb2RlIDwgMHg4MCkge1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSBjb2RlIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHg4MDApIHtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4YzAgfCAoY29kZSA+PiA2KSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKGNvZGUgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweGQ4MDAgfHwgY29kZSA+PSAweGUwMDApIHtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ZTAgfCAoY29kZSA+PiAxMikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvZGUgPSAweDEwMDAwICsgKCgoY29kZSAmIDB4M2ZmKSA8PCAxMCkgfCAobWVzc2FnZS5jaGFyQ29kZUF0KCsraW5kZXgpICYgMHgzZmYpKTtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ZjAgfCAoY29kZSA+PiAxOCkpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+PiAxMikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8IChjb2RlICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RCeXRlSW5kZXggPSBpO1xyXG4gICAgICBpZiAoaSA+PSBieXRlQ291bnQpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gaSAtIGJ5dGVDb3VudDtcclxuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2tzW2Jsb2NrQ291bnRdO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50OyArK2kpIHtcclxuICAgICAgICAgIHNbaV0gXj0gYmxvY2tzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmKHMpO1xyXG4gICAgICAgIHRoaXMucmVzZXQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLCBpID0gdGhpcy5sYXN0Qnl0ZUluZGV4LCBibG9ja0NvdW50ID0gdGhpcy5ibG9ja0NvdW50LCBzID0gdGhpcy5zO1xyXG4gICAgYmxvY2tzW2kgPj4gMl0gfD0gdGhpcy5wYWRkaW5nW2kgJiAzXTtcclxuICAgIGlmICh0aGlzLmxhc3RCeXRlSW5kZXggPT09IHRoaXMuYnl0ZUNvdW50KSB7XHJcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1tibG9ja0NvdW50XTtcclxuICAgICAgZm9yIChpID0gMTsgaSA8IGJsb2NrQ291bnQgKyAxOyArK2kpIHtcclxuICAgICAgICBibG9ja3NbaV0gPSAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBibG9ja3NbYmxvY2tDb3VudCAtIDFdIHw9IDB4ODAwMDAwMDA7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudDsgKytpKSB7XHJcbiAgICAgIHNbaV0gXj0gYmxvY2tzW2ldO1xyXG4gICAgfVxyXG4gICAgZihzKTtcclxuICB9O1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLnRvU3RyaW5nID0gS2VjY2FrLnByb3RvdHlwZS5oZXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmZpbmFsaXplKCk7XHJcblxyXG4gICAgdmFyIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnMsIG91dHB1dEJsb2NrcyA9IHRoaXMub3V0cHV0QmxvY2tzLFxyXG4gICAgICAgIGV4dHJhQnl0ZXMgPSB0aGlzLmV4dHJhQnl0ZXMsIGkgPSAwLCBqID0gMDtcclxuICAgIHZhciBoZXggPSAnJywgYmxvY2s7XHJcbiAgICB3aGlsZSAoaiA8IG91dHB1dEJsb2Nrcykge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudCAmJiBqIDwgb3V0cHV0QmxvY2tzOyArK2ksICsraikge1xyXG4gICAgICAgIGJsb2NrID0gc1tpXTtcclxuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiA0KSAmIDB4MEZdICsgSEVYX0NIQVJTW2Jsb2NrICYgMHgwRl0gK1xyXG4gICAgICAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDEyKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiA4KSAmIDB4MEZdICtcclxuICAgICAgICAgICAgICAgSEVYX0NIQVJTWyhibG9jayA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gMTYpICYgMHgwRl0gK1xyXG4gICAgICAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDI4KSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiAyNCkgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaiAlIGJsb2NrQ291bnQgPT09IDApIHtcclxuICAgICAgICBmKHMpO1xyXG4gICAgICAgIGkgPSAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZXh0cmFCeXRlcykge1xyXG4gICAgICBibG9jayA9IHNbaV07XHJcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMCkge1xyXG4gICAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGJsb2NrID4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbYmxvY2sgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDEpIHtcclxuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiAxMikgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gOCkgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDIpIHtcclxuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gMTYpICYgMHgwRl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoZXg7XHJcbiAgfTtcclxuXHJcbiAgS2VjY2FrLnByb3RvdHlwZS5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZmluYWxpemUoKTtcclxuXHJcbiAgICB2YXIgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgcyA9IHRoaXMucywgb3V0cHV0QmxvY2tzID0gdGhpcy5vdXRwdXRCbG9ja3MsXHJcbiAgICAgICAgZXh0cmFCeXRlcyA9IHRoaXMuZXh0cmFCeXRlcywgaSA9IDAsIGogPSAwO1xyXG4gICAgdmFyIGJ5dGVzID0gdGhpcy5vdXRwdXRCaXRzID4+IDM7XHJcbiAgICB2YXIgYnVmZmVyO1xyXG4gICAgaWYgKGV4dHJhQnl0ZXMpIHtcclxuICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKChvdXRwdXRCbG9ja3MgKyAxKSA8PCAyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlcyk7XHJcbiAgICB9XHJcbiAgICB2YXIgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcclxuICAgIHdoaWxlIChqIDwgb3V0cHV0QmxvY2tzKSB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50ICYmIGogPCBvdXRwdXRCbG9ja3M7ICsraSwgKytqKSB7XHJcbiAgICAgICAgYXJyYXlbal0gPSBzW2ldO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChqICUgYmxvY2tDb3VudCA9PT0gMCkge1xyXG4gICAgICAgIGYocyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChleHRyYUJ5dGVzKSB7XHJcbiAgICAgIGFycmF5W2ldID0gc1tpXTtcclxuICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKDAsIGJ5dGVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBidWZmZXI7XHJcbiAgfTtcclxuXHJcbiAgS2VjY2FrLnByb3RvdHlwZS5idWZmZXIgPSBLZWNjYWsucHJvdG90eXBlLmFycmF5QnVmZmVyO1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLmRpZ2VzdCA9IEtlY2Nhay5wcm90b3R5cGUuYXJyYXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmZpbmFsaXplKCk7XHJcblxyXG4gICAgdmFyIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnMsIG91dHB1dEJsb2NrcyA9IHRoaXMub3V0cHV0QmxvY2tzLFxyXG4gICAgICAgIGV4dHJhQnl0ZXMgPSB0aGlzLmV4dHJhQnl0ZXMsIGkgPSAwLCBqID0gMDtcclxuICAgIHZhciBhcnJheSA9IFtdLCBvZmZzZXQsIGJsb2NrO1xyXG4gICAgd2hpbGUgKGogPCBvdXRwdXRCbG9ja3MpIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQgJiYgaiA8IG91dHB1dEJsb2NrczsgKytpLCArK2opIHtcclxuICAgICAgICBvZmZzZXQgPSBqIDw8IDI7XHJcbiAgICAgICAgYmxvY2sgPSBzW2ldO1xyXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBibG9jayAmIDB4RkY7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAoYmxvY2sgPj4gOCkgJiAweEZGO1xyXG4gICAgICAgIGFycmF5W29mZnNldCArIDJdID0gKGJsb2NrID4+IDE2KSAmIDB4RkY7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgM10gPSAoYmxvY2sgPj4gMjQpICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaiAlIGJsb2NrQ291bnQgPT09IDApIHtcclxuICAgICAgICBmKHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZXh0cmFCeXRlcykge1xyXG4gICAgICBvZmZzZXQgPSBqIDw8IDI7XHJcbiAgICAgIGJsb2NrID0gc1tpXTtcclxuICAgICAgaWYgKGV4dHJhQnl0ZXMgPiAwKSB7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IGJsb2NrICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDEpIHtcclxuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IChibG9jayA+PiA4KSAmIDB4RkY7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGV4dHJhQnl0ZXMgPiAyKSB7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMl0gPSAoYmxvY2sgPj4gMTYpICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG4gIH07XHJcblxyXG4gIHZhciBmID0gZnVuY3Rpb24gKHMpIHtcclxuICAgIHZhciBoLCBsLCBuLCBjMCwgYzEsIGMyLCBjMywgYzQsIGM1LCBjNiwgYzcsIGM4LCBjOSxcclxuICAgICAgICBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcsIGI4LCBiOSwgYjEwLCBiMTEsIGIxMiwgYjEzLCBiMTQsIGIxNSwgYjE2LCBiMTcsXHJcbiAgICAgICAgYjE4LCBiMTksIGIyMCwgYjIxLCBiMjIsIGIyMywgYjI0LCBiMjUsIGIyNiwgYjI3LCBiMjgsIGIyOSwgYjMwLCBiMzEsIGIzMiwgYjMzLFxyXG4gICAgICAgIGIzNCwgYjM1LCBiMzYsIGIzNywgYjM4LCBiMzksIGI0MCwgYjQxLCBiNDIsIGI0MywgYjQ0LCBiNDUsIGI0NiwgYjQ3LCBiNDgsIGI0OTtcclxuICAgIGZvciAobiA9IDA7IG4gPCA0ODsgbiArPSAyKSB7XHJcbiAgICAgIGMwID0gc1swXSBeIHNbMTBdIF4gc1syMF0gXiBzWzMwXSBeIHNbNDBdO1xyXG4gICAgICBjMSA9IHNbMV0gXiBzWzExXSBeIHNbMjFdIF4gc1szMV0gXiBzWzQxXTtcclxuICAgICAgYzIgPSBzWzJdIF4gc1sxMl0gXiBzWzIyXSBeIHNbMzJdIF4gc1s0Ml07XHJcbiAgICAgIGMzID0gc1szXSBeIHNbMTNdIF4gc1syM10gXiBzWzMzXSBeIHNbNDNdO1xyXG4gICAgICBjNCA9IHNbNF0gXiBzWzE0XSBeIHNbMjRdIF4gc1szNF0gXiBzWzQ0XTtcclxuICAgICAgYzUgPSBzWzVdIF4gc1sxNV0gXiBzWzI1XSBeIHNbMzVdIF4gc1s0NV07XHJcbiAgICAgIGM2ID0gc1s2XSBeIHNbMTZdIF4gc1syNl0gXiBzWzM2XSBeIHNbNDZdO1xyXG4gICAgICBjNyA9IHNbN10gXiBzWzE3XSBeIHNbMjddIF4gc1szN10gXiBzWzQ3XTtcclxuICAgICAgYzggPSBzWzhdIF4gc1sxOF0gXiBzWzI4XSBeIHNbMzhdIF4gc1s0OF07XHJcbiAgICAgIGM5ID0gc1s5XSBeIHNbMTldIF4gc1syOV0gXiBzWzM5XSBeIHNbNDldO1xyXG5cclxuICAgICAgaCA9IGM4IF4gKChjMiA8PCAxKSB8IChjMyA+Pj4gMzEpKTtcclxuICAgICAgbCA9IGM5IF4gKChjMyA8PCAxKSB8IChjMiA+Pj4gMzEpKTtcclxuICAgICAgc1swXSBePSBoO1xyXG4gICAgICBzWzFdIF49IGw7XHJcbiAgICAgIHNbMTBdIF49IGg7XHJcbiAgICAgIHNbMTFdIF49IGw7XHJcbiAgICAgIHNbMjBdIF49IGg7XHJcbiAgICAgIHNbMjFdIF49IGw7XHJcbiAgICAgIHNbMzBdIF49IGg7XHJcbiAgICAgIHNbMzFdIF49IGw7XHJcbiAgICAgIHNbNDBdIF49IGg7XHJcbiAgICAgIHNbNDFdIF49IGw7XHJcbiAgICAgIGggPSBjMCBeICgoYzQgPDwgMSkgfCAoYzUgPj4+IDMxKSk7XHJcbiAgICAgIGwgPSBjMSBeICgoYzUgPDwgMSkgfCAoYzQgPj4+IDMxKSk7XHJcbiAgICAgIHNbMl0gXj0gaDtcclxuICAgICAgc1szXSBePSBsO1xyXG4gICAgICBzWzEyXSBePSBoO1xyXG4gICAgICBzWzEzXSBePSBsO1xyXG4gICAgICBzWzIyXSBePSBoO1xyXG4gICAgICBzWzIzXSBePSBsO1xyXG4gICAgICBzWzMyXSBePSBoO1xyXG4gICAgICBzWzMzXSBePSBsO1xyXG4gICAgICBzWzQyXSBePSBoO1xyXG4gICAgICBzWzQzXSBePSBsO1xyXG4gICAgICBoID0gYzIgXiAoKGM2IDw8IDEpIHwgKGM3ID4+PiAzMSkpO1xyXG4gICAgICBsID0gYzMgXiAoKGM3IDw8IDEpIHwgKGM2ID4+PiAzMSkpO1xyXG4gICAgICBzWzRdIF49IGg7XHJcbiAgICAgIHNbNV0gXj0gbDtcclxuICAgICAgc1sxNF0gXj0gaDtcclxuICAgICAgc1sxNV0gXj0gbDtcclxuICAgICAgc1syNF0gXj0gaDtcclxuICAgICAgc1syNV0gXj0gbDtcclxuICAgICAgc1szNF0gXj0gaDtcclxuICAgICAgc1szNV0gXj0gbDtcclxuICAgICAgc1s0NF0gXj0gaDtcclxuICAgICAgc1s0NV0gXj0gbDtcclxuICAgICAgaCA9IGM0IF4gKChjOCA8PCAxKSB8IChjOSA+Pj4gMzEpKTtcclxuICAgICAgbCA9IGM1IF4gKChjOSA8PCAxKSB8IChjOCA+Pj4gMzEpKTtcclxuICAgICAgc1s2XSBePSBoO1xyXG4gICAgICBzWzddIF49IGw7XHJcbiAgICAgIHNbMTZdIF49IGg7XHJcbiAgICAgIHNbMTddIF49IGw7XHJcbiAgICAgIHNbMjZdIF49IGg7XHJcbiAgICAgIHNbMjddIF49IGw7XHJcbiAgICAgIHNbMzZdIF49IGg7XHJcbiAgICAgIHNbMzddIF49IGw7XHJcbiAgICAgIHNbNDZdIF49IGg7XHJcbiAgICAgIHNbNDddIF49IGw7XHJcbiAgICAgIGggPSBjNiBeICgoYzAgPDwgMSkgfCAoYzEgPj4+IDMxKSk7XHJcbiAgICAgIGwgPSBjNyBeICgoYzEgPDwgMSkgfCAoYzAgPj4+IDMxKSk7XHJcbiAgICAgIHNbOF0gXj0gaDtcclxuICAgICAgc1s5XSBePSBsO1xyXG4gICAgICBzWzE4XSBePSBoO1xyXG4gICAgICBzWzE5XSBePSBsO1xyXG4gICAgICBzWzI4XSBePSBoO1xyXG4gICAgICBzWzI5XSBePSBsO1xyXG4gICAgICBzWzM4XSBePSBoO1xyXG4gICAgICBzWzM5XSBePSBsO1xyXG4gICAgICBzWzQ4XSBePSBoO1xyXG4gICAgICBzWzQ5XSBePSBsO1xyXG5cclxuICAgICAgYjAgPSBzWzBdO1xyXG4gICAgICBiMSA9IHNbMV07XHJcbiAgICAgIGIzMiA9IChzWzExXSA8PCA0KSB8IChzWzEwXSA+Pj4gMjgpO1xyXG4gICAgICBiMzMgPSAoc1sxMF0gPDwgNCkgfCAoc1sxMV0gPj4+IDI4KTtcclxuICAgICAgYjE0ID0gKHNbMjBdIDw8IDMpIHwgKHNbMjFdID4+PiAyOSk7XHJcbiAgICAgIGIxNSA9IChzWzIxXSA8PCAzKSB8IChzWzIwXSA+Pj4gMjkpO1xyXG4gICAgICBiNDYgPSAoc1szMV0gPDwgOSkgfCAoc1szMF0gPj4+IDIzKTtcclxuICAgICAgYjQ3ID0gKHNbMzBdIDw8IDkpIHwgKHNbMzFdID4+PiAyMyk7XHJcbiAgICAgIGIyOCA9IChzWzQwXSA8PCAxOCkgfCAoc1s0MV0gPj4+IDE0KTtcclxuICAgICAgYjI5ID0gKHNbNDFdIDw8IDE4KSB8IChzWzQwXSA+Pj4gMTQpO1xyXG4gICAgICBiMjAgPSAoc1syXSA8PCAxKSB8IChzWzNdID4+PiAzMSk7XHJcbiAgICAgIGIyMSA9IChzWzNdIDw8IDEpIHwgKHNbMl0gPj4+IDMxKTtcclxuICAgICAgYjIgPSAoc1sxM10gPDwgMTIpIHwgKHNbMTJdID4+PiAyMCk7XHJcbiAgICAgIGIzID0gKHNbMTJdIDw8IDEyKSB8IChzWzEzXSA+Pj4gMjApO1xyXG4gICAgICBiMzQgPSAoc1syMl0gPDwgMTApIHwgKHNbMjNdID4+PiAyMik7XHJcbiAgICAgIGIzNSA9IChzWzIzXSA8PCAxMCkgfCAoc1syMl0gPj4+IDIyKTtcclxuICAgICAgYjE2ID0gKHNbMzNdIDw8IDEzKSB8IChzWzMyXSA+Pj4gMTkpO1xyXG4gICAgICBiMTcgPSAoc1szMl0gPDwgMTMpIHwgKHNbMzNdID4+PiAxOSk7XHJcbiAgICAgIGI0OCA9IChzWzQyXSA8PCAyKSB8IChzWzQzXSA+Pj4gMzApO1xyXG4gICAgICBiNDkgPSAoc1s0M10gPDwgMikgfCAoc1s0Ml0gPj4+IDMwKTtcclxuICAgICAgYjQwID0gKHNbNV0gPDwgMzApIHwgKHNbNF0gPj4+IDIpO1xyXG4gICAgICBiNDEgPSAoc1s0XSA8PCAzMCkgfCAoc1s1XSA+Pj4gMik7XHJcbiAgICAgIGIyMiA9IChzWzE0XSA8PCA2KSB8IChzWzE1XSA+Pj4gMjYpO1xyXG4gICAgICBiMjMgPSAoc1sxNV0gPDwgNikgfCAoc1sxNF0gPj4+IDI2KTtcclxuICAgICAgYjQgPSAoc1syNV0gPDwgMTEpIHwgKHNbMjRdID4+PiAyMSk7XHJcbiAgICAgIGI1ID0gKHNbMjRdIDw8IDExKSB8IChzWzI1XSA+Pj4gMjEpO1xyXG4gICAgICBiMzYgPSAoc1szNF0gPDwgMTUpIHwgKHNbMzVdID4+PiAxNyk7XHJcbiAgICAgIGIzNyA9IChzWzM1XSA8PCAxNSkgfCAoc1szNF0gPj4+IDE3KTtcclxuICAgICAgYjE4ID0gKHNbNDVdIDw8IDI5KSB8IChzWzQ0XSA+Pj4gMyk7XHJcbiAgICAgIGIxOSA9IChzWzQ0XSA8PCAyOSkgfCAoc1s0NV0gPj4+IDMpO1xyXG4gICAgICBiMTAgPSAoc1s2XSA8PCAyOCkgfCAoc1s3XSA+Pj4gNCk7XHJcbiAgICAgIGIxMSA9IChzWzddIDw8IDI4KSB8IChzWzZdID4+PiA0KTtcclxuICAgICAgYjQyID0gKHNbMTddIDw8IDIzKSB8IChzWzE2XSA+Pj4gOSk7XHJcbiAgICAgIGI0MyA9IChzWzE2XSA8PCAyMykgfCAoc1sxN10gPj4+IDkpO1xyXG4gICAgICBiMjQgPSAoc1syNl0gPDwgMjUpIHwgKHNbMjddID4+PiA3KTtcclxuICAgICAgYjI1ID0gKHNbMjddIDw8IDI1KSB8IChzWzI2XSA+Pj4gNyk7XHJcbiAgICAgIGI2ID0gKHNbMzZdIDw8IDIxKSB8IChzWzM3XSA+Pj4gMTEpO1xyXG4gICAgICBiNyA9IChzWzM3XSA8PCAyMSkgfCAoc1szNl0gPj4+IDExKTtcclxuICAgICAgYjM4ID0gKHNbNDddIDw8IDI0KSB8IChzWzQ2XSA+Pj4gOCk7XHJcbiAgICAgIGIzOSA9IChzWzQ2XSA8PCAyNCkgfCAoc1s0N10gPj4+IDgpO1xyXG4gICAgICBiMzAgPSAoc1s4XSA8PCAyNykgfCAoc1s5XSA+Pj4gNSk7XHJcbiAgICAgIGIzMSA9IChzWzldIDw8IDI3KSB8IChzWzhdID4+PiA1KTtcclxuICAgICAgYjEyID0gKHNbMThdIDw8IDIwKSB8IChzWzE5XSA+Pj4gMTIpO1xyXG4gICAgICBiMTMgPSAoc1sxOV0gPDwgMjApIHwgKHNbMThdID4+PiAxMik7XHJcbiAgICAgIGI0NCA9IChzWzI5XSA8PCA3KSB8IChzWzI4XSA+Pj4gMjUpO1xyXG4gICAgICBiNDUgPSAoc1syOF0gPDwgNykgfCAoc1syOV0gPj4+IDI1KTtcclxuICAgICAgYjI2ID0gKHNbMzhdIDw8IDgpIHwgKHNbMzldID4+PiAyNCk7XHJcbiAgICAgIGIyNyA9IChzWzM5XSA8PCA4KSB8IChzWzM4XSA+Pj4gMjQpO1xyXG4gICAgICBiOCA9IChzWzQ4XSA8PCAxNCkgfCAoc1s0OV0gPj4+IDE4KTtcclxuICAgICAgYjkgPSAoc1s0OV0gPDwgMTQpIHwgKHNbNDhdID4+PiAxOCk7XHJcblxyXG4gICAgICBzWzBdID0gYjAgXiAofmIyICYgYjQpO1xyXG4gICAgICBzWzFdID0gYjEgXiAofmIzICYgYjUpO1xyXG4gICAgICBzWzEwXSA9IGIxMCBeICh+YjEyICYgYjE0KTtcclxuICAgICAgc1sxMV0gPSBiMTEgXiAofmIxMyAmIGIxNSk7XHJcbiAgICAgIHNbMjBdID0gYjIwIF4gKH5iMjIgJiBiMjQpO1xyXG4gICAgICBzWzIxXSA9IGIyMSBeICh+YjIzICYgYjI1KTtcclxuICAgICAgc1szMF0gPSBiMzAgXiAofmIzMiAmIGIzNCk7XHJcbiAgICAgIHNbMzFdID0gYjMxIF4gKH5iMzMgJiBiMzUpO1xyXG4gICAgICBzWzQwXSA9IGI0MCBeICh+YjQyICYgYjQ0KTtcclxuICAgICAgc1s0MV0gPSBiNDEgXiAofmI0MyAmIGI0NSk7XHJcbiAgICAgIHNbMl0gPSBiMiBeICh+YjQgJiBiNik7XHJcbiAgICAgIHNbM10gPSBiMyBeICh+YjUgJiBiNyk7XHJcbiAgICAgIHNbMTJdID0gYjEyIF4gKH5iMTQgJiBiMTYpO1xyXG4gICAgICBzWzEzXSA9IGIxMyBeICh+YjE1ICYgYjE3KTtcclxuICAgICAgc1syMl0gPSBiMjIgXiAofmIyNCAmIGIyNik7XHJcbiAgICAgIHNbMjNdID0gYjIzIF4gKH5iMjUgJiBiMjcpO1xyXG4gICAgICBzWzMyXSA9IGIzMiBeICh+YjM0ICYgYjM2KTtcclxuICAgICAgc1szM10gPSBiMzMgXiAofmIzNSAmIGIzNyk7XHJcbiAgICAgIHNbNDJdID0gYjQyIF4gKH5iNDQgJiBiNDYpO1xyXG4gICAgICBzWzQzXSA9IGI0MyBeICh+YjQ1ICYgYjQ3KTtcclxuICAgICAgc1s0XSA9IGI0IF4gKH5iNiAmIGI4KTtcclxuICAgICAgc1s1XSA9IGI1IF4gKH5iNyAmIGI5KTtcclxuICAgICAgc1sxNF0gPSBiMTQgXiAofmIxNiAmIGIxOCk7XHJcbiAgICAgIHNbMTVdID0gYjE1IF4gKH5iMTcgJiBiMTkpO1xyXG4gICAgICBzWzI0XSA9IGIyNCBeICh+YjI2ICYgYjI4KTtcclxuICAgICAgc1syNV0gPSBiMjUgXiAofmIyNyAmIGIyOSk7XHJcbiAgICAgIHNbMzRdID0gYjM0IF4gKH5iMzYgJiBiMzgpO1xyXG4gICAgICBzWzM1XSA9IGIzNSBeICh+YjM3ICYgYjM5KTtcclxuICAgICAgc1s0NF0gPSBiNDQgXiAofmI0NiAmIGI0OCk7XHJcbiAgICAgIHNbNDVdID0gYjQ1IF4gKH5iNDcgJiBiNDkpO1xyXG4gICAgICBzWzZdID0gYjYgXiAofmI4ICYgYjApO1xyXG4gICAgICBzWzddID0gYjcgXiAofmI5ICYgYjEpO1xyXG4gICAgICBzWzE2XSA9IGIxNiBeICh+YjE4ICYgYjEwKTtcclxuICAgICAgc1sxN10gPSBiMTcgXiAofmIxOSAmIGIxMSk7XHJcbiAgICAgIHNbMjZdID0gYjI2IF4gKH5iMjggJiBiMjApO1xyXG4gICAgICBzWzI3XSA9IGIyNyBeICh+YjI5ICYgYjIxKTtcclxuICAgICAgc1szNl0gPSBiMzYgXiAofmIzOCAmIGIzMCk7XHJcbiAgICAgIHNbMzddID0gYjM3IF4gKH5iMzkgJiBiMzEpO1xyXG4gICAgICBzWzQ2XSA9IGI0NiBeICh+YjQ4ICYgYjQwKTtcclxuICAgICAgc1s0N10gPSBiNDcgXiAofmI0OSAmIGI0MSk7XHJcbiAgICAgIHNbOF0gPSBiOCBeICh+YjAgJiBiMik7XHJcbiAgICAgIHNbOV0gPSBiOSBeICh+YjEgJiBiMyk7XHJcbiAgICAgIHNbMThdID0gYjE4IF4gKH5iMTAgJiBiMTIpO1xyXG4gICAgICBzWzE5XSA9IGIxOSBeICh+YjExICYgYjEzKTtcclxuICAgICAgc1syOF0gPSBiMjggXiAofmIyMCAmIGIyMik7XHJcbiAgICAgIHNbMjldID0gYjI5IF4gKH5iMjEgJiBiMjMpO1xyXG4gICAgICBzWzM4XSA9IGIzOCBeICh+YjMwICYgYjMyKTtcclxuICAgICAgc1szOV0gPSBiMzkgXiAofmIzMSAmIGIzMyk7XHJcbiAgICAgIHNbNDhdID0gYjQ4IF4gKH5iNDAgJiBiNDIpO1xyXG4gICAgICBzWzQ5XSA9IGI0OSBeICh+YjQxICYgYjQzKTtcclxuXHJcbiAgICAgIHNbMF0gXj0gUkNbbl07XHJcbiAgICAgIHNbMV0gXj0gUkNbbiArIDFdO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGlmIChDT01NT05fSlMpIHtcclxuICAgIG1vZHVsZS5leHBvcnRzID0gbWV0aG9kcztcclxuICB9IGVsc2Uge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRob2ROYW1lcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICByb290W21ldGhvZE5hbWVzW2ldXSA9IG1ldGhvZHNbbWV0aG9kTmFtZXNbaV1dO1xyXG4gICAgfVxyXG4gIH1cclxufSkoKTtcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2pzLXNoYTMvc3JjL3NoYTMuanNcbi8vIG1vZHVsZSBpZCA9IDIzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbih3aW5kb3cpIHtcbiAgICB2YXIgcmUgPSB7XG4gICAgICAgIG5vdF9zdHJpbmc6IC9bXnNdLyxcbiAgICAgICAgbnVtYmVyOiAvW2RpZWZnXS8sXG4gICAgICAgIGpzb246IC9bal0vLFxuICAgICAgICBub3RfanNvbjogL1teal0vLFxuICAgICAgICB0ZXh0OiAvXlteXFx4MjVdKy8sXG4gICAgICAgIG1vZHVsbzogL15cXHgyNXsyfS8sXG4gICAgICAgIHBsYWNlaG9sZGVyOiAvXlxceDI1KD86KFsxLTldXFxkKilcXCR8XFwoKFteXFwpXSspXFwpKT8oXFwrKT8oMHwnW14kXSk/KC0pPyhcXGQrKT8oPzpcXC4oXFxkKykpPyhbYi1naWpvc3V4WF0pLyxcbiAgICAgICAga2V5OiAvXihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgICAgICBrZXlfYWNjZXNzOiAvXlxcLihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgICAgICBpbmRleF9hY2Nlc3M6IC9eXFxbKFxcZCspXFxdLyxcbiAgICAgICAgc2lnbjogL15bXFwrXFwtXS9cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzcHJpbnRmKCkge1xuICAgICAgICB2YXIga2V5ID0gYXJndW1lbnRzWzBdLCBjYWNoZSA9IHNwcmludGYuY2FjaGVcbiAgICAgICAgaWYgKCEoY2FjaGVba2V5XSAmJiBjYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSkge1xuICAgICAgICAgICAgY2FjaGVba2V5XSA9IHNwcmludGYucGFyc2Uoa2V5KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcHJpbnRmLmZvcm1hdC5jYWxsKG51bGwsIGNhY2hlW2tleV0sIGFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBzcHJpbnRmLmZvcm1hdCA9IGZ1bmN0aW9uKHBhcnNlX3RyZWUsIGFyZ3YpIHtcbiAgICAgICAgdmFyIGN1cnNvciA9IDEsIHRyZWVfbGVuZ3RoID0gcGFyc2VfdHJlZS5sZW5ndGgsIG5vZGVfdHlwZSA9IFwiXCIsIGFyZywgb3V0cHV0ID0gW10sIGksIGssIG1hdGNoLCBwYWQsIHBhZF9jaGFyYWN0ZXIsIHBhZF9sZW5ndGgsIGlzX3Bvc2l0aXZlID0gdHJ1ZSwgc2lnbiA9IFwiXCJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyZWVfbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5vZGVfdHlwZSA9IGdldF90eXBlKHBhcnNlX3RyZWVbaV0pXG4gICAgICAgICAgICBpZiAobm9kZV90eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W291dHB1dC5sZW5ndGhdID0gcGFyc2VfdHJlZVtpXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZV90eXBlID09PSBcImFycmF5XCIpIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHBhcnNlX3RyZWVbaV0gLy8gY29udmVuaWVuY2UgcHVycG9zZXMgb25seVxuICAgICAgICAgICAgICAgIGlmIChtYXRjaFsyXSkgeyAvLyBrZXl3b3JkIGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbY3Vyc29yXVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbWF0Y2hbMl0ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmhhc093blByb3BlcnR5KG1hdGNoWzJdW2tdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKFwiW3NwcmludGZdIHByb3BlcnR5ICclcycgZG9lcyBub3QgZXhpc3RcIiwgbWF0Y2hbMl1ba10pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnW21hdGNoWzJdW2tdXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoWzFdKSB7IC8vIHBvc2l0aW9uYWwgYXJndW1lbnQgKGV4cGxpY2l0KVxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W21hdGNoWzFdXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gcG9zaXRpb25hbCBhcmd1bWVudCAoaW1wbGljaXQpXG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbY3Vyc29yKytdXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGdldF90eXBlKGFyZykgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZygpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm5vdF9zdHJpbmcudGVzdChtYXRjaFs4XSkgJiYgcmUubm90X2pzb24udGVzdChtYXRjaFs4XSkgJiYgKGdldF90eXBlKGFyZykgIT0gXCJudW1iZXJcIiAmJiBpc05hTihhcmcpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNwcmludGYoXCJbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJXNcIiwgZ2V0X3R5cGUoYXJnKSkpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KG1hdGNoWzhdKSkge1xuICAgICAgICAgICAgICAgICAgICBpc19wb3NpdGl2ZSA9IGFyZyA+PSAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChtYXRjaFs4XSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKDIpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFyZylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJqXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIG1hdGNoWzZdID8gcGFyc2VJbnQobWF0Y2hbNl0pIDogMClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IG1hdGNoWzddID8gYXJnLnRvRXhwb25lbnRpYWwobWF0Y2hbN10pIDogYXJnLnRvRXhwb25lbnRpYWwoKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gbWF0Y2hbN10gPyBwYXJzZUZsb2F0KGFyZykudG9GaXhlZChtYXRjaFs3XSkgOiBwYXJzZUZsb2F0KGFyZylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IG1hdGNoWzddID8gcGFyc2VGbG9hdChhcmcpLnRvUHJlY2lzaW9uKG1hdGNoWzddKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwib1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKDgpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAoKGFyZyA9IFN0cmluZyhhcmcpKSAmJiBtYXRjaFs3XSA/IGFyZy5zdWJzdHJpbmcoMCwgbWF0Y2hbN10pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwidVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnID4+PiAwXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlLmpzb24udGVzdChtYXRjaFs4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W291dHB1dC5sZW5ndGhdID0gYXJnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmUubnVtYmVyLnRlc3QobWF0Y2hbOF0pICYmICghaXNfcG9zaXRpdmUgfHwgbWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gaXNfcG9zaXRpdmUgPyBcIitcIiA6IFwiLVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcoKS5yZXBsYWNlKHJlLnNpZ24sIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gXCJcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhZF9jaGFyYWN0ZXIgPSBtYXRjaFs0XSA/IG1hdGNoWzRdID09PSBcIjBcIiA/IFwiMFwiIDogbWF0Y2hbNF0uY2hhckF0KDEpIDogXCIgXCJcbiAgICAgICAgICAgICAgICAgICAgcGFkX2xlbmd0aCA9IG1hdGNoWzZdIC0gKHNpZ24gKyBhcmcpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICBwYWQgPSBtYXRjaFs2XSA/IChwYWRfbGVuZ3RoID4gMCA/IHN0cl9yZXBlYXQocGFkX2NoYXJhY3RlciwgcGFkX2xlbmd0aCkgOiBcIlwiKSA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W291dHB1dC5sZW5ndGhdID0gbWF0Y2hbNV0gPyBzaWduICsgYXJnICsgcGFkIDogKHBhZF9jaGFyYWN0ZXIgPT09IFwiMFwiID8gc2lnbiArIHBhZCArIGFyZyA6IHBhZCArIHNpZ24gKyBhcmcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQuam9pbihcIlwiKVxuICAgIH1cblxuICAgIHNwcmludGYuY2FjaGUgPSB7fVxuXG4gICAgc3ByaW50Zi5wYXJzZSA9IGZ1bmN0aW9uKGZtdCkge1xuICAgICAgICB2YXIgX2ZtdCA9IGZtdCwgbWF0Y2ggPSBbXSwgcGFyc2VfdHJlZSA9IFtdLCBhcmdfbmFtZXMgPSAwXG4gICAgICAgIHdoaWxlIChfZm10KSB7XG4gICAgICAgICAgICBpZiAoKG1hdGNoID0gcmUudGV4dC5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWVbcGFyc2VfdHJlZS5sZW5ndGhdID0gbWF0Y2hbMF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHJlLm1vZHVsby5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWVbcGFyc2VfdHJlZS5sZW5ndGhdID0gXCIlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHJlLnBsYWNlaG9sZGVyLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lcyB8PSAxXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZF9saXN0ID0gW10sIHJlcGxhY2VtZW50X2ZpZWxkID0gbWF0Y2hbMl0sIGZpZWxkX21hdGNoID0gW11cbiAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleS5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3RbZmllbGRfbGlzdC5sZW5ndGhdID0gZmllbGRfbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgocmVwbGFjZW1lbnRfZmllbGQgPSByZXBsYWNlbWVudF9maWVsZC5zdWJzdHJpbmcoZmllbGRfbWF0Y2hbMF0ubGVuZ3RoKSkgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZpZWxkX21hdGNoID0gcmUua2V5X2FjY2Vzcy5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdFtmaWVsZF9saXN0Lmxlbmd0aF0gPSBmaWVsZF9tYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoZmllbGRfbWF0Y2ggPSByZS5pbmRleF9hY2Nlc3MuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3RbZmllbGRfbGlzdC5sZW5ndGhdID0gZmllbGRfbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXlcIilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IGZpZWxkX2xpc3RcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lcyB8PSAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhcmdfbmFtZXMgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZFwiKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJzZV90cmVlW3BhcnNlX3RyZWUubGVuZ3RoXSA9IG1hdGNoXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJbc3ByaW50Zl0gdW5leHBlY3RlZCBwbGFjZWhvbGRlclwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2ZtdCA9IF9mbXQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VfdHJlZVxuICAgIH1cblxuICAgIHZhciB2c3ByaW50ZiA9IGZ1bmN0aW9uKGZtdCwgYXJndiwgX2FyZ3YpIHtcbiAgICAgICAgX2FyZ3YgPSAoYXJndiB8fCBbXSkuc2xpY2UoMClcbiAgICAgICAgX2FyZ3Yuc3BsaWNlKDAsIDAsIGZtdClcbiAgICAgICAgcmV0dXJuIHNwcmludGYuYXBwbHkobnVsbCwgX2FyZ3YpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaGVscGVyc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldF90eXBlKHZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFyaWFibGUpLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyX3JlcGVhdChpbnB1dCwgbXVsdGlwbGllcikge1xuICAgICAgICByZXR1cm4gQXJyYXkobXVsdGlwbGllciArIDEpLmpvaW4oaW5wdXQpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZXhwb3J0IHRvIGVpdGhlciBicm93c2VyIG9yIG5vZGUuanNcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgZXhwb3J0cy5zcHJpbnRmID0gc3ByaW50ZlxuICAgICAgICBleHBvcnRzLnZzcHJpbnRmID0gdnNwcmludGZcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHdpbmRvdy5zcHJpbnRmID0gc3ByaW50ZlxuICAgICAgICB3aW5kb3cudnNwcmludGYgPSB2c3ByaW50ZlxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNwcmludGY6IHNwcmludGYsXG4gICAgICAgICAgICAgICAgICAgIHZzcHJpbnRmOiB2c3ByaW50ZlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG59KSh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IHdpbmRvdyk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vc3ByaW50Zi1qcy9zcmMvc3ByaW50Zi5qc1xuLy8gbW9kdWxlIGlkID0gMjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IGJhc2U1OCBmcm9tICdiczU4JztcbmltcG9ydCBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgc2hhMyBmcm9tICdqcy1zaGEzJztcblxuLyoqXG4gKiBAY2xhc3MgS2V5cGFpciBFZDI1NTE5IGtleXBhaXIgaW4gYmFzZTU4IChhcyBCaWdjaGFpbkRCIGV4cGVjdHMgYmFzZTU4IGtleXMpXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHBhcmFtIHtudW1iZXJ9IHNlY3JldCBBIHNlZWQgdGhhdCB3aWxsIGJlIHVzZWQgYXMgYSBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHB1YmxpY0tleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByaXZhdGVLZXlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWQyNTUxOUtleXBhaXIoc2VjcmV0KSB7XG4gICAgbGV0IGtleVBhaXI7XG4gICAgaWYgKHNlY3JldCkge1xuICAgICAgICAvLyBRdWljayBhbmQgZGlydHk6IHVzZSBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiBpbnN0ZWFkXG4gICAgICAgIGNvbnN0IHNlY3JldEhhc2ggPSBzaGEzLnNoYTNfMjU2XG4gICAgICAgICAgICAuY3JlYXRlKClcbiAgICAgICAgICAgIC51cGRhdGUoc2VjcmV0KVxuICAgICAgICAgICAgLmFycmF5KCk7XG4gICAgICAgIGtleVBhaXIgPSBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChuZXcgVWludDhBcnJheShzZWNyZXRIYXNoKSlcbiAgICB9IGVsc2Uge1xuICAgICAgICBrZXlQYWlyID0gbmFjbC5zaWduLmtleVBhaXIoKTtcbiAgICB9XG4gICAgdGhpcy5wdWJsaWNLZXkgPSBiYXNlNTguZW5jb2RlKGtleVBhaXIucHVibGljS2V5KTtcbiAgICAvLyB0d2VldG5hY2wncyBnZW5lcmF0ZWQgc2VjcmV0IGtleSBpcyB0aGUgc2VjcmV0IGtleSArIHB1YmxpYyBrZXkgKHJlc3VsdGluZyBpbiBhIDY0LWJ5dGUgYnVmZmVyKVxuICAgIHRoaXMucHJpdmF0ZUtleSA9IGJhc2U1OC5lbmNvZGUoa2V5UGFpci5zZWNyZXRLZXkuc2xpY2UoMCwgMzIpKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9FZDI1NTE5S2V5cGFpci5qcyIsImltcG9ydCB7IFByb21pc2UgfSBmcm9tICdlczYtcHJvbWlzZSc7XG5pbXBvcnQgZmV0Y2hQb255ZmlsbCBmcm9tICdmZXRjaC1wb255ZmlsbCc7XG5pbXBvcnQgeyB2c3ByaW50ZiB9IGZyb20gJ3NwcmludGYtanMnO1xuXG5pbXBvcnQgZm9ybWF0VGV4dCBmcm9tICcuL2Zvcm1hdF90ZXh0JztcblxuaW1wb3J0IHN0cmluZ2lmeUFzUXVlcnlQYXJhbSBmcm9tICcuL3N0cmluZ2lmeV9hc19xdWVyeV9wYXJhbSc7XG5cblxuY29uc3QgZmV0Y2ggPSBmZXRjaFBvbnlmaWxsKFByb21pc2UpO1xuXG5cbi8qKlxuICogaW1wb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYmlnY2hhaW5kYi9qcy11dGlsaXR5LWJlbHQvXG4gKlxuICogR2xvYmFsIGZldGNoIHdyYXBwZXIgdGhhdCBhZGRzIHNvbWUgYmFzaWMgZXJyb3IgaGFuZGxpbmcgYW5kIGVhc2Ugb2YgdXNlIGVuaGFuY2VtZW50cy5cbiAqIENvbnNpZGVycyBhbnkgbm9uLTJ4eCByZXNwb25zZSBhcyBhbiBlcnJvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBmZXRjaCwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HbG9iYWxGZXRjaC9mZXRjaC5cbiAqXG4gKiBFeHBlY3RzIGZldGNoIHRvIGFscmVhZHkgYmUgYXZhaWxhYmxlIChlaXRoZXIgaW4gYSBFUzYgZW52aXJvbm1lbnQsIGJ1bmRsZWQgdGhyb3VnaCB3ZWJwYWNrLCBvclxuICogaW5qZWN0ZWQgdGhyb3VnaCBhIHBvbHlmaWxsKS5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICB1cmwgICAgVXJsIHRvIHJlcXVlc3QuIENhbiBiZSBzcGVjaWZpZWQgYXMgYSBzcHJpbnRmIGZvcm1hdCBzdHJpbmcgKHNlZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGV4ZWkvc3ByaW50Zi5qcykgdGhhdCB3aWxsIGJlIHJlc29sdmVkIHVzaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYGNvbmZpZy51cmxUZW1wbGF0ZVNwZWNgLlxuICogQHBhcmFtICB7b2JqZWN0fSAgY29uZmlnIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiwgbW9zdGx5IHBhc3NlZCB0byBmZXRjaCBhcyBpdHMgJ2luaXQnIGNvbmZpZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dsb2JhbEZldGNoL2ZldGNoI1BhcmFtZXRlcnMpLlxuICogQHBhcmFtICB7Kn0gICAgICAgICAgICAgY29uZmlnLmpzb25Cb2R5ICAgICAgICBKc29uIHBheWxvYWQgdG8gdGhlIHJlcXVlc3QuIFdpbGwgYXV0b21hdGljYWxseSBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSgpLWVkIGFuZCBvdmVycmlkZSBgY29uZmlnLmJvZHlgLlxuICogQHBhcmFtICB7c3RyaW5nfG9iamVjdH0gY29uZmlnLnF1ZXJ5ICAgICAgICAgICBRdWVyeSBwYXJhbWV0ZXIgdG8gYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIHVybC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc3BlY2lmaWVkIGFzIGFuIG9iamVjdCwga2V5cyB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2FtZWxpemVkIGludG8gc25ha2UgY2FzZSBmaXJzdC5cbiAqIEBwYXJhbSAgeypbXXxvYmplY3R9ICAgIGNvbmZpZy51cmxUZW1wbGF0ZVNwZWMgRm9ybWF0IHNwZWMgdG8gdXNlIHRvIGV4cGFuZCB0aGUgdXJsIChzZWUgc3ByaW50ZikuXG4gKiBAcGFyYW0gIHsqfSAgICAgICAgICAgICBjb25maWcuKiAgICAgICAgICAgICAgIEFsbCBvdGhlciBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBmZXRjaC5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAgICAgICAgUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSB3aXRoIHRoZSByZXNwb25zZSBpZiBpdHMgc3RhdHVzIHdhcyAyeHg7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHJlamVjdHMgd2l0aCB0aGUgcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmFzZVJlcXVlc3QodXJsLCB7IGpzb25Cb2R5LCBxdWVyeSwgdXJsVGVtcGxhdGVTcGVjLCAuLi5mZXRjaENvbmZpZyB9ID0ge30pIHtcbiAgICBsZXQgZXhwYW5kZWRVcmwgPSB1cmw7XG5cbiAgICBpZiAodXJsVGVtcGxhdGVTcGVjICE9IG51bGwpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXJsVGVtcGxhdGVTcGVjKSAmJiB1cmxUZW1wbGF0ZVNwZWMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBVc2UgdnNwcmludGYgZm9yIHRoZSBhcnJheSBjYWxsIHNpZ25hdHVyZVxuICAgICAgICAgICAgZXhwYW5kZWRVcmwgPSB2c3ByaW50Zih1cmwsIHVybFRlbXBsYXRlU3BlYyk7XG4gICAgICAgIH0gZWxzZSBpZiAodXJsVGVtcGxhdGVTcGVjICYmXG4gICAgICAgICAgICAgICAgICAgdHlwZW9mIHVybFRlbXBsYXRlU3BlYyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh1cmxUZW1wbGF0ZVNwZWMpLmxlbmd0aCkge1xuICAgICAgICAgICAgZXhwYW5kZWRVcmwgPSBmb3JtYXRUZXh0KHVybCwgdXJsVGVtcGxhdGVTcGVjKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdTdXBwbGllZCB1cmxUZW1wbGF0ZVNwZWMgd2FzIG5vdCBhbiBhcnJheSBvciBvYmplY3QuIElnbm9yaW5nLi4uJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocXVlcnkgIT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZXhwYW5kZWRVcmwgKz0gcXVlcnk7XG4gICAgICAgIH0gZWxzZSBpZiAocXVlcnkgJiYgdHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZXhwYW5kZWRVcmwgKz0gc3RyaW5naWZ5QXNRdWVyeVBhcmFtKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdTdXBwbGllZCBxdWVyeSB3YXMgbm90IGEgc3RyaW5nIG9yIG9iamVjdC4gSWdub3JpbmcuLi4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChqc29uQm9keSAhPSBudWxsKSB7XG4gICAgICAgIGZldGNoQ29uZmlnLmJvZHkgPSBKU09OLnN0cmluZ2lmeShqc29uQm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZldGNoLmZldGNoKGV4cGFuZGVkVXJsLCBmZXRjaENvbmZpZylcbiAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgLy8gSWYgc3RhdHVzIGlzIG5vdCBhIDJ4eCAoYmFzZWQgb24gUmVzcG9uc2Uub2spLCBhc3N1bWUgaXQncyBhbiBlcnJvclxuICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HbG9iYWxGZXRjaC9mZXRjaFxuICAgICAgICAgICAgaWYgKCEocmVzICYmIHJlcy5vaykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYmFzZVJlcXVlc3QuanMiLCJpbXBvcnQgZ2V0QXBpVXJscyBmcm9tICcuL2dldEFwaVVybHMnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmxvY2soYmxvY2tJZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsnYmxvY2tzX2RldGFpbCddLCB7XG4gICAgICAgICAgICB1cmxUZW1wbGF0ZVNwZWM6IHtcbiAgICAgICAgICAgICAgICBibG9ja0lkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufVxuXG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL2dldEJsb2NrLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RCbG9ja3Moe3R4X2lkLCBzdGF0dXN9LCBBUElfUEFUSCkge1xuICAgIHJldHVybiByZXF1ZXN0KGdldEFwaVVybHMoQVBJX1BBVEgpWydibG9ja3MnXSwge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICB0eF9pZCxcbiAgICAgICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9saXN0QmxvY2tzLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RPdXRwdXRzKHsgcHVibGljX2tleSwgdW5zcGVudCB9LCBBUElfUEFUSCwgb25seUpzb25SZXNwb25zZT10cnVlKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QoZ2V0QXBpVXJscyhBUElfUEFUSClbJ291dHB1dHMnXSwge1xuICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgcHVibGljX2tleSxcbiAgICAgICAgICAgIHVuc3BlbnRcbiAgICAgICAgfVxuICAgIH0sIG9ubHlKc29uUmVzcG9uc2UpXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vbGlzdE91dHB1dHMuanMiLCJpbXBvcnQgZ2V0QXBpVXJscyBmcm9tICcuL2dldEFwaVVybHMnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFRyYW5zYWN0aW9ucyh7IGFzc2V0X2lkLCBvcGVyYXRpb24gfSwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndHJhbnNhY3Rpb25zJ10sIHtcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIGFzc2V0X2lkLFxuICAgICAgICAgICAgb3BlcmF0aW9uXG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL2xpc3RUcmFuc2FjdGlvbnMuanMiLCJpbXBvcnQgZ2V0QXBpVXJscyBmcm9tICcuL2dldEFwaVVybHMnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFZvdGVzKGJsb2NrX2lkLCBBUElfUEFUSCkge1xuICAgIHJldHVybiByZXF1ZXN0KGdldEFwaVVybHMoQVBJX1BBVEgpWyd2b3RlcyddLCB7XG4gICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICAgIGJsb2NrX2lkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufVxuXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9saXN0Vm90ZXMuanMiLCJpbXBvcnQgZ2V0VHJhbnNhY3Rpb24gZnJvbSAnLi9nZXRUcmFuc2FjdGlvbic7XG5pbXBvcnQgZ2V0U3RhdHVzIGZyb20gJy4vZ2V0U3RhdHVzJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAodHhfaWQsIEFQSV9QQVRIKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBnZXRTdGF0dXModHhfaWQsIEFQSV9QQVRIKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZldGNoZWQgdHJhbnNhY3Rpb24gc3RhdHVzOicsIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAndmFsaWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyYW5zYWN0aW9uKHR4X2lkLCBBUElfUEFUSClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGZXRjaGVkIHRyYW5zYWN0aW9uOicsIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCA1MDApXG4gICAgfSlcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL3BvbGxTdGF0dXNBbmRGZXRjaFRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBvc3RUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndHJhbnNhY3Rpb25zJ10sIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGpzb25Cb2R5OiB0cmFuc2FjdGlvblxuICAgIH0pXG59XG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL3Bvc3RUcmFuc2FjdGlvbi5qcyIsImltcG9ydCB7IHNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcblxuXG4vLyBSZWdleGVzIHRha2VuIGZyb20gb3IgaW5zcGlyZWQgYnkgc3ByaW50Zi1qc1xuY29uc3QgUmVnZXggPSB7XG4gICAgVEVNUExBVEVfTElURVJBTDogL1xcJHsoW15cXCldKz8pfS9nLFxuICAgIEtFWTogL14oW2Etel9dW2Etel9cXGRdKikvaSxcbiAgICBLRVlfQUNDRVNTOiAvXlxcLihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgIElOREVYX0FDQ0VTUzogL15cXFsoXFxkKylcXF0vXG59O1xuXG4vKipcbiAqIGltcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2JpZ2NoYWluZGIvanMtdXRpbGl0eS1iZWx0L1xuICpcbiAqIEZvcm1hdHMgc3RyaW5ncyBzaW1pbGFybHkgdG8gQydzIHNwcmludGYsIHdpdGggdGhlIGFkZGl0aW9uIG9mICckey4uLn0nIGZvcm1hdHMuXG4gKlxuICogTWFrZXMgYSBmaXJzdCBwYXNzIHJlcGxhY2luZyAnJHsuLi59JyBmb3JtYXRzIGJlZm9yZSBwYXNzaW5nIHRoZSBleHBhbmRlZCBzdHJpbmcgYW5kIG90aGVyXG4gKiBhcmd1bWVudHMgdG8gc3ByaW50Zi1qcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gd2hhdCBzcHJpbnRmIGNhbiBkbywgc2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYWxleGVpL3NwcmludGYuanMuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgIGZvcm1hdFRleHQoJ0hpIHRoZXJlICR7ZGltaX0hJywgeyBkaW1pOiAnRGltaScgfSlcbiAqICAgICAgID0+ICdIaSB0aGVyZSBEaW1pISdcbiAqXG4gKiAgIGZvcm1hdFRleHQoJyR7ZGF0YWJhc2V9IGlzICUoc3RhdHVzKXMnLCB7IGRhdGFiYXNlOiAnQmlnY2hhaW5EQicsIHN0YXR1czogJ2JpZycgfSlcbiAqICAgICAgID0+ICdCaWdjaGFpbkRCIGlzIGJpZydcbiAqXG4gKiBMaWtlIHNwcmludGYtanMsIHN0cmluZyBpbnRlcnBvbGF0aW9uIGZvciBrZXl3b3JkcyBhbmQgaW5kZXhlcyBpcyBzdXBwb3J0ZWQgdG9vOlxuICogICBmb3JtYXRUZXh0KCdCZXJsaW4gaXMgYmVzdCBrbm93biBmb3IgaXRzICR7YmVybGluLnRvcEtub3duRm9yWzBdLm5hbWV9Jywge1xuICogICAgICAgYmVybGluOiB7XG4gKiAgICAgICAgICAgdG9wS25vd25Gb3I6IFt7XG4gKiAgICAgICAgICAgICAgIG5hbWU6ICdDdXJyeXd1cnN0J1xuICogICAgICAgICAgIH0sIC4uLlxuICogICAgICAgICAgIF1cbiAqICAgICAgIH1cbiAqICAgfSlcbiAqICAgICAgID0+ICdCZXJsaW4gaXMgYmVzdCBrbm93biBmb3IgaXRzIEN1cnJ5d3Vyc3QnXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFRleHQocywgLi4uYXJndikge1xuICAgIGxldCBleHBhbmRlZEZvcm1hdFN0ciA9IHM7XG5cbiAgICAvLyBUcnkgdG8gcmVwbGFjZSBmb3JtYXRzIG9mIHRoZSBmb3JtICckey4uLn0nIGlmIG5hbWVkIHJlcGxhY2VtZW50IGZpZWxkcyBhcmUgdXNlZFxuICAgIGlmIChzICYmIGFyZ3YubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmd2WzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVNwZWNPYmogPSBhcmd2WzBdO1xuXG4gICAgICAgIGV4cGFuZGVkRm9ybWF0U3RyID0gcy5yZXBsYWNlKFJlZ2V4LlRFTVBMQVRFX0xJVEVSQUwsIChtYXRjaCwgcmVwbGFjZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBpbnRlcnBvbGF0aW9uTGVmdCA9IHJlcGxhY2VtZW50O1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEludGVycG9sYXRpb24gYWxnb3JpdGhtIGluc3BpcmVkIGJ5IHNwcmludGYtanMuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogR29lcyB0aHJvdWdoIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgZ2V0dGluZyB0aGUgbGVmdC1tb3N0IGtleSBvciBpbmRleCB0byBpbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICogb24gZWFjaCBwYXNzLiBgdmFsdWVgIGF0IGVhY2ggc3RlcCBob2xkcyB0aGUgbGFzdCBpbnRlcnBvbGF0aW9uIHJlc3VsdCwgYGN1ck1hdGNoYCBpc1xuICAgICAgICAgICAgICogdGhlIGN1cnJlbnQgcHJvcGVydHkgbWF0Y2gsIGFuZCBgaW50ZXJwb2xhdGlvbkxlZnRgIGlzIHRoZSBwb3J0aW9uIG9mIHRoZSByZXBsYWNlbWVudFxuICAgICAgICAgICAgICogc3RyaW5nIHN0aWxsIHRvIGJlIGludGVycG9sYXRlZC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBJdCdzIHVzZWZ1bCB0byBub3RlIHRoYXQgUmVnRXhwLmV4ZWMoKSByZXR1cm5zIHdpdGggYW4gYXJyYXkgaG9sZGluZzpcbiAgICAgICAgICAgICAqICAgWzBdOiAgRnVsbCBzdHJpbmcgbWF0Y2hlZFxuICAgICAgICAgICAgICogICBbMStdOiBNYXRjaGluZyBncm91cHNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBBbmQgdGhhdCBpbiB0aGUgcmVnZXhlcyBkZWZpbmVkLCB0aGUgZmlyc3QgbWF0Y2hpbmcgZ3JvdXAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvIHRoZVxuICAgICAgICAgICAgICogcHJvcGVydHkgbWF0Y2hlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgbGV0IGN1ck1hdGNoID0gUmVnZXguS0VZLmV4ZWMoaW50ZXJwb2xhdGlvbkxlZnQpO1xuICAgICAgICAgICAgaWYgKGN1ck1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0ZW1wbGF0ZVNwZWNPYmpbY3VyTWF0Y2hbMV1dO1xuXG4gICAgICAgICAgICAgICAgLy8gQXNzaWduaW5nIGluIHRoZSBjb25kaXRpb25hbHMgaGVyZSBtYWtlcyB0aGUgY29kZSBsZXNzIGJsb2F0ZWRcbiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuICAgICAgICAgICAgICAgIHdoaWxlICgoaW50ZXJwb2xhdGlvbkxlZnQgPSBpbnRlcnBvbGF0aW9uTGVmdC5zdWJzdHJpbmcoY3VyTWF0Y2hbMF0ubGVuZ3RoKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGN1ck1hdGNoID0gUmVnZXguS0VZX0FDQ0VTUy5leGVjKGludGVycG9sYXRpb25MZWZ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbY3VyTWF0Y2hbMV1dO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjdXJNYXRjaCA9IFJlZ2V4LklOREVYX0FDQ0VTUy5leGVjKGludGVycG9sYXRpb25MZWZ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbY3VyTWF0Y2hbMV1dO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFueXRoaW5nIGxlZnQgdG8gaW50ZXJwb2xhdGUgYnkgdGhlIGVuZCB0aGVuIHdlJ3ZlIGZhaWxlZCB0byBpbnRlcnBvbGF0ZVxuICAgICAgICAgICAgLy8gdGhlIGVudGlyZSByZXBsYWNlbWVudCBzdHJpbmcuXG4gICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbkxlZnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgW2Zvcm1hdFRleHRdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXk6ICR7cmVwbGFjZW1lbnR9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwcmludGYoZXhwYW5kZWRGb3JtYXRTdHIsIC4uLmFyZ3YpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9mb3JtYXRfdGV4dC5qcyIsImltcG9ydCBjb3JlSW5jbHVkZXMgZnJvbSAnY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2luY2x1ZGVzJztcbmltcG9ydCBjb3JlT2JqZWN0RW50cmllcyBmcm9tICdjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2VudHJpZXMnO1xuXG5cbi8qKlxuICogQWJzdHJhY3Rpb24gZm9yIHNlbGVjdEZyb21PYmplY3QgYW5kIG9taXRGcm9tT2JqZWN0IGZvciBEUlluZXNzLlxuICogU2V0IGlzSW5jbHVzaW9uIHRvIHRydWUgaWYgdGhlIGZpbHRlciBzaG91bGQgYmUgZm9yIGluY2x1ZGluZyB0aGUgZmlsdGVyZWQgaXRlbXMgKGllLiBzZWxlY3RpbmdcbiAqIG9ubHkgdGhlbSB2cyBvbWl0dGluZyBvbmx5IHRoZW0pLlxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tT2JqZWN0KG9iaiwgZmlsdGVyLCB7IGlzSW5jbHVzaW9uID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBpZiAoZmlsdGVyICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICByZXR1cm4gYXBwbHlGaWx0ZXJPbk9iamVjdChvYmosIGlzSW5jbHVzaW9uID8gKChfLCBrZXkpID0+IGNvcmVJbmNsdWRlcyhmaWx0ZXIsIGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKF8sIGtleSkgPT4gIWNvcmVJbmNsdWRlcyhmaWx0ZXIsIGtleSkpKTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiB0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEZsaXAgdGhlIGZpbHRlciBmbidzIHJldHVybiBpZiBpdCdzIGZvciBpbmNsdXNpb25cbiAgICAgICAgcmV0dXJuIGFwcGx5RmlsdGVyT25PYmplY3Qob2JqLCBpc0luY2x1c2lvbiA/IGZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKC4uLmFyZ3MpID0+ICFmaWx0ZXIoLi4uYXJncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIGZpbHRlciBpcyBub3QgYW4gYXJyYXkgb3IgZnVuY3Rpb24uIEV4Y2x1ZGUgYWJvcnRlZCcpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZmlsdGVyZWQgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0J3Mgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyAobm8gaW5oZXJpdGVkXG4gKiBwcm9wZXJ0aWVzKSwga2VlcGluZyBhbnkga2V5cyB0aGF0IHBhc3MgdGhlIGdpdmVuIGZpbHRlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYXBwbHlGaWx0ZXJPbk9iamVjdChvYmosIGZpbHRlckZuKSB7XG4gICAgaWYgKGZpbHRlckZuID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRPYmogPSB7fTtcbiAgICBjb3JlT2JqZWN0RW50cmllcyhvYmopLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgaWYgKGZpbHRlckZuKHZhbCwga2V5KSkge1xuICAgICAgICAgICAgZmlsdGVyZWRPYmpba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkT2JqO1xufVxuXG4vKipcbiAqIFNpbWlsYXIgdG8gbG9kYXNoJ3MgXy5waWNrKCksIHRoaXMgcmV0dXJucyBhIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdCdzXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMsIHNlbGVjdGluZyBvbmx5IHRoZSBrZXlzIGluXG4gKiB0aGUgZ2l2ZW4gYXJyYXkgb3Igd2hvc2UgdmFsdWUgcGFzcyB0aGUgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLlxuICogQHBhcmFtICB7b2JqZWN0fSAgICAgICAgIG9iaiAgICBTb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0gIHthcnJheXxmdW5jdGlvbn0gZmlsdGVyIEFycmF5IG9mIGtleSBuYW1lcyB0byBzZWxlY3Qgb3IgZnVuY3Rpb24gdG8gaW52b2tlIHBlciBpdGVyYXRpb25cbiAqIEByZXR1cm4ge29iamVjdH0gICAgICAgICAgICAgICAgVGhlIG5ldyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gc2VsZWN0RnJvbU9iamVjdChvYmosIGZpbHRlcikge1xuICAgIHJldHVybiBmaWx0ZXJGcm9tT2JqZWN0KG9iaiwgZmlsdGVyKTtcbn1cblxuLyoqXG4gKiBHbG9yaWZpZWQgc2VsZWN0RnJvbU9iamVjdC4gVGFrZXMgYW4gb2JqZWN0IGFuZCByZXR1cm5zIGEgZmlsdGVyZWQgc2hhbGxvdyBjb3B5IHRoYXQgc3RyaXBzIG91dFxuICogYW55IHByb3BlcnRpZXMgdGhhdCBhcmUgZmFsc3kgKGluY2x1ZGluZyBjb2VyY2lvbnMsIGllLiB1bmRlZmluZWQsIG51bGwsICcnLCAwLCAuLi4pLlxuICogRG9lcyBub3QgbW9kaWZ5IHRoZSBwYXNzZWQgaW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gb2JqICAgICAgSmF2YXNjcmlwdCBvYmplY3RcbiAqIEByZXR1cm4ge29iamVjdH0gICAgICAgICAgU2FuaXRpemVkIEphdmFzY3JpcHQgb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNhbml0aXplKG9iaikge1xuICAgIHJldHVybiBzZWxlY3RGcm9tT2JqZWN0KG9iaiwgKHZhbCkgPT4gISF2YWwpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Nhbml0aXplLmpzIiwiaW1wb3J0IHNoYTMgZnJvbSAnanMtc2hhMyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYTI1Nkhhc2goZGF0YSkge1xuICAgIHJldHVybiBzaGEzLnNoYTNfMjU2XG4gICAgICAgIC5jcmVhdGUoKVxuICAgICAgICAudXBkYXRlKGRhdGEpXG4gICAgICAgIC5oZXgoKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zaGEyNTZIYXNoLmpzIiwiaW1wb3J0IGNvcmVPYmplY3RFbnRyaWVzIGZyb20gJ2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZW50cmllcyc7XG5pbXBvcnQgZGVjYW1lbGl6ZSBmcm9tICdkZWNhbWVsaXplJztcbmltcG9ydCBxdWVyeVN0cmluZyBmcm9tICdxdWVyeS1zdHJpbmcnO1xuXG5cbi8qKlxuICogaW1wb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYmlnY2hhaW5kYi9qcy11dGlsaXR5LWJlbHQvXG4gKlxuICogVGFrZXMgYSBrZXktdmFsdWUgZGljdGlvbmFyeSAoaWUuIG9iamVjdCkgYW5kIGNvbnZlcnRzIGl0IHRvIGEgcXVlcnktcGFyYW1ldGVyIHN0cmluZyB0aGF0IHlvdVxuICogY2FuIGRpcmVjdGx5IGFwcGVuZCBpbnRvIGEgVVJMLlxuICpcbiAqIEV4dGVuZHMgcXVlcnlTdHJpbmcuc3RyaW5naWZ5IGJ5IGFsbG93aW5nIHlvdSB0byBzcGVjaWZ5IGEgYHRyYW5zZm9ybWAgZnVuY3Rpb24gdGhhdCB3aWxsIGJlXG4gKiBpbnZva2VkIG9uIGVhY2ggb2YgdGhlIGRpY3Rpb25hcnkncyBrZXlzIGJlZm9yZSBiZWluZyBzdHJpbmdpZmllZCBpbnRvIHRoZSBxdWVyeS1wYXJhbWV0ZXJcbiAqIHN0cmluZy5cbiAqXG4gKiBCeSBkZWZhdWx0IGB0cmFuc2Zvcm1gIGlzIGBkZWNhbWVsaXplYCwgc28gYSBkaWN0aW9uYXJ5IG9mIHRoZSBmb3JtOlxuICpcbiAqICAge1xuICogICAgICBwYWdlOiAxLFxuICogICAgICBwYWdlU2l6ZTogMTBcbiAqICAgfVxuICpcbiAqIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIGxpa2U6XG4gKlxuICogICA/cGFnZT0xJnBhZ2Vfc2l6ZT0xMFxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gICBvYmogICAgICAgICAgICAgICAgICAgIFF1ZXJ5IHBhcmFtcyBkaWN0aW9uYXJ5XG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gW3RyYW5zZm9ybT1kZWNhbWVsaXplXSBUcmFuc2Zvcm0gZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIHBhcmFtIGtleXNcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IHBhcmFtIHN0cmluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHJpbmdpZnlBc1F1ZXJ5UGFyYW0ob2JqLCB0cmFuc2Zvcm0gPSBkZWNhbWVsaXplKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKG9iaikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZEtleXNPYmogPSBjb3JlT2JqZWN0RW50cmllcyhvYmopLnJlZHVjZSgocGFyYW1zT2JqLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgcGFyYW1zT2JqW3RyYW5zZm9ybShrZXkpXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcGFyYW1zT2JqO1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiBgPyR7cXVlcnlTdHJpbmcuc3RyaW5naWZ5KHRyYW5zZm9ybWVkS2V5c09iail9YDtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3RyaW5naWZ5X2FzX3F1ZXJ5X3BhcmFtLmpzIiwiaW1wb3J0IHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyBmcm9tICcuL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyc7XG5pbXBvcnQgc2hhMjU2SGFzaCBmcm9tICcuLi9zaGEyNTZIYXNoJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzaFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSB7XG4gICAgLy8gU2FmZWx5IHJlbW92ZSBhbnkgdHggaWQgZnJvbSB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24gZm9yIGhhc2hpbmdcbiAgICBjb25zdCB0eCA9IHsgLi4udHJhbnNhY3Rpb24gfTtcbiAgICBkZWxldGUgdHguaWQ7XG5cbiAgICByZXR1cm4gc2hhMjU2SGFzaChzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcodHgpKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vaGFzaFRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IG1ha2VJbnB1dFRlbXBsYXRlIGZyb20gJy4vbWFrZUlucHV0VGVtcGxhdGUnO1xuaW1wb3J0IG1ha2VUcmFuc2FjdGlvbiBmcm9tICcuL21ha2VUcmFuc2FjdGlvbic7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBgQ1JFQVRFYCB0cmFuc2FjdGlvbiBob2xkaW5nIHRoZSBgYXNzZXRgLCBgbWV0YWRhdGFgLCBhbmQgYG91dHB1dHNgLCB0byBiZSBzaWduZWQgYnlcbiAqIHRoZSBgaXNzdWVyc2AuXG4gKiBAcGFyYW0ge29iamVjdH0gYXNzZXQgQ3JlYXRlZCBhc3NldCdzIGRhdGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhZGF0YSBNZXRhZGF0YSBmb3IgdGhlIFRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge29iamVjdFtdfSBvdXRwdXRzIEFycmF5IG9mIE91dHB1dCBvYmplY3RzIHRvIGFkZCB0byB0aGUgVHJhbnNhY3Rpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaW5rIG9mIHRoZXNlIGFzIHRoZSByZWNpcGllbnRzIG9mIHRoZSBhc3NldCBhZnRlciB0aGUgdHJhbnNhY3Rpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBgQ1JFQVRFYCBUcmFuc2FjdGlvbnMsIHRoaXMgc2hvdWxkIHVzdWFsbHkganVzdCBiZSBhIGxpc3Qgb2ZcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0cyB3cmFwcGluZyBFZDI1NTE5IENvbmRpdGlvbnMgZ2VuZXJhdGVkIGZyb20gdGhlIGlzc3VlcnMnIHB1YmxpY1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzIChzbyB0aGF0IHRoZSBpc3N1ZXJzIGFyZSB0aGUgcmVjaXBpZW50cyBvZiB0aGUgY3JlYXRlZCBhc3NldCkuXG4gKiBAcGFyYW0gey4uLnN0cmluZ1tdfSBpc3N1ZXJzIFB1YmxpYyBrZXkgb2Ygb25lIG9yIG1vcmUgaXNzdWVycyB0byB0aGUgYXNzZXQgYmVpbmcgY3JlYXRlZCBieSB0aGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiBFYWNoIG9mIHRoZSBwcml2YXRlIGtleXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcHVibGljXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgTVVTVCBiZSB1c2VkIGxhdGVyIChhbmQgaW4gdGhlIHNhbWUgb3JkZXIpIHdoZW4gc2lnbmluZyB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24gKGBzaWduVHJhbnNhY3Rpb24oKWApLlxuICogQHJldHVybnMge29iamVjdH0gVW5zaWduZWQgdHJhbnNhY3Rpb24gLS0gbWFrZSBzdXJlIHRvIGNhbGwgc2lnblRyYW5zYWN0aW9uKCkgb24gaXQgYmVmb3JlXG4gKiAgICAgICAgICAgICAgICAgICBzZW5kaW5nIGl0IG9mZiFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZUNyZWF0ZVRyYW5zYWN0aW9uKGFzc2V0LCBtZXRhZGF0YSwgb3V0cHV0cywgLi4uaXNzdWVycykge1xuICAgIGNvbnN0IGFzc2V0RGVmaW5pdGlvbiA9IHtcbiAgICAgICAgJ2RhdGEnOiBhc3NldCB8fCBudWxsLFxuICAgIH07XG4gICAgY29uc3QgaW5wdXRzID0gaXNzdWVycy5tYXAoKGlzc3VlcikgPT4gbWFrZUlucHV0VGVtcGxhdGUoW2lzc3Vlcl0pKTtcblxuICAgIHJldHVybiBtYWtlVHJhbnNhY3Rpb24oJ0NSRUFURScsIGFzc2V0RGVmaW5pdGlvbiwgbWV0YWRhdGEsIG91dHB1dHMsIGlucHV0cyk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL21ha2VDcmVhdGVUcmFuc2FjdGlvbi5qcyIsImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5cbmltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgY2MgZnJvbSAnZml2ZS1iZWxscy1jb25kaXRpb24nO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFZDI1NTE5IENyeXB0b2NvbmRpdGlvbiBmcm9tIGFuIEVkMjU1MTkgcHVibGljIGtleSB0byBwdXQgaW50byBhbiBPdXRwdXQgb2YgYSBUcmFuc2FjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHB1YmxpY0tleSBiYXNlNTggZW5jb2RlZCBFZDI1NTE5IHB1YmxpYyBrZXkgZm9yIHRoZSByZWNpcGllbnQgb2YgdGhlIFRyYW5zYWN0aW9uXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBFZDI1NTE5IENvbmRpdGlvbiAodGhhdCB3aWxsIG5lZWQgdG8gd3JhcHBlZCBpbiBhbiBPdXRwdXQpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VFZDI1NTE5Q29uZGl0aW9uKHB1YmxpY0tleSkge1xuICAgIGNvbnN0IHB1YmxpY0tleUJ1ZmZlciA9IG5ldyBCdWZmZXIoYmFzZTU4LmRlY29kZShwdWJsaWNLZXkpKTtcblxuICAgIGNvbnN0IGVkMjU1MTlGdWxmaWxsbWVudCA9IG5ldyBjYy5FZDI1NTE5KCk7XG4gICAgZWQyNTUxOUZ1bGZpbGxtZW50LnNldFB1YmxpY0tleShwdWJsaWNLZXlCdWZmZXIpO1xuICAgIGNvbnN0IGNvbmRpdGlvblVyaSA9IGVkMjU1MTlGdWxmaWxsbWVudC5nZXRDb25kaXRpb25VcmkoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgICdkZXRhaWxzJzoge1xuICAgICAgICAgICAgJ3NpZ25hdHVyZSc6IG51bGwsXG4gICAgICAgICAgICAndHlwZV9pZCc6IDQsXG4gICAgICAgICAgICAndHlwZSc6ICdmdWxmaWxsbWVudCcsXG4gICAgICAgICAgICAnYml0bWFzayc6IDMyLFxuICAgICAgICAgICAgJ3B1YmxpY19rZXknOiBwdWJsaWNLZXksXG4gICAgICAgIH0sXG4gICAgICAgICd1cmknOiBjb25kaXRpb25VcmksXG4gICAgfTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlRWQyNTUxOUNvbmRpdGlvbi5qcyIsIi8qKlxuICogQ3JlYXRlIGFuIE91dHB1dCBmcm9tIGEgQ29uZGl0aW9uLlxuICogTm90ZTogQXNzdW1lcyB0aGUgZ2l2ZW4gQ29uZGl0aW9uIHdhcyBnZW5lcmF0ZWQgZnJvbSBhIHNpbmdsZSBwdWJsaWMga2V5IChlLmcuIGEgRWQyNTUxOSBDb25kaXRpb24pXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZGl0aW9uIENvbmRpdGlvbiAoZS5nLiBhIEVkMjU1MTkgQ29uZGl0aW9uIGZyb20gYG1ha2VFZDI1NTE5Q29uZGl0aW9uKClgKVxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbW91bnQgb2YgdGhlIG91dHB1dFxuICogQHJldHVybnMge29iamVjdH0gQW4gT3V0cHV0IHVzYWJsZSBpbiBhIFRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VPdXRwdXQoY29uZGl0aW9uLCBhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBjb25kaXRpb24sXG4gICAgICAgICdwdWJsaWNfa2V5cyc6IFtjb25kaXRpb24uZGV0YWlscy5wdWJsaWNfa2V5XSxcbiAgICB9O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlT3V0cHV0LmpzIiwiaW1wb3J0IG1ha2VJbnB1dFRlbXBsYXRlIGZyb20gJy4vbWFrZUlucHV0VGVtcGxhdGUnO1xuaW1wb3J0IG1ha2VUcmFuc2FjdGlvbiBmcm9tICcuL21ha2VUcmFuc2FjdGlvbic7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBgVFJBTlNGRVJgIHRyYW5zYWN0aW9uIGhvbGRpbmcgdGhlIGBhc3NldGAsIGBtZXRhZGF0YWAsIGFuZCBgb3V0cHV0c2AsIHRoYXQgZnVsZmlsbHNcbiAqIHRoZSBgZnVsZmlsbGVkT3V0cHV0c2Agb2YgYHVuc3BlbnRUcmFuc2FjdGlvbmAuXG4gKiBAcGFyYW0ge29iamVjdH0gdW5zcGVudFRyYW5zYWN0aW9uIFByZXZpb3VzIFRyYW5zYWN0aW9uIHlvdSBoYXZlIGNvbnRyb2wgb3ZlciAoaS5lLiBjYW4gZnVsZmlsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdHMgT3V0cHV0IENvbmRpdGlvbilcbiAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhZGF0YSBNZXRhZGF0YSBmb3IgdGhlIFRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge29iamVjdFtdfSBvdXRwdXRzIEFycmF5IG9mIE91dHB1dCBvYmplY3RzIHRvIGFkZCB0byB0aGUgVHJhbnNhY3Rpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaW5rIG9mIHRoZXNlIGFzIHRoZSByZWNpcGllbnRzIG9mIHRoZSBhc3NldCBhZnRlciB0aGUgdHJhbnNhY3Rpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBgVFJBTlNGRVJgIFRyYW5zYWN0aW9ucywgdGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGEgbGlzdCBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRzIHdyYXBwaW5nIEVkMjU1MTkgQ29uZGl0aW9ucyBnZW5lcmF0ZWQgZnJvbSB0aGUgcHVibGljIGtleXMgb2ZcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwaWVudHMuXG4gKiBAcGFyYW0gey4uLm51bWJlcn0gZnVsZmlsbGVkT3V0cHV0cyBJbmRpY2VzIG9mIHRoZSBPdXRwdXRzIGluIGB1bnNwZW50VHJhbnNhY3Rpb25gIHRoYXQgdGhpc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24gZnVsZmlsbHMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlIHB1YmxpYyBrZXlzIGxpc3RlZCBpbiB0aGUgZnVsZmlsbGVkIE91dHB1dHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgdXNlZCAoYW5kIGluIHRoZSBzYW1lIG9yZGVyKSB0byBzaWduIHRoZSBUcmFuc2FjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGBzaWduVHJhbnNhY3Rpb24oKWApLlxuICogQHJldHVybnMge29iamVjdH0gVW5zaWduZWQgdHJhbnNhY3Rpb24gLS0gbWFrZSBzdXJlIHRvIGNhbGwgc2lnblRyYW5zYWN0aW9uKCkgb24gaXQgYmVmb3JlXG4gKiAgICAgICAgICAgICAgICAgICBzZW5kaW5nIGl0IG9mZiFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZVRyYW5zZmVyVHJhbnNhY3Rpb24odW5zcGVudFRyYW5zYWN0aW9uLCBtZXRhZGF0YSwgb3V0cHV0cywgLi4uZnVsZmlsbGVkT3V0cHV0cykge1xuICAgIGNvbnN0IGlucHV0cyA9IGZ1bGZpbGxlZE91dHB1dHMubWFwKChvdXRwdXRJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBmdWxmaWxsZWRPdXRwdXQgPSB1bnNwZW50VHJhbnNhY3Rpb24ub3V0cHV0c1tvdXRwdXRJbmRleF07XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uTGluayA9IHtcbiAgICAgICAgICAgICdvdXRwdXQnOiBvdXRwdXRJbmRleCxcbiAgICAgICAgICAgICd0eGlkJzogdW5zcGVudFRyYW5zYWN0aW9uLmlkLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBtYWtlSW5wdXRUZW1wbGF0ZShmdWxmaWxsZWRPdXRwdXQucHVibGljX2tleXMsIHRyYW5zYWN0aW9uTGluayk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhc3NldExpbmsgPSB7XG4gICAgICAgICdpZCc6IHVuc3BlbnRUcmFuc2FjdGlvbi5vcGVyYXRpb24gPT09ICdDUkVBVEUnID8gdW5zcGVudFRyYW5zYWN0aW9uLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5zcGVudFRyYW5zYWN0aW9uLmFzc2V0LmlkXG4gICAgfTtcblxuICAgIHJldHVybiBtYWtlVHJhbnNhY3Rpb24oJ1RSQU5TRkVSJywgYXNzZXRMaW5rLCBtZXRhZGF0YSwgb3V0cHV0cywgaW5wdXRzKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlVHJhbnNmZXJUcmFuc2FjdGlvbi5qcyIsImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IGNjIGZyb20gJ2ZpdmUtYmVsbHMtY29uZGl0aW9uJztcbmltcG9ydCBjbG9uZSBmcm9tICdjbG9uZSc7XG5cbmltcG9ydCBzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcgZnJvbSAnLi9zZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcnO1xuXG5cbi8qKlxuICogU2lnbiB0aGUgZ2l2ZW4gYHRyYW5zYWN0aW9uYCB3aXRoIHRoZSBnaXZlbiBgcHJpdmF0ZUtleWBzLCByZXR1cm5pbmcgYSBuZXcgY29weSBvZiBgdHJhbnNhY3Rpb25gXG4gKiB0aGF0J3MgYmVlbiBzaWduZWQuXG4gKiBOb3RlOiBPbmx5IGdlbmVyYXRlcyBFZDI1NTE5IEZ1bGZpbGxtZW50cy4gVGhyZXNob2xkcyBhbmQgb3RoZXIgdHlwZXMgb2YgRnVsZmlsbG1lbnRzIGFyZSBsZWZ0IGFzXG4gKiBhbiBleGVyY2lzZSBmb3IgdGhlIHVzZXIuXG4gKiBAcGFyYW0ge29iamVjdH0gdHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24gdG8gc2lnbi4gYHRyYW5zYWN0aW9uYCBpcyBub3QgbW9kaWZpZWQuXG4gKiBAcGFyYW0gey4uLnN0cmluZ30gcHJpdmF0ZUtleXMgUHJpdmF0ZSBrZXlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaXNzdWVycyBvZiB0aGUgYHRyYW5zYWN0aW9uYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29wZWQgdGhyb3VnaCB0byBpdGVyYXRpdmVseSBzaWduIGFueSBJbnB1dCBGdWxmaWxsbWVudHMgZm91bmQgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYHRyYW5zYWN0aW9uYC5cbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBzaWduZWQgdmVyc2lvbiBvZiBgdHJhbnNhY3Rpb25gLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaWduVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIC4uLnByaXZhdGVLZXlzKSB7XG4gICAgY29uc3Qgc2lnbmVkVHggPSBjbG9uZSh0cmFuc2FjdGlvbik7XG4gICAgc2lnbmVkVHguaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gcHJpdmF0ZUtleXNbaW5kZXhdO1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5QnVmZmVyID0gbmV3IEJ1ZmZlcihiYXNlNTguZGVjb2RlKHByaXZhdGVLZXkpKTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gc2VyaWFsaXplVHJhbnNhY3Rpb25JbnRvQ2Fub25pY2FsU3RyaW5nKHRyYW5zYWN0aW9uLCBpbnB1dCk7XG4gICAgICAgIGNvbnN0IGVkMjU1MTlGdWxmaWxsbWVudCA9IG5ldyBjYy5FZDI1NTE5KCk7XG4gICAgICAgIGVkMjU1MTlGdWxmaWxsbWVudC5zaWduKG5ldyBCdWZmZXIoc2VyaWFsaXplZFRyYW5zYWN0aW9uKSwgcHJpdmF0ZUtleUJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IGZ1bGZpbGxtZW50VXJpID0gZWQyNTUxOUZ1bGZpbGxtZW50LnNlcmlhbGl6ZVVyaSgpO1xuXG4gICAgICAgIGlucHV0LmZ1bGZpbGxtZW50ID0gZnVsZmlsbG1lbnRVcmk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2lnbmVkVHg7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uLmpzIiwiLy8gYmFzZS14IGVuY29kaW5nXG4vLyBGb3JrZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvY29pbmpzL2JzNThcbi8vIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBNaWtlIEhlYXJuIGZvciBCaXRjb2luSlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmNcbi8vIFBvcnRlZCB0byBKYXZhU2NyaXB0IGJ5IFN0ZWZhbiBUaG9tYXNcbi8vIE1lcmdlZCBCdWZmZXIgcmVmYWN0b3JpbmdzIGZyb20gYmFzZTU4LW5hdGl2ZSBieSBTdGVwaGVuIFBhaXJcbi8vIENvcHlyaWdodCAoYykgMjAxMyBCaXRQYXkgSW5jXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZSAoQUxQSEFCRVQpIHtcbiAgdmFyIEFMUEhBQkVUX01BUCA9IHt9XG4gIHZhciBCQVNFID0gQUxQSEFCRVQubGVuZ3RoXG4gIHZhciBMRUFERVIgPSBBTFBIQUJFVC5jaGFyQXQoMClcblxuICAvLyBwcmUtY29tcHV0ZSBsb29rdXAgdGFibGVcbiAgZm9yICh2YXIgeiA9IDA7IHogPCBBTFBIQUJFVC5sZW5ndGg7IHorKykge1xuICAgIHZhciB4ID0gQUxQSEFCRVQuY2hhckF0KHopXG5cbiAgICBpZiAoQUxQSEFCRVRfTUFQW3hdICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgYW1iaWd1b3VzJylcbiAgICBBTFBIQUJFVF9NQVBbeF0gPSB6XG4gIH1cblxuICBmdW5jdGlvbiBlbmNvZGUgKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSByZXR1cm4gJydcblxuICAgIHZhciBkaWdpdHMgPSBbMF1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGNhcnJ5ID0gc291cmNlW2ldOyBqIDwgZGlnaXRzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGNhcnJ5ICs9IGRpZ2l0c1tqXSA8PCA4XG4gICAgICAgIGRpZ2l0c1tqXSA9IGNhcnJ5ICUgQkFTRVxuICAgICAgICBjYXJyeSA9IChjYXJyeSAvIEJBU0UpIHwgMFxuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2FycnkgPiAwKSB7XG4gICAgICAgIGRpZ2l0cy5wdXNoKGNhcnJ5ICUgQkFTRSlcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyBCQVNFKSB8IDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gJydcblxuICAgIC8vIGRlYWwgd2l0aCBsZWFkaW5nIHplcm9zXG4gICAgZm9yICh2YXIgayA9IDA7IHNvdXJjZVtrXSA9PT0gMCAmJiBrIDwgc291cmNlLmxlbmd0aCAtIDE7ICsraykgc3RyaW5nICs9IEFMUEhBQkVUWzBdXG4gICAgLy8gY29udmVydCBkaWdpdHMgdG8gYSBzdHJpbmdcbiAgICBmb3IgKHZhciBxID0gZGlnaXRzLmxlbmd0aCAtIDE7IHEgPj0gMDsgLS1xKSBzdHJpbmcgKz0gQUxQSEFCRVRbZGlnaXRzW3FdXVxuXG4gICAgcmV0dXJuIHN0cmluZ1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlVW5zYWZlIChzdHJpbmcpIHtcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBCdWZmZXIoMClcblxuICAgIHZhciBieXRlcyA9IFswXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBBTFBIQUJFVF9NQVBbc3RyaW5nW2ldXVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVyblxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgY2FycnkgPSB2YWx1ZTsgaiA8IGJ5dGVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGNhcnJ5ICs9IGJ5dGVzW2pdICogQkFTRVxuICAgICAgICBieXRlc1tqXSA9IGNhcnJ5ICYgMHhmZlxuICAgICAgICBjYXJyeSA+Pj0gOFxuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2FycnkgPiAwKSB7XG4gICAgICAgIGJ5dGVzLnB1c2goY2FycnkgJiAweGZmKVxuICAgICAgICBjYXJyeSA+Pj0gOFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlYWwgd2l0aCBsZWFkaW5nIHplcm9zXG4gICAgZm9yICh2YXIgayA9IDA7IHN0cmluZ1trXSA9PT0gTEVBREVSICYmIGsgPCBzdHJpbmcubGVuZ3RoIC0gMTsgKytrKSB7XG4gICAgICBieXRlcy5wdXNoKDApXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYnl0ZXMucmV2ZXJzZSgpKVxuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlIChzdHJpbmcpIHtcbiAgICB2YXIgYnVmZmVyID0gZGVjb2RlVW5zYWZlKHN0cmluZylcbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gYnVmZmVyXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1iYXNlJyArIEJBU0UgKyAnIGNoYXJhY3RlcicpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGRlY29kZVVuc2FmZTogZGVjb2RlVW5zYWZlLFxuICAgIGRlY29kZTogZGVjb2RlXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYXNlLXgvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDQ3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIHBsYWNlSG9sZGVyc0NvdW50IChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIHRoZSBudW1iZXIgb2YgZXF1YWwgc2lnbnMgKHBsYWNlIGhvbGRlcnMpXG4gIC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcbiAgLy8gcmVwcmVzZW50IG9uZSBieXRlXG4gIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHRoZSB0aHJlZSBjaGFyYWN0ZXJzIGJlZm9yZSBpdCByZXByZXNlbnQgMiBieXRlc1xuICAvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG4gIHJldHVybiBiNjRbbGVuIC0gMl0gPT09ICc9JyA/IDIgOiBiNjRbbGVuIC0gMV0gPT09ICc9JyA/IDEgOiAwXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICAvLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbiAgcmV0dXJuIGI2NC5sZW5ndGggKiAzIC8gNCAtIHBsYWNlSG9sZGVyc0NvdW50KGI2NClcbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBwbGFjZUhvbGRlcnMgPSBwbGFjZUhvbGRlcnNDb3VudChiNjQpXG5cbiAgYXJyID0gbmV3IEFycihsZW4gKiAzIC8gNCAtIHBsYWNlSG9sZGVycylcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gbGVuIC0gNCA6IGxlblxuXG4gIHZhciBMID0gMFxuXG4gIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnMgPT09IDIpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9IGVsc2UgaWYgKHBsYWNlSG9sZGVycyA9PT0gMSkge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICsgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9ICh1aW50OFtpXSA8PCAxNikgKyAodWludDhbaSArIDFdIDw8IDgpICsgKHVpbnQ4W2kgKyAyXSlcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIG91dHB1dCA9ICcnXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBvdXRwdXQgKz0gbG9va3VwW3RtcCA+PiAyXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9ICc9PSdcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgKHVpbnQ4W2xlbiAtIDFdKVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDEwXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz0nXG4gIH1cblxuICBwYXJ0cy5wdXNoKG91dHB1dClcblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYXNlNjQtanMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDQ4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5pbmNsdWRlcztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2luY2x1ZGVzLmpzXG4vLyBtb2R1bGUgaWQgPSA0OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDUwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qc1xuLy8gbW9kdWxlIGlkID0gNTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoIWlzT2JqZWN0KGl0KSl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDUyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanNcbi8vIG1vZHVsZSBpZCA9IDUzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIHRoYXQsIGxlbmd0aCl7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmKHRoYXQgPT09IHVuZGVmaW5lZClyZXR1cm4gZm47XG4gIHN3aXRjaChsZW5ndGgpe1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKGEpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbihhLCBiKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24oYSwgYiwgYyl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbigvKiAuLi5hcmdzICovKXtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanNcbi8vIG1vZHVsZSBpZCA9IDU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanNcbi8vIG1vZHVsZSBpZCA9IDU1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudFxuICAvLyBpbiBvbGQgSUUgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCdcbiAgLCBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gNTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanNcbi8vIG1vZHVsZSBpZCA9IDU4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanNcbi8vIG1vZHVsZSBpZCA9IDU5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gNjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSA2MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBkUCAgICAgICAgICAgICA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpe1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgaWYoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKXRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmKCd2YWx1ZScgaW4gQXR0cmlidXRlcylPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzXG4vLyBtb2R1bGUgaWQgPSA2MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaGFzICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b0lPYmplY3QgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKVxuICAsIElFX1BST1RPICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIG5hbWVzKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwga2V5O1xuICBmb3Ioa2V5IGluIE8paWYoa2V5ICE9IElFX1BST1RPKWhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZihoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpe1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qc1xuLy8gbW9kdWxlIGlkID0gNjNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gNjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzXG4vLyBtb2R1bGUgaWQgPSA2NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZ2V0S2V5cyAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIGlzRW51bSAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc0VudHJpZXMpe1xuICByZXR1cm4gZnVuY3Rpb24oaXQpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoaXQpXG4gICAgICAsIGtleXMgICA9IGdldEtleXMoTylcbiAgICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAgICwgaSAgICAgID0gMFxuICAgICAgLCByZXN1bHQgPSBbXVxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUobGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChPLCBrZXkgPSBrZXlzW2krK10pKXtcbiAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDY2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYml0bWFwLCB2YWx1ZSl7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZSAgOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZSAgICA6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWUgICAgICAgOiB2YWx1ZVxuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanNcbi8vIG1vZHVsZSBpZCA9IDY3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpXG4gICwgdWlkICAgID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qc1xuLy8gbW9kdWxlIGlkID0gNjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcbiAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qc1xuLy8gbW9kdWxlIGlkID0gNjlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIG1heCAgICAgICA9IE1hdGgubWF4XG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGluZGV4LCBsZW5ndGgpe1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWluZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA3MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qc1xuLy8gbW9kdWxlIGlkID0gNzFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgUyl7XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZih0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanNcbi8vIG1vZHVsZSBpZCA9IDcyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpZCA9IDBcbiAgLCBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzXG4vLyBtb2R1bGUgaWQgPSA3M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiwgZnJvbUluZGV4ID0gMCAqLyl7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gNzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KXtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzXG4vLyBtb2R1bGUgaWQgPSA3NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIsIHNlcCkge1xuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuXHR9XG5cblx0c2VwID0gdHlwZW9mIHNlcCA9PT0gJ3VuZGVmaW5lZCcgPyAnXycgOiBzZXA7XG5cblx0cmV0dXJuIHN0clxuXHRcdC5yZXBsYWNlKC8oW2EtelxcZF0pKFtBLVpdKS9nLCAnJDEnICsgc2VwICsgJyQyJylcblx0XHQucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16XFxkXSspL2csICckMScgKyBzZXAgKyAnJDInKVxuXHRcdC50b0xvd2VyQ2FzZSgpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9kZWNhbWVsaXplL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA3NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy5cbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpXG4gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDQuMS4wXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cbnZhciBfaXNBcnJheSA9IHVuZGVmaW5lZDtcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn0gZWxzZSB7XG4gIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdW5kZWZpbmVkO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdW5kZWZpbmVkO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICh7fSkudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xuXG4vLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxudmFyIGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJztcblxuLy8gbm9kZVxuZnVuY3Rpb24gdXNlTmV4dFRpY2soKSB7XG4gIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1am9qcy93aGVuL2lzc3Vlcy80MTAgZm9yIGRldGFpbHNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gIH07XG59XG5cbi8vIHZlcnR4XG5mdW5jdGlvbiB1c2VWZXJ0eFRpbWVyKCkge1xuICBpZiAodHlwZW9mIHZlcnR4TmV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmVydHhOZXh0KGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBub2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMjtcbiAgfTtcbn1cblxuLy8gd2ViIHdvcmtlclxuZnVuY3Rpb24gdXNlTWVzc2FnZUNoYW5uZWwoKSB7XG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVNldFRpbWVvdXQoKSB7XG4gIC8vIFN0b3JlIHNldFRpbWVvdXQgcmVmZXJlbmNlIHNvIGVzNi1wcm9taXNlIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuICAvLyBvdGhlciBjb2RlIG1vZGlmeWluZyBzZXRUaW1lb3V0IChsaWtlIHNpbm9uLnVzZUZha2VUaW1lcnMoKSlcbiAgdmFyIGdsb2JhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnbG9iYWxTZXRUaW1lb3V0KGZsdXNoLCAxKTtcbiAgfTtcbn1cblxudmFyIHF1ZXVlID0gbmV3IEFycmF5KDEwMDApO1xuZnVuY3Rpb24gZmx1c2goKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcbiAgICB2YXIgYXJnID0gcXVldWVbaSArIDFdO1xuXG4gICAgY2FsbGJhY2soYXJnKTtcblxuICAgIHF1ZXVlW2ldID0gdW5kZWZpbmVkO1xuICAgIHF1ZXVlW2kgKyAxXSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRWZXJ0eCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgciA9IHJlcXVpcmU7XG4gICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdW5kZWZpbmVkO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50cztcblxuICB2YXIgcGFyZW50ID0gdGhpcztcblxuICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoY2hpbGRbUFJPTUlTRV9JRF0gPT09IHVuZGVmaW5lZCkge1xuICAgIG1ha2VQcm9taXNlKGNoaWxkKTtcbiAgfVxuXG4gIHZhciBfc3RhdGUgPSBwYXJlbnQuX3N0YXRlO1xuXG4gIGlmIChfc3RhdGUpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNhbGxiYWNrID0gX2FyZ3VtZW50c1tfc3RhdGUgLSAxXTtcbiAgICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soX3N0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHBhcmVudC5fcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUob2JqZWN0KSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVzb2x2ZShwcm9taXNlLCBvYmplY3QpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIFBST01JU0VfSUQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbnZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiBzZWxmRnVsZmlsbG1lbnQoKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbn1cblxuZnVuY3Rpb24gY2Fubm90UmV0dXJuT3duKCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xufVxuXG5mdW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgcmV0dXJuIEdFVF9USEVOX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJCkge1xuICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3RvciAmJiB0aGVuJCQgPT09IHRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSByZXNvbHZlKSB7XG4gICAgaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoZW4kJCA9PT0gR0VUX1RIRU5fRVJST1IpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpO1xuICAgICAgR0VUX1RIRU5fRVJST1IuZXJyb3IgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAodGhlbiQkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJCkpIHtcbiAgICAgIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIGdldFRoZW4odmFsdWUpKTtcbiAgfSBlbHNlIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHtcbiAgaWYgKHByb21pc2UuX29uZXJyb3IpIHtcbiAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gIH1cblxuICBwdWJsaXNoKHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlO1xuICBwcm9taXNlLl9zdGF0ZSA9IEZVTEZJTExFRDtcblxuICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwcm9taXNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB1bmRlZmluZWQsXG4gICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIEVycm9yT2JqZWN0KCkge1xuICB0aGlzLmVycm9yID0gbnVsbDtcbn1cblxudmFyIFRSWV9DQVRDSF9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgIHJldHVybiBUUllfQ0FUQ0hfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkLFxuICAgICAgZXJyb3IgPSB1bmRlZmluZWQsXG4gICAgICBzdWNjZWVkZWQgPSB1bmRlZmluZWQsXG4gICAgICBmYWlsZWQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgdmFsdWUgPSB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gVFJZX0NBVENIX0VSUk9SKSB7XG4gICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjtcbiAgICAgIHZhbHVlLmVycm9yID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgLy8gbm9vcFxuICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IEZVTEZJTExFRCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikge1xuICB0cnkge1xuICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKSB7XG4gICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIF9yZWplY3QocHJvbWlzZSwgZSk7XG4gIH1cbn1cblxudmFyIGlkID0gMDtcbmZ1bmN0aW9uIG5leHRJZCgpIHtcbiAgcmV0dXJuIGlkKys7XG59XG5cbmZ1bmN0aW9uIG1ha2VQcm9taXNlKHByb21pc2UpIHtcbiAgcHJvbWlzZVtQUk9NSVNFX0lEXSA9IGlkKys7XG4gIHByb21pc2UuX3N0YXRlID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9yZXN1bHQgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3N1YnNjcmliZXJzID0gW107XG59XG5cbmZ1bmN0aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gIHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmICghdGhpcy5wcm9taXNlW1BST01JU0VfSURdKSB7XG4gICAgbWFrZVByb21pc2UodGhpcy5wcm9taXNlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgdGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICAgIHRoaXMuX2VudW1lcmF0ZSgpO1xuICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgX3JlamVjdCh0aGlzLnByb21pc2UsIHZhbGlkYXRpb25FcnJvcigpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB2YXIgX2lucHV0ID0gdGhpcy5faW5wdXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRoaXMuX2VhY2hFbnRyeShfaW5wdXRbaV0sIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcbiAgdmFyIHJlc29sdmUkJCA9IGMucmVzb2x2ZTtcblxuICBpZiAocmVzb2x2ZSQkID09PSByZXNvbHZlKSB7XG4gICAgdmFyIF90aGVuID0gZ2V0VGhlbihlbnRyeSk7XG5cbiAgICBpZiAoX3RoZW4gPT09IHRoZW4gJiYgZW50cnkuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcmVtYWluaW5nLS07XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UpIHtcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIGVudHJ5LCBfdGhlbik7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlJCQoZW50cnkpO1xuICAgICAgfSksIGkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkKGVudHJ5KSwgaSk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORykge1xuICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuXG4gICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgaSkge1xuICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gIGBQcm9taXNlLmFsbGAgYWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaFxuICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yXG4gIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbFxuICBlbGVtZW50cyBvZiB0aGUgcGFzc2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlc29sdmUoMik7XG4gIGxldCBwcm9taXNlMyA9IHJlc29sdmUoMyk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBUaGUgYXJyYXkgaGVyZSB3b3VsZCBiZSBbIDEsIDIsIDMgXTtcbiAgfSk7XG4gIGBgYFxuXG4gIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgYWxsYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlXG4gIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZXMnc1xuICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6XG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlamVjdChuZXcgRXJyb3IoXCIyXCIpKTtcbiAgbGV0IHByb21pc2UzID0gcmVqZWN0KG5ldyBFcnJvcihcIjNcIikpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhXG4gIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgLy8gZXJyb3IubWVzc2FnZSA9PT0gXCIyXCJcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgYWxsXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlc1xuICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIGBwcm9taXNlc2AgaGF2ZSBiZWVuXG4gIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLlxuICBAc3RhdGljXG4qL1xuZnVuY3Rpb24gYWxsKGVudHJpZXMpIHtcbiAgcmV0dXJuIG5ldyBFbnVtZXJhdG9yKHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yYWNlYCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlXG4gIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIHNldHRsZS5cblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMicpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIHJlc3VsdCA9PT0gJ3Byb21pc2UgMicgYmVjYXVzZSBpdCB3YXMgcmVzb2x2ZWQgYmVmb3JlIHByb21pc2UxXG4gICAgLy8gd2FzIHJlc29sdmVkLlxuICB9KTtcbiAgYGBgXG5cbiAgYFByb21pc2UucmFjZWAgaXMgZGV0ZXJtaW5pc3RpYyBpbiB0aGF0IG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBmaXJzdFxuICBzZXR0bGVkIHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3RoZXIgcHJvbWlzZXMgZ2l2ZW4gdG8gdGhlXG4gIGBwcm9taXNlc2AgYXJyYXkgYXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRsZWQgcHJvbWlzZSBoYXNcbiAgYmVjb21lIHJlamVjdGVkIGJlZm9yZSB0aGUgb3RoZXIgcHJvbWlzZXMgYmVjYW1lIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkXG4gIHByb21pc2Ugd2lsbCBiZWNvbWUgcmVqZWN0ZWQ6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuXG4gIGxldCBwcm9taXNlMiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSAyJykpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgcHJvbWlzZSAyIGJlY2FtZSByZWplY3RlZCBiZWZvcmVcbiAgICAvLyBwcm9taXNlIDEgYmVjYW1lIGZ1bGZpbGxlZFxuICB9KTtcbiAgYGBgXG5cbiAgQW4gZXhhbXBsZSByZWFsLXdvcmxkIHVzZSBjYXNlIGlzIGltcGxlbWVudGluZyB0aW1lb3V0czpcblxuICBgYGBqYXZhc2NyaXB0XG4gIFByb21pc2UucmFjZShbYWpheCgnZm9vLmpzb24nKSwgdGltZW91dCg1MDAwKV0pXG4gIGBgYFxuXG4gIEBtZXRob2QgcmFjZVxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzIGFycmF5IG9mIHByb21pc2VzIHRvIG9ic2VydmVcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2Ugd2hpY2ggc2V0dGxlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0IHBhc3NlZFxuICBwcm9taXNlIHRvIHNldHRsZS5cbiovXG5mdW5jdGlvbiByYWNlKGVudHJpZXMpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAoIWlzQXJyYXkoZW50cmllcykpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChfLCByZWplY3QpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVzW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlamVjdGAgcmV0dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLlxuICBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZWplY3RcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gcmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoLlxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBnaXZlbiBgcmVhc29uYC5cbiovXG5mdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBuZWVkc1Jlc29sdmVyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzTmV3KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xufVxuXG4vKipcbiAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgVGVybWlub2xvZ3lcbiAgLS0tLS0tLS0tLS1cblxuICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICBCYXNpYyBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tXG5cbiAgYGBganNcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBvbiBzdWNjZXNzXG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAvLyBvbiBmYWlsdXJlXG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgQWR2YW5jZWQgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLS0tLVxuXG4gIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgYGBganNcbiAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gIGBgYGpzXG4gIFByb21pc2UuYWxsKFtcbiAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuICBgYGBcblxuICBAY2xhc3MgUHJvbWlzZVxuICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlclxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFByb21pc2UocmVzb2x2ZXIpIHtcbiAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICB0aGlzLl9yZXN1bHQgPSB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICB0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicgJiYgbmVlZHNSZXNvbHZlcigpO1xuICAgIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlID8gaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpIDogbmVlZHNOZXcoKTtcbiAgfVxufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcblByb21pc2UucmFjZSA9IHJhY2U7XG5Qcm9taXNlLnJlc29sdmUgPSByZXNvbHZlO1xuUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7XG5Qcm9taXNlLl9zZXRTY2hlZHVsZXIgPSBzZXRTY2hlZHVsZXI7XG5Qcm9taXNlLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UuX2FzYXAgPSBhc2FwO1xuXG5Qcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFByb21pc2UsXG5cbiAgLyoqXG4gICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGVcbiAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQ2hhaW5pbmdcbiAgICAtLS0tLS0tLVxuICBcbiAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnRcbiAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiB1c2VyLm5hbWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICB9KTtcbiAgXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgfSk7XG4gICAgYGBgXG4gICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFzc2ltaWxhdGlvblxuICAgIC0tLS0tLS0tLS0tLVxuICBcbiAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUgcGVuZGluZ1xuICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBTaW1wbGUgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCByZXN1bHQ7XG4gIFxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCBhdXRob3IsIGJvb2tzO1xuICBcbiAgICB0cnkge1xuICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgLy8gZmFpbHVyZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgRXJyYmFjayBFeGFtcGxlXG4gIFxuICAgIGBgYGpzXG4gIFxuICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcbiAgXG4gICAgfVxuICBcbiAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuICBcbiAgICB9XG4gIFxuICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpO1xuICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgUHJvbWlzZSBFeGFtcGxlO1xuICBcbiAgICBgYGBqYXZhc2NyaXB0XG4gICAgZmluZEF1dGhvcigpLlxuICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXtcbiAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCB0aGVuXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWRcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gIHRoZW46IHRoZW4sXG5cbiAgLyoqXG4gICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgIGFzIHRoZSBjYXRjaCBibG9jayBvZiBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQuXG4gIFxuICAgIGBgYGpzXG4gICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgfVxuICBcbiAgICAvLyBzeW5jaHJvbm91c1xuICAgIHRyeSB7XG4gICAgICBmaW5kQXV0aG9yKCk7XG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICBcbiAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGNhdGNoXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cbiAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGlvbik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICAgIHZhciBsb2NhbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IGdsb2JhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgIGlmIChQKSB7XG4gICAgICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gc2lsZW50bHkgaWdub3JlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvY2FsLlByb21pc2UgPSBQcm9taXNlO1xufVxuXG4vLyBTdHJhbmdlIGNvbXBhdC4uXG5Qcm9taXNlLnBvbHlmaWxsID0gcG9seWZpbGw7XG5Qcm9taXNlLlByb21pc2UgPSBQcm9taXNlO1xuXG5yZXR1cm4gUHJvbWlzZTtcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzNi1wcm9taXNlLm1hcFxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IDc3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbiAoc2VsZikge1xuICAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gZmV0Y2hQb255ZmlsbChvcHRpb25zKSB7XG4gICAgdmFyIFByb21pc2UgPSBvcHRpb25zICYmIG9wdGlvbnMuUHJvbWlzZSB8fCBzZWxmLlByb21pc2U7XG4gICAgdmFyIFhNTEh0dHBSZXF1ZXN0ID0gb3B0aW9ucyAmJiBvcHRpb25zLlhNTEh0dHBSZXF1ZXN0IHx8IHNlbGYuWE1MSHR0cFJlcXVlc3Q7XG4gICAgdmFyIGdsb2JhbCA9IHNlbGY7XG5cbiAgICByZXR1cm4gKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWxmID0gT2JqZWN0LmNyZWF0ZShnbG9iYWwsIHtcbiAgICAgICAgZmV0Y2g6IHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAoZnVuY3Rpb24oc2VsZikge1xuICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgaWYgKHNlbGYuZmV0Y2gpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdXBwb3J0ID0ge1xuICAgICAgICAgIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gc2VsZixcbiAgICAgICAgICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gc2VsZiAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgICAgICAgICBibG9iOiAnRmlsZVJlYWRlcicgaW4gc2VsZiAmJiAnQmxvYicgaW4gc2VsZiAmJiAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkoKSxcbiAgICAgICAgICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgICAgICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIHNlbGZcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICAgICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICAgICAgICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgICAgICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gICAgICAgICAgXVxuXG4gICAgICAgICAgdmFyIGlzRGF0YVZpZXcgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9IEFycmF5QnVmZmVyLmlzVmlldyB8fCBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZScpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgICAgICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICAgICAgICB0aGlzLm1hcCA9IHt9XG5cbiAgICAgICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIH0sIHRoaXMpXG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgICAgICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICAgICAgICAgIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSsnLCcrdmFsdWUgOiB2YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGl0ZW1zID0gW11cbiAgICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChuYW1lKSB9KVxuICAgICAgICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgICAgICAgfVxuXG4gICAgICAgIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpdGVtcyA9IFtdXG4gICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7IGl0ZW1zLnB1c2godmFsdWUpIH0pXG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpdGVtcyA9IFtdXG4gICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7IGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSkgfSlcbiAgICAgICAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgICAgICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYm9keS5ib2R5VXNlZCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gICAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgICAgICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICAgICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gICAgICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gICAgICAgICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgICAgICAgICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICAgICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gQm9keSgpIHtcbiAgICAgICAgICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICAgICAgICAgIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgICAgICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgICAgICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAgICAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVkKHRoaXMpIHx8IFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG4gICAgICAgIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbiAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICAgICAgICAgIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICByZXR1cm4gKG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xKSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICAgICAgICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgICAgICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgICAgICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgICAgICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ29taXQnXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICAgICAgICAgIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICAgICAgICAgIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgICAgICAgICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRCb2R5KGJvZHkpXG4gICAgICAgIH1cblxuICAgICAgICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7IGJvZHk6IHRoaXMuX2JvZHlJbml0IH0pXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICAgICAgICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgICBib2R5LnRyaW0oKS5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGZvcm1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgICAgICAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gICAgICAgICAgcmF3SGVhZGVycy5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICAgICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGhlYWRlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIEJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuICAgICAgICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICAgICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSAnc3RhdHVzJyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXMgOiAyMDBcbiAgICAgICAgICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gICAgICAgICAgdGhpcy5zdGF0dXNUZXh0ID0gJ3N0YXR1c1RleHQnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAnT0snXG4gICAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICAgICAgICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgICAgICAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbiAgICAgICAgfVxuXG4gICAgICAgIEJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cbiAgICAgICAgUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgICAgICAgICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbiAgICAgICAgUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICAgICAgICAgIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuSGVhZGVycyA9IEhlYWRlcnNcbiAgICAgICAgc2VsZi5SZXF1ZXN0ID0gUmVxdWVzdFxuICAgICAgICBzZWxmLlJlc3BvbnNlID0gUmVzcG9uc2VcblxuICAgICAgICBzZWxmLmZldGNoID0gZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgICAgICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC51cmwsIHRydWUpXG5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhociAmJiBzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuICAgICAgfSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMpO1xuXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZldGNoOiBzZWxmLmZldGNoLFxuICAgICAgICBIZWFkZXJzOiBzZWxmLkhlYWRlcnMsXG4gICAgICAgIFJlcXVlc3Q6IHNlbGYuUmVxdWVzdCxcbiAgICAgICAgUmVzcG9uc2U6IHNlbGYuUmVzcG9uc2VcbiAgICAgIH07XG4gICAgfSgpKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZldGNoUG9ueWZpbGw7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmZXRjaFBvbnlmaWxsO1xuICB9IGVsc2Uge1xuICAgIHNlbGYuZmV0Y2hQb255ZmlsbCA9IGZldGNoUG9ueWZpbGw7XG4gIH1cbn0odHlwZW9mIHNlbGYgPT09ICd1bmRlZmluZWQnID8gdGhpcyA6IHNlbGYpKTtcblxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2ZldGNoLXBvbnlmaWxsL2J1aWxkL2ZldGNoLWJyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDc4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2llZWU3NTQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDc5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2lzYXJyYXkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDgwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBqc29uID0gdHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnID8gSlNPTiA6IHJlcXVpcmUoJ2pzb25pZnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSBvcHRzID0geyBjbXA6IG9wdHMgfTtcbiAgICB2YXIgc3BhY2UgPSBvcHRzLnNwYWNlIHx8ICcnO1xuICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSBzcGFjZSA9IEFycmF5KHNwYWNlKzEpLmpvaW4oJyAnKTtcbiAgICB2YXIgY3ljbGVzID0gKHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gJ2Jvb2xlYW4nKSA/IG9wdHMuY3ljbGVzIDogZmFsc2U7XG4gICAgdmFyIHJlcGxhY2VyID0gb3B0cy5yZXBsYWNlciB8fCBmdW5jdGlvbihrZXksIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuICAgIHZhciBjbXAgPSBvcHRzLmNtcCAmJiAoZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYW9iaiA9IHsga2V5OiBhLCB2YWx1ZTogbm9kZVthXSB9O1xuICAgICAgICAgICAgICAgIHZhciBib2JqID0geyBrZXk6IGIsIHZhbHVlOiBub2RlW2JdIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGYoYW9iaiwgYm9iaik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH0pKG9wdHMuY21wKTtcblxuICAgIHZhciBzZWVuID0gW107XG4gICAgcmV0dXJuIChmdW5jdGlvbiBzdHJpbmdpZnkgKHBhcmVudCwga2V5LCBub2RlLCBsZXZlbCkge1xuICAgICAgICB2YXIgaW5kZW50ID0gc3BhY2UgPyAoJ1xcbicgKyBuZXcgQXJyYXkobGV2ZWwgKyAxKS5qb2luKHNwYWNlKSkgOiAnJztcbiAgICAgICAgdmFyIGNvbG9uU2VwYXJhdG9yID0gc3BhY2UgPyAnOiAnIDogJzonO1xuXG4gICAgICAgIGlmIChub2RlICYmIG5vZGUudG9KU09OICYmIHR5cGVvZiBub2RlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUudG9KU09OKCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gcmVwbGFjZXIuY2FsbChwYXJlbnQsIGtleSwgbm9kZSk7XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcgfHwgbm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGpzb24uc3RyaW5naWZ5KG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5KG5vZGUpKSB7XG4gICAgICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHN0cmluZ2lmeShub2RlLCBpLCBub2RlW2ldLCBsZXZlbCsxKSB8fCBqc29uLnN0cmluZ2lmeShudWxsKTtcbiAgICAgICAgICAgICAgICBvdXQucHVzaChpbmRlbnQgKyBzcGFjZSArIGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdbJyArIG91dC5qb2luKCcsJykgKyBpbmRlbnQgKyAnXSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5pbmRleE9mKG5vZGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChjeWNsZXMpIHJldHVybiBqc29uLnN0cmluZ2lmeSgnX19jeWNsZV9fJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBzZWVuLnB1c2gobm9kZSk7XG5cbiAgICAgICAgICAgIHZhciBrZXlzID0gb2JqZWN0S2V5cyhub2RlKS5zb3J0KGNtcCAmJiBjbXAobm9kZSkpO1xuICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RyaW5naWZ5KG5vZGUsIGtleSwgbm9kZVtrZXldLCBsZXZlbCsxKTtcblxuICAgICAgICAgICAgICAgIGlmKCF2YWx1ZSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICB2YXIga2V5VmFsdWUgPSBqc29uLnN0cmluZ2lmeShrZXkpXG4gICAgICAgICAgICAgICAgICAgICsgY29sb25TZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgb3V0LnB1c2goaW5kZW50ICsgc3BhY2UgKyBrZXlWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWVuLnNwbGljZShzZWVuLmluZGV4T2Yobm9kZSksIDEpO1xuICAgICAgICAgICAgcmV0dXJuICd7JyArIG91dC5qb2luKCcsJykgKyBpbmRlbnQgKyAnfSc7XG4gICAgICAgIH1cbiAgICB9KSh7ICcnOiBvYmogfSwgJycsIG9iaiwgMCk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4ge30udG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWUgfTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDgxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2xpYi9wYXJzZScpO1xuZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2xpYi9zdHJpbmdpZnknKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9qc29uaWZ5L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICAgJ1wiJzogICdcIicsXG4gICAgICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICAgICAnLyc6ICAnLycsXG4gICAgICAgIGI6ICAgICdcXGInLFxuICAgICAgICBmOiAgICAnXFxmJyxcbiAgICAgICAgbjogICAgJ1xcbicsXG4gICAgICAgIHI6ICAgICdcXHInLFxuICAgICAgICB0OiAgICAnXFx0J1xuICAgIH0sXG4gICAgdGV4dCxcblxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogICAgJ1N5bnRheEVycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG0sXG4gICAgICAgICAgICBhdDogICAgICBhdCxcbiAgICAgICAgICAgIHRleHQ6ICAgIHRleHRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgICBcbiAgICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICAgIGF0ICs9IDE7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9LFxuICAgIFxuICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG4gICAgICAgIHZhciBudW1iZXIsXG4gICAgICAgICAgICBzdHJpbmcgPSAnJztcbiAgICAgICAgXG4gICAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgICAgICBuZXh0KCctJyk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBudW1iZXIgPSArc3RyaW5nO1xuICAgICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgICAgIGVycm9yKFwiQmFkIG51bWJlclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFxuICAgIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG4gICAgICAgIHZhciBoZXgsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgICAgICB1ZmZmZjtcbiAgICAgICAgXG4gICAgICAgIC8vIFdoZW4gcGFyc2luZyBmb3Igc3RyaW5nIHZhbHVlcywgd2UgbXVzdCBsb29rIGZvciBcIiBhbmQgXFwgY2hhcmFjdGVycy5cbiAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd1Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodWZmZmYpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBlc2NhcGVlW2NoXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBzdHJpbmdcIik7XG4gICAgfSxcblxuICAgIHdoaXRlID0gZnVuY3Rpb24gKCkge1xuXG4vLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICBuZXh0KCd0Jyk7XG4gICAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgICBuZXh0KCdhJyk7XG4gICAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG5cbiAgICB2YWx1ZSwgIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuXG4gICAgYXJyYXkgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OyAgIC8vIGVtcHR5IGFycmF5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiQmFkIGFycmF5XCIpO1xuICAgIH0sXG5cbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgb2JqZWN0ID0ge307XG5cbiAgICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OyAgIC8vIGVtcHR5IG9iamVjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBvYmplY3RcIik7XG4gICAgfTtcblxudmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGEgSlNPTiB2YWx1ZS4gSXQgY291bGQgYmUgYW4gb2JqZWN0LCBhbiBhcnJheSwgYSBzdHJpbmcsIGEgbnVtYmVyLFxuLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgY2FzZSAneyc6XG4gICAgICAgIHJldHVybiBvYmplY3QoKTtcbiAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgY2FzZSAnLSc6XG4gICAgICAgIHJldHVybiBudW1iZXIoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiB0aGUganNvbl9wYXJzZSBmdW5jdGlvbi4gSXQgd2lsbCBoYXZlIGFjY2VzcyB0byBhbGwgb2YgdGhlIGFib3ZlXG4vLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBcbiAgICB0ZXh0ID0gc291cmNlO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICAgIGVycm9yKFwiU3ludGF4IGVycm9yXCIpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmV2aXZlciBmdW5jdGlvbiwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSxcbiAgICAvLyBwYXNzaW5nIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZVxuICAgIC8vIHRyYW5zZm9ybWF0aW9uLCBzdGFydGluZyB3aXRoIGEgdGVtcG9yYXJ5IHJvb3Qgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdFxuICAgIC8vIGluIGFuIGVtcHR5IGtleS4gSWYgdGhlcmUgaXMgbm90IGEgcmV2aXZlciBmdW5jdGlvbiwgd2Ugc2ltcGx5IHJldHVybiB0aGVcbiAgICAvLyByZXN1bHQuXG5cbiAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICB2YXIgaywgdiwgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICB9KHsnJzogcmVzdWx0fSwgJycpKSA6IHJlc3VsdDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vanNvbmlmeS9saWIvcGFyc2UuanNcbi8vIG1vZHVsZSBpZCA9IDgzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBjeCA9IC9bXFx1MDAwMFxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgIGVzY2FwYWJsZSA9IC9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgZ2FwLFxuICAgIGluZGVudCxcbiAgICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uc1xuICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgJ1xcdCc6ICdcXFxcdCcsXG4gICAgICAgICdcXG4nOiAnXFxcXG4nLFxuICAgICAgICAnXFxmJzogJ1xcXFxmJyxcbiAgICAgICAgJ1xccic6ICdcXFxccicsXG4gICAgICAgICdcIicgOiAnXFxcXFwiJyxcbiAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gICAgfSxcbiAgICByZXA7XG5cbmZ1bmN0aW9uIHF1b3RlKHN0cmluZykge1xuICAgIC8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm9cbiAgICAvLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5kIGl0LlxuICAgIC8vIE90aGVyd2lzZSB3ZSBtdXN0IGFsc28gcmVwbGFjZSB0aGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMgd2l0aCBzYWZlIGVzY2FwZVxuICAgIC8vIHNlcXVlbmNlcy5cbiAgICBcbiAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICByZXR1cm4gZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKSA/ICdcIicgKyBzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBjID0gbWV0YVthXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJyA/IGMgOlxuICAgICAgICAgICAgJ1xcXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG4gICAgfSkgKyAnXCInIDogJ1wiJyArIHN0cmluZyArICdcIic7XG59XG5cbmZ1bmN0aW9uIHN0cihrZXksIGhvbGRlcikge1xuICAgIC8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS5cbiAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci5cbiAgICAgICAgaywgICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuXG4gICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuXG4gICAgICAgIGxlbmd0aCxcbiAgICAgICAgbWluZCA9IGdhcCxcbiAgICAgICAgcGFydGlhbCxcbiAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICBcbiAgICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG9cbiAgICAvLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cbiAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IHJlcC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS5cbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTtcbiAgICAgICAgXG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOlxuICAgICAgICAgICAgLy8gdHlwZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUgaW5cbiAgICAgICAgICAgIC8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICdudWxsJztcbiAgICAgICAgICAgIGdhcCArPSBpbmRlbnQ7XG4gICAgICAgICAgICBwYXJ0aWFsID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFycmF5LmlzQXJyYXlcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBKb2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5kXG4gICAgICAgICAgICAgICAgLy8gd3JhcCB0aGVtIGluIGJyYWNrZXRzLlxuICAgICAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICdbXScgOiBnYXAgP1xuICAgICAgICAgICAgICAgICAgICAnW1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICddJyA6XG4gICAgICAgICAgICAgICAgICAgICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nO1xuICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwgdXNlIGl0IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZVxuICAgICAgICAgICAgLy8gc3RyaW5naWZpZWQuXG4gICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IHJlcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBvYmplY3QuXG4gICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLFxuICAgICAgICAvLyBhbmQgd3JhcCB0aGVtIGluIGJyYWNlcy5cblxuICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAgPyAne30nIDogZ2FwID9cbiAgICAgICAgICAgICd7XFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ30nIDpcbiAgICAgICAgICAgICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nO1xuICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICB2YXIgaTtcbiAgICBnYXAgPSAnJztcbiAgICBpbmRlbnQgPSAnJztcbiAgICBcbiAgICAvLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0XG4gICAgLy8gbWFueSBzcGFjZXMuXG4gICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGluZGVudCArPSAnICc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLlxuICAgIGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaW5kZW50ID0gc3BhY2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LlxuICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuXG4gICAgcmVwID0gcmVwbGFjZXI7XG4gICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAhPT0gJ2Z1bmN0aW9uJ1xuICAgICYmICh0eXBlb2YgcmVwbGFjZXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04uc3RyaW5naWZ5Jyk7XG4gICAgfVxuICAgIFxuICAgIC8vIE1ha2UgYSBmYWtlIHJvb3Qgb2JqZWN0IGNvbnRhaW5pbmcgb3VyIHZhbHVlIHVuZGVyIHRoZSBrZXkgb2YgJycuXG4gICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS5cbiAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2pzb25pZnkvbGliL3N0cmluZ2lmeS5qc1xuLy8gbW9kdWxlIGlkID0gODRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9vYmplY3QtYXNzaWduL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgc3RyaWN0VXJpRW5jb2RlID0gcmVxdWlyZSgnc3RyaWN0LXVyaS1lbmNvZGUnKTtcbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbmZ1bmN0aW9uIGVuY29kZXJGb3JBcnJheUZvcm1hdChvcHRzKSB7XG5cdHN3aXRjaCAob3B0cy5hcnJheUZvcm1hdCkge1xuXHRcdGNhc2UgJ2luZGV4Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgaW5kZXgpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBudWxsID8gW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbJyxcblx0XHRcdFx0XHRpbmRleCxcblx0XHRcdFx0XHQnXSdcblx0XHRcdFx0XS5qb2luKCcnKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnWycsXG5cdFx0XHRcdFx0ZW5jb2RlKGluZGV4LCBvcHRzKSxcblx0XHRcdFx0XHQnXT0nLFxuXHRcdFx0XHRcdGVuY29kZSh2YWx1ZSwgb3B0cylcblx0XHRcdFx0XS5qb2luKCcnKTtcblx0XHRcdH07XG5cblx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBlbmNvZGUoa2V5LCBvcHRzKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnW109Jyxcblx0XHRcdFx0XHRlbmNvZGUodmFsdWUsIG9wdHMpXG5cdFx0XHRcdF0uam9pbignJyk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBlbmNvZGUoa2V5LCBvcHRzKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnPScsXG5cdFx0XHRcdFx0ZW5jb2RlKHZhbHVlLCBvcHRzKVxuXHRcdFx0XHRdLmpvaW4oJycpO1xuXHRcdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKSB7XG5cdHZhciByZXN1bHQ7XG5cblx0c3dpdGNoIChvcHRzLmFycmF5Rm9ybWF0KSB7XG5cdFx0Y2FzZSAnaW5kZXgnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBhY2N1bXVsYXRvcikge1xuXHRcdFx0XHRyZXN1bHQgPSAvXFxbKFxcZCopXFxdJC8uZXhlYyhrZXkpO1xuXG5cdFx0XHRcdGtleSA9IGtleS5yZXBsYWNlKC9cXFtcXGQqXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYWNjdW11bGF0b3Jba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IHt9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XVtyZXN1bHRbMV1dID0gdmFsdWU7XG5cdFx0XHR9O1xuXG5cdFx0Y2FzZSAnYnJhY2tldCc6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdHJlc3VsdCA9IC8oXFxbXFxdKSQvLmV4ZWMoa2V5KTtcblxuXHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZSgvXFxbXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCB8fCBhY2N1bXVsYXRvcltrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gdmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFtdLmNvbmNhdChhY2N1bXVsYXRvcltrZXldLCB2YWx1ZSk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgYWNjdW11bGF0b3IpIHtcblx0XHRcdFx0aWYgKGFjY3VtdWxhdG9yW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gW10uY29uY2F0KGFjY3VtdWxhdG9yW2tleV0sIHZhbHVlKTtcblx0XHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlKHZhbHVlLCBvcHRzKSB7XG5cdGlmIChvcHRzLmVuY29kZSkge1xuXHRcdHJldHVybiBvcHRzLnN0cmljdCA/IHN0cmljdFVyaUVuY29kZSh2YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBrZXlzU29ydGVyKGlucHV0KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dC5zb3J0KCk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuXHRcdHJldHVybiBrZXlzU29ydGVyKE9iamVjdC5rZXlzKGlucHV0KSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0cmV0dXJuIE51bWJlcihhKSAtIE51bWJlcihiKTtcblx0XHR9KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGlucHV0W2tleV07XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gaW5wdXQ7XG59XG5cbmV4cG9ydHMuZXh0cmFjdCA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIHN0ci5zcGxpdCgnPycpWzFdIHx8ICcnO1xufTtcblxuZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uIChzdHIsIG9wdHMpIHtcblx0b3B0cyA9IG9iamVjdEFzc2lnbih7YXJyYXlGb3JtYXQ6ICdub25lJ30sIG9wdHMpO1xuXG5cdHZhciBmb3JtYXR0ZXIgPSBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKTtcblxuXHQvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggbm8gcHJvdG90eXBlXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nL2lzc3Vlcy80N1xuXHR2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKC9eKFxcP3wjfCYpLywgJycpO1xuXG5cdGlmICghc3RyKSB7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdHN0ci5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG5cdFx0dmFyIHBhcnRzID0gcGFyYW0ucmVwbGFjZSgvXFwrL2csICcgJykuc3BsaXQoJz0nKTtcblx0XHQvLyBGaXJlZm94IChwcmUgNDApIGRlY29kZXMgYCUzRGAgdG8gYD1gXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9xdWVyeS1zdHJpbmcvcHVsbC8zN1xuXHRcdHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpO1xuXHRcdHZhciB2YWwgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHMuam9pbignPScpIDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gbWlzc2luZyBgPWAgc2hvdWxkIGJlIGBudWxsYDpcblx0XHQvLyBodHRwOi8vdzMub3JnL1RSLzIwMTIvV0QtdXJsLTIwMTIwNTI0LyNjb2xsZWN0LXVybC1wYXJhbWV0ZXJzXG5cdFx0dmFsID0gdmFsID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVjb2RlVVJJQ29tcG9uZW50KHZhbCk7XG5cblx0XHRmb3JtYXR0ZXIoZGVjb2RlVVJJQ29tcG9uZW50KGtleSksIHZhbCwgcmV0KTtcblx0fSk7XG5cblx0cmV0dXJuIE9iamVjdC5rZXlzKHJldCkuc29ydCgpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcblx0XHR2YXIgdmFsID0gcmV0W2tleV07XG5cdFx0aWYgKEJvb2xlYW4odmFsKSAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHQvLyBTb3J0IG9iamVjdCBrZXlzLCBub3QgdmFsdWVzXG5cdFx0XHRyZXN1bHRba2V5XSA9IGtleXNTb3J0ZXIodmFsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0W2tleV0gPSB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG59O1xuXG5leHBvcnRzLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChvYmosIG9wdHMpIHtcblx0dmFyIGRlZmF1bHRzID0ge1xuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRzdHJpY3Q6IHRydWUsXG5cdFx0YXJyYXlGb3JtYXQ6ICdub25lJ1xuXHR9O1xuXG5cdG9wdHMgPSBvYmplY3RBc3NpZ24oZGVmYXVsdHMsIG9wdHMpO1xuXG5cdHZhciBmb3JtYXR0ZXIgPSBlbmNvZGVyRm9yQXJyYXlGb3JtYXQob3B0cyk7XG5cblx0cmV0dXJuIG9iaiA/IE9iamVjdC5rZXlzKG9iaikuc29ydCgpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0dmFyIHZhbCA9IG9ialtrZXldO1xuXG5cdFx0aWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGVuY29kZShrZXksIG9wdHMpO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRcdHZhciByZXN1bHQgPSBbXTtcblxuXHRcdFx0dmFsLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsMikge1xuXHRcdFx0XHRpZiAodmFsMiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0LnB1c2goZm9ybWF0dGVyKGtleSwgdmFsMiwgcmVzdWx0Lmxlbmd0aCkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiByZXN1bHQuam9pbignJicpO1xuXHRcdH1cblxuXHRcdHJldHVybiBlbmNvZGUoa2V5LCBvcHRzKSArICc9JyArIGVuY29kZSh2YWwsIG9wdHMpO1xuXHR9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcblx0XHRyZXR1cm4geC5sZW5ndGggPiAwO1xuXHR9KS5qb2luKCcmJykgOiAnJztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcXVlcnktc3RyaW5nL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24gKGMpIHtcblx0XHRyZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHR9KTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vc3RyaWN0LXVyaS1lbmNvZGUvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDg3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbihuYWNsKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFBvcnRlZCBpbiAyMDE0IGJ5IERtaXRyeSBDaGVzdG55a2ggYW5kIERldmkgTWFuZGlyaS5cbi8vIFB1YmxpYyBkb21haW4uXG4vL1xuLy8gSW1wbGVtZW50YXRpb24gZGVyaXZlZCBmcm9tIFR3ZWV0TmFDbCB2ZXJzaW9uIDIwMTQwNDI3LlxuLy8gU2VlIGZvciBkZXRhaWxzOiBodHRwOi8vdHdlZXRuYWNsLmNyLnlwLnRvL1xuXG52YXIgZ2YgPSBmdW5jdGlvbihpbml0KSB7XG4gIHZhciBpLCByID0gbmV3IEZsb2F0NjRBcnJheSgxNik7XG4gIGlmIChpbml0KSBmb3IgKGkgPSAwOyBpIDwgaW5pdC5sZW5ndGg7IGkrKykgcltpXSA9IGluaXRbaV07XG4gIHJldHVybiByO1xufTtcblxuLy8gIFBsdWdnYWJsZSwgaW5pdGlhbGl6ZWQgaW4gaGlnaC1sZXZlbCBBUEkgYmVsb3cuXG52YXIgcmFuZG9tYnl0ZXMgPSBmdW5jdGlvbigvKiB4LCBuICovKSB7IHRocm93IG5ldyBFcnJvcignbm8gUFJORycpOyB9O1xuXG52YXIgXzAgPSBuZXcgVWludDhBcnJheSgxNik7XG52YXIgXzkgPSBuZXcgVWludDhBcnJheSgzMik7IF85WzBdID0gOTtcblxudmFyIGdmMCA9IGdmKCksXG4gICAgZ2YxID0gZ2YoWzFdKSxcbiAgICBfMTIxNjY1ID0gZ2YoWzB4ZGI0MSwgMV0pLFxuICAgIEQgPSBnZihbMHg3OGEzLCAweDEzNTksIDB4NGRjYSwgMHg3NWViLCAweGQ4YWIsIDB4NDE0MSwgMHgwYTRkLCAweDAwNzAsIDB4ZTg5OCwgMHg3Nzc5LCAweDQwNzksIDB4OGNjNywgMHhmZTczLCAweDJiNmYsIDB4NmNlZSwgMHg1MjAzXSksXG4gICAgRDIgPSBnZihbMHhmMTU5LCAweDI2YjIsIDB4OWI5NCwgMHhlYmQ2LCAweGIxNTYsIDB4ODI4MywgMHgxNDlhLCAweDAwZTAsIDB4ZDEzMCwgMHhlZWYzLCAweDgwZjIsIDB4MTk4ZSwgMHhmY2U3LCAweDU2ZGYsIDB4ZDlkYywgMHgyNDA2XSksXG4gICAgWCA9IGdmKFsweGQ1MWEsIDB4OGYyNSwgMHgyZDYwLCAweGM5NTYsIDB4YTdiMiwgMHg5NTI1LCAweGM3NjAsIDB4NjkyYywgMHhkYzVjLCAweGZkZDYsIDB4ZTIzMSwgMHhjMGE0LCAweDUzZmUsIDB4Y2Q2ZSwgMHgzNmQzLCAweDIxNjldKSxcbiAgICBZID0gZ2YoWzB4NjY1OCwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2Nl0pLFxuICAgIEkgPSBnZihbMHhhMGIwLCAweDRhMGUsIDB4MWIyNywgMHhjNGVlLCAweGU0NzgsIDB4YWQyZiwgMHgxODA2LCAweDJmNDMsIDB4ZDdhNywgMHgzZGZiLCAweDAwOTksIDB4MmI0ZCwgMHhkZjBiLCAweDRmYzEsIDB4MjQ4MCwgMHgyYjgzXSk7XG5cbmZ1bmN0aW9uIHRzNjQoeCwgaSwgaCwgbCkge1xuICB4W2ldICAgPSAoaCA+PiAyNCkgJiAweGZmO1xuICB4W2krMV0gPSAoaCA+PiAxNikgJiAweGZmO1xuICB4W2krMl0gPSAoaCA+PiAgOCkgJiAweGZmO1xuICB4W2krM10gPSBoICYgMHhmZjtcbiAgeFtpKzRdID0gKGwgPj4gMjQpICAmIDB4ZmY7XG4gIHhbaSs1XSA9IChsID4+IDE2KSAgJiAweGZmO1xuICB4W2krNl0gPSAobCA+PiAgOCkgICYgMHhmZjtcbiAgeFtpKzddID0gbCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIHZuKHgsIHhpLCB5LCB5aSwgbikge1xuICB2YXIgaSxkID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgZCB8PSB4W3hpK2ldXnlbeWkraV07XG4gIHJldHVybiAoMSAmICgoZCAtIDEpID4+PiA4KSkgLSAxO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fdmVyaWZ5XzE2KHgsIHhpLCB5LCB5aSkge1xuICByZXR1cm4gdm4oeCx4aSx5LHlpLDE2KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3ZlcmlmeV8zMih4LCB4aSwgeSwgeWkpIHtcbiAgcmV0dXJuIHZuKHgseGkseSx5aSwzMik7XG59XG5cbmZ1bmN0aW9uIGNvcmVfc2Fsc2EyMChvLCBwLCBrLCBjKSB7XG4gIHZhciBqMCAgPSBjWyAwXSAmIDB4ZmYgfCAoY1sgMV0gJiAweGZmKTw8OCB8IChjWyAyXSAmIDB4ZmYpPDwxNiB8IChjWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxICA9IGtbIDBdICYgMHhmZiB8IChrWyAxXSAmIDB4ZmYpPDw4IHwgKGtbIDJdICYgMHhmZik8PDE2IHwgKGtbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajIgID0ga1sgNF0gJiAweGZmIHwgKGtbIDVdICYgMHhmZik8PDggfCAoa1sgNl0gJiAweGZmKTw8MTYgfCAoa1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqMyAgPSBrWyA4XSAmIDB4ZmYgfCAoa1sgOV0gJiAweGZmKTw8OCB8IChrWzEwXSAmIDB4ZmYpPDwxNiB8IChrWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo0ICA9IGtbMTJdICYgMHhmZiB8IChrWzEzXSAmIDB4ZmYpPDw4IHwgKGtbMTRdICYgMHhmZik8PDE2IHwgKGtbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajUgID0gY1sgNF0gJiAweGZmIHwgKGNbIDVdICYgMHhmZik8PDggfCAoY1sgNl0gJiAweGZmKTw8MTYgfCAoY1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqNiAgPSBwWyAwXSAmIDB4ZmYgfCAocFsgMV0gJiAweGZmKTw8OCB8IChwWyAyXSAmIDB4ZmYpPDwxNiB8IChwWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo3ICA9IHBbIDRdICYgMHhmZiB8IChwWyA1XSAmIDB4ZmYpPDw4IHwgKHBbIDZdICYgMHhmZik8PDE2IHwgKHBbIDddICYgMHhmZik8PDI0LFxuICAgICAgajggID0gcFsgOF0gJiAweGZmIHwgKHBbIDldICYgMHhmZik8PDggfCAocFsxMF0gJiAweGZmKTw8MTYgfCAocFsxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqOSAgPSBwWzEyXSAmIDB4ZmYgfCAocFsxM10gJiAweGZmKTw8OCB8IChwWzE0XSAmIDB4ZmYpPDwxNiB8IChwWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMCA9IGNbIDhdICYgMHhmZiB8IChjWyA5XSAmIDB4ZmYpPDw4IHwgKGNbMTBdICYgMHhmZik8PDE2IHwgKGNbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajExID0ga1sxNl0gJiAweGZmIHwgKGtbMTddICYgMHhmZik8PDggfCAoa1sxOF0gJiAweGZmKTw8MTYgfCAoa1sxOV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTIgPSBrWzIwXSAmIDB4ZmYgfCAoa1syMV0gJiAweGZmKTw8OCB8IChrWzIyXSAmIDB4ZmYpPDwxNiB8IChrWzIzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMyA9IGtbMjRdICYgMHhmZiB8IChrWzI1XSAmIDB4ZmYpPDw4IHwgKGtbMjZdICYgMHhmZik8PDE2IHwgKGtbMjddICYgMHhmZik8PDI0LFxuICAgICAgajE0ID0ga1syOF0gJiAweGZmIHwgKGtbMjldICYgMHhmZik8PDggfCAoa1szMF0gJiAweGZmKTw8MTYgfCAoa1szMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTUgPSBjWzEyXSAmIDB4ZmYgfCAoY1sxM10gJiAweGZmKTw8OCB8IChjWzE0XSAmIDB4ZmYpPDwxNiB8IChjWzE1XSAmIDB4ZmYpPDwyNDtcblxuICB2YXIgeDAgPSBqMCwgeDEgPSBqMSwgeDIgPSBqMiwgeDMgPSBqMywgeDQgPSBqNCwgeDUgPSBqNSwgeDYgPSBqNiwgeDcgPSBqNyxcbiAgICAgIHg4ID0gajgsIHg5ID0gajksIHgxMCA9IGoxMCwgeDExID0gajExLCB4MTIgPSBqMTIsIHgxMyA9IGoxMywgeDE0ID0gajE0LFxuICAgICAgeDE1ID0gajE1LCB1O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkgKz0gMikge1xuICAgIHUgPSB4MCArIHgxMiB8IDA7XG4gICAgeDQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg0ICsgeDAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHg0IHwgMDtcbiAgICB4MTIgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEyICsgeDggfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4MSB8IDA7XG4gICAgeDkgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg5ICsgeDUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDkgfCAwO1xuICAgIHgxIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxICsgeDEzIHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg2IHwgMDtcbiAgICB4MTQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxNCArIHgxMCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDE0IHwgMDtcbiAgICB4NiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NiArIHgyIHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTEgfCAwO1xuICAgIHgzIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MyArIHgxNSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDMgfCAwO1xuICAgIHgxMSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTEgKyB4NyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDAgKyB4MyB8IDA7XG4gICAgeDEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxICsgeDAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxIHwgMDtcbiAgICB4MyBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MyArIHgyIHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDQgfCAwO1xuICAgIHg2IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NiArIHg1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4NiB8IDA7XG4gICAgeDQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDQgKyB4NyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4OSB8IDA7XG4gICAgeDExIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTEgKyB4MTAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHgxMSB8IDA7XG4gICAgeDkgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDkgKyB4OCB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDE0IHwgMDtcbiAgICB4MTIgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMiArIHgxNSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4MTIgfCAwO1xuICAgIHgxNCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTQgKyB4MTMgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuICB9XG4gICB4MCA9ICB4MCArICBqMCB8IDA7XG4gICB4MSA9ICB4MSArICBqMSB8IDA7XG4gICB4MiA9ICB4MiArICBqMiB8IDA7XG4gICB4MyA9ICB4MyArICBqMyB8IDA7XG4gICB4NCA9ICB4NCArICBqNCB8IDA7XG4gICB4NSA9ICB4NSArICBqNSB8IDA7XG4gICB4NiA9ICB4NiArICBqNiB8IDA7XG4gICB4NyA9ICB4NyArICBqNyB8IDA7XG4gICB4OCA9ICB4OCArICBqOCB8IDA7XG4gICB4OSA9ICB4OSArICBqOSB8IDA7XG4gIHgxMCA9IHgxMCArIGoxMCB8IDA7XG4gIHgxMSA9IHgxMSArIGoxMSB8IDA7XG4gIHgxMiA9IHgxMiArIGoxMiB8IDA7XG4gIHgxMyA9IHgxMyArIGoxMyB8IDA7XG4gIHgxNCA9IHgxNCArIGoxNCB8IDA7XG4gIHgxNSA9IHgxNSArIGoxNSB8IDA7XG5cbiAgb1sgMF0gPSB4MCA+Pj4gIDAgJiAweGZmO1xuICBvWyAxXSA9IHgwID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDJdID0geDAgPj4+IDE2ICYgMHhmZjtcbiAgb1sgM10gPSB4MCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDRdID0geDEgPj4+ICAwICYgMHhmZjtcbiAgb1sgNV0gPSB4MSA+Pj4gIDggJiAweGZmO1xuICBvWyA2XSA9IHgxID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDddID0geDEgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA4XSA9IHgyID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDldID0geDIgPj4+ICA4ICYgMHhmZjtcbiAgb1sxMF0gPSB4MiA+Pj4gMTYgJiAweGZmO1xuICBvWzExXSA9IHgyID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxMl0gPSB4MyA+Pj4gIDAgJiAweGZmO1xuICBvWzEzXSA9IHgzID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTRdID0geDMgPj4+IDE2ICYgMHhmZjtcbiAgb1sxNV0gPSB4MyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTZdID0geDQgPj4+ICAwICYgMHhmZjtcbiAgb1sxN10gPSB4NCA+Pj4gIDggJiAweGZmO1xuICBvWzE4XSA9IHg0ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTldID0geDQgPj4+IDI0ICYgMHhmZjtcblxuICBvWzIwXSA9IHg1ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjFdID0geDUgPj4+ICA4ICYgMHhmZjtcbiAgb1syMl0gPSB4NSA+Pj4gMTYgJiAweGZmO1xuICBvWzIzXSA9IHg1ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syNF0gPSB4NiA+Pj4gIDAgJiAweGZmO1xuICBvWzI1XSA9IHg2ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjZdID0geDYgPj4+IDE2ICYgMHhmZjtcbiAgb1syN10gPSB4NiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjhdID0geDcgPj4+ICAwICYgMHhmZjtcbiAgb1syOV0gPSB4NyA+Pj4gIDggJiAweGZmO1xuICBvWzMwXSA9IHg3ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMzFdID0geDcgPj4+IDI0ICYgMHhmZjtcblxuICBvWzMyXSA9IHg4ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMzNdID0geDggPj4+ICA4ICYgMHhmZjtcbiAgb1szNF0gPSB4OCA+Pj4gMTYgJiAweGZmO1xuICBvWzM1XSA9IHg4ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1szNl0gPSB4OSA+Pj4gIDAgJiAweGZmO1xuICBvWzM3XSA9IHg5ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzhdID0geDkgPj4+IDE2ICYgMHhmZjtcbiAgb1szOV0gPSB4OSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNDBdID0geDEwID4+PiAgMCAmIDB4ZmY7XG4gIG9bNDFdID0geDEwID4+PiAgOCAmIDB4ZmY7XG4gIG9bNDJdID0geDEwID4+PiAxNiAmIDB4ZmY7XG4gIG9bNDNdID0geDEwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s0NF0gPSB4MTEgPj4+ICAwICYgMHhmZjtcbiAgb1s0NV0gPSB4MTEgPj4+ICA4ICYgMHhmZjtcbiAgb1s0Nl0gPSB4MTEgPj4+IDE2ICYgMHhmZjtcbiAgb1s0N10gPSB4MTEgPj4+IDI0ICYgMHhmZjtcblxuICBvWzQ4XSA9IHgxMiA+Pj4gIDAgJiAweGZmO1xuICBvWzQ5XSA9IHgxMiA+Pj4gIDggJiAweGZmO1xuICBvWzUwXSA9IHgxMiA+Pj4gMTYgJiAweGZmO1xuICBvWzUxXSA9IHgxMiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNTJdID0geDEzID4+PiAgMCAmIDB4ZmY7XG4gIG9bNTNdID0geDEzID4+PiAgOCAmIDB4ZmY7XG4gIG9bNTRdID0geDEzID4+PiAxNiAmIDB4ZmY7XG4gIG9bNTVdID0geDEzID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s1Nl0gPSB4MTQgPj4+ICAwICYgMHhmZjtcbiAgb1s1N10gPSB4MTQgPj4+ICA4ICYgMHhmZjtcbiAgb1s1OF0gPSB4MTQgPj4+IDE2ICYgMHhmZjtcbiAgb1s1OV0gPSB4MTQgPj4+IDI0ICYgMHhmZjtcblxuICBvWzYwXSA9IHgxNSA+Pj4gIDAgJiAweGZmO1xuICBvWzYxXSA9IHgxNSA+Pj4gIDggJiAweGZmO1xuICBvWzYyXSA9IHgxNSA+Pj4gMTYgJiAweGZmO1xuICBvWzYzXSA9IHgxNSA+Pj4gMjQgJiAweGZmO1xufVxuXG5mdW5jdGlvbiBjb3JlX2hzYWxzYTIwKG8scCxrLGMpIHtcbiAgdmFyIGowICA9IGNbIDBdICYgMHhmZiB8IChjWyAxXSAmIDB4ZmYpPDw4IHwgKGNbIDJdICYgMHhmZik8PDE2IHwgKGNbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajEgID0ga1sgMF0gJiAweGZmIHwgKGtbIDFdICYgMHhmZik8PDggfCAoa1sgMl0gJiAweGZmKTw8MTYgfCAoa1sgM10gJiAweGZmKTw8MjQsXG4gICAgICBqMiAgPSBrWyA0XSAmIDB4ZmYgfCAoa1sgNV0gJiAweGZmKTw8OCB8IChrWyA2XSAmIDB4ZmYpPDwxNiB8IChrWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGozICA9IGtbIDhdICYgMHhmZiB8IChrWyA5XSAmIDB4ZmYpPDw4IHwgKGtbMTBdICYgMHhmZik8PDE2IHwgKGtbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajQgID0ga1sxMl0gJiAweGZmIHwgKGtbMTNdICYgMHhmZik8PDggfCAoa1sxNF0gJiAweGZmKTw8MTYgfCAoa1sxNV0gJiAweGZmKTw8MjQsXG4gICAgICBqNSAgPSBjWyA0XSAmIDB4ZmYgfCAoY1sgNV0gJiAweGZmKTw8OCB8IChjWyA2XSAmIDB4ZmYpPDwxNiB8IChjWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo2ICA9IHBbIDBdICYgMHhmZiB8IChwWyAxXSAmIDB4ZmYpPDw4IHwgKHBbIDJdICYgMHhmZik8PDE2IHwgKHBbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajcgID0gcFsgNF0gJiAweGZmIHwgKHBbIDVdICYgMHhmZik8PDggfCAocFsgNl0gJiAweGZmKTw8MTYgfCAocFsgN10gJiAweGZmKTw8MjQsXG4gICAgICBqOCAgPSBwWyA4XSAmIDB4ZmYgfCAocFsgOV0gJiAweGZmKTw8OCB8IChwWzEwXSAmIDB4ZmYpPDwxNiB8IChwWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo5ICA9IHBbMTJdICYgMHhmZiB8IChwWzEzXSAmIDB4ZmYpPDw4IHwgKHBbMTRdICYgMHhmZik8PDE2IHwgKHBbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajEwID0gY1sgOF0gJiAweGZmIHwgKGNbIDldICYgMHhmZik8PDggfCAoY1sxMF0gJiAweGZmKTw8MTYgfCAoY1sxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTEgPSBrWzE2XSAmIDB4ZmYgfCAoa1sxN10gJiAweGZmKTw8OCB8IChrWzE4XSAmIDB4ZmYpPDwxNiB8IChrWzE5XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMiA9IGtbMjBdICYgMHhmZiB8IChrWzIxXSAmIDB4ZmYpPDw4IHwgKGtbMjJdICYgMHhmZik8PDE2IHwgKGtbMjNdICYgMHhmZik8PDI0LFxuICAgICAgajEzID0ga1syNF0gJiAweGZmIHwgKGtbMjVdICYgMHhmZik8PDggfCAoa1syNl0gJiAweGZmKTw8MTYgfCAoa1syN10gJiAweGZmKTw8MjQsXG4gICAgICBqMTQgPSBrWzI4XSAmIDB4ZmYgfCAoa1syOV0gJiAweGZmKTw8OCB8IChrWzMwXSAmIDB4ZmYpPDwxNiB8IChrWzMxXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxNSA9IGNbMTJdICYgMHhmZiB8IChjWzEzXSAmIDB4ZmYpPDw4IHwgKGNbMTRdICYgMHhmZik8PDE2IHwgKGNbMTVdICYgMHhmZik8PDI0O1xuXG4gIHZhciB4MCA9IGowLCB4MSA9IGoxLCB4MiA9IGoyLCB4MyA9IGozLCB4NCA9IGo0LCB4NSA9IGo1LCB4NiA9IGo2LCB4NyA9IGo3LFxuICAgICAgeDggPSBqOCwgeDkgPSBqOSwgeDEwID0gajEwLCB4MTEgPSBqMTEsIHgxMiA9IGoxMiwgeDEzID0gajEzLCB4MTQgPSBqMTQsXG4gICAgICB4MTUgPSBqMTUsIHU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSArPSAyKSB7XG4gICAgdSA9IHgwICsgeDEyIHwgMDtcbiAgICB4NCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDQgKyB4MCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDQgfCAwO1xuICAgIHgxMiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTIgKyB4OCB8IDA7XG4gICAgeDAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4NSArIHgxIHwgMDtcbiAgICB4OSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDkgKyB4NSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4OSB8IDA7XG4gICAgeDEgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEgKyB4MTMgfCAwO1xuICAgIHg1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDEwICsgeDYgfCAwO1xuICAgIHgxNCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDE0ICsgeDEwIHwgMDtcbiAgICB4MiBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDIgKyB4MTQgfCAwO1xuICAgIHg2IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg2ICsgeDIgfCAwO1xuICAgIHgxMCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxNSArIHgxMSB8IDA7XG4gICAgeDMgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgzICsgeDE1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4MyB8IDA7XG4gICAgeDExIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxMSArIHg3IHwgMDtcbiAgICB4MTUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MCArIHgzIHwgMDtcbiAgICB4MSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEgKyB4MCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDEgfCAwO1xuICAgIHgzIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgzICsgeDIgfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4NCB8IDA7XG4gICAgeDYgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg2ICsgeDUgfCAwO1xuICAgIHg3IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4NyArIHg2IHwgMDtcbiAgICB4NCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NCArIHg3IHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg5IHwgMDtcbiAgICB4MTEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMSArIHgxMCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDExIHwgMDtcbiAgICB4OSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4OSArIHg4IHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTQgfCAwO1xuICAgIHgxMiBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEyICsgeDE1IHwgMDtcbiAgICB4MTMgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgxMyArIHgxMiB8IDA7XG4gICAgeDE0IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxNCArIHgxMyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG4gIH1cblxuICBvWyAwXSA9IHgwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDFdID0geDAgPj4+ICA4ICYgMHhmZjtcbiAgb1sgMl0gPSB4MCA+Pj4gMTYgJiAweGZmO1xuICBvWyAzXSA9IHgwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sgNF0gPSB4NSA+Pj4gIDAgJiAweGZmO1xuICBvWyA1XSA9IHg1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDZdID0geDUgPj4+IDE2ICYgMHhmZjtcbiAgb1sgN10gPSB4NSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDhdID0geDEwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDldID0geDEwID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTBdID0geDEwID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTFdID0geDEwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxMl0gPSB4MTUgPj4+ICAwICYgMHhmZjtcbiAgb1sxM10gPSB4MTUgPj4+ICA4ICYgMHhmZjtcbiAgb1sxNF0gPSB4MTUgPj4+IDE2ICYgMHhmZjtcbiAgb1sxNV0gPSB4MTUgPj4+IDI0ICYgMHhmZjtcblxuICBvWzE2XSA9IHg2ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTddID0geDYgPj4+ICA4ICYgMHhmZjtcbiAgb1sxOF0gPSB4NiA+Pj4gMTYgJiAweGZmO1xuICBvWzE5XSA9IHg2ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syMF0gPSB4NyA+Pj4gIDAgJiAweGZmO1xuICBvWzIxXSA9IHg3ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjJdID0geDcgPj4+IDE2ICYgMHhmZjtcbiAgb1syM10gPSB4NyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjRdID0geDggPj4+ICAwICYgMHhmZjtcbiAgb1syNV0gPSB4OCA+Pj4gIDggJiAweGZmO1xuICBvWzI2XSA9IHg4ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjddID0geDggPj4+IDI0ICYgMHhmZjtcblxuICBvWzI4XSA9IHg5ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjldID0geDkgPj4+ICA4ICYgMHhmZjtcbiAgb1szMF0gPSB4OSA+Pj4gMTYgJiAweGZmO1xuICBvWzMxXSA9IHg5ID4+PiAyNCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19jb3JlX3NhbHNhMjAob3V0LGlucCxrLGMpIHtcbiAgY29yZV9zYWxzYTIwKG91dCxpbnAsayxjKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2NvcmVfaHNhbHNhMjAob3V0LGlucCxrLGMpIHtcbiAgY29yZV9oc2Fsc2EyMChvdXQsaW5wLGssYyk7XG59XG5cbnZhciBzaWdtYSA9IG5ldyBVaW50OEFycmF5KFsxMDEsIDEyMCwgMTEyLCA5NywgMTEwLCAxMDAsIDMyLCA1MSwgNTAsIDQ1LCA5OCwgMTIxLCAxMTYsIDEwMSwgMzIsIDEwN10pO1xuICAgICAgICAgICAgLy8gXCJleHBhbmQgMzItYnl0ZSBrXCJcblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcihjLGNwb3MsbSxtcG9zLGIsbixrKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMTYpLCB4ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgdSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHpbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB6W2ldID0gbltpXTtcbiAgd2hpbGUgKGIgPj0gNjQpIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgY1tjcG9zK2ldID0gbVttcG9zK2ldIF4geFtpXTtcbiAgICB1ID0gMTtcbiAgICBmb3IgKGkgPSA4OyBpIDwgMTY7IGkrKykge1xuICAgICAgdSA9IHUgKyAoeltpXSAmIDB4ZmYpIHwgMDtcbiAgICAgIHpbaV0gPSB1ICYgMHhmZjtcbiAgICAgIHUgPj4+PSA4O1xuICAgIH1cbiAgICBiIC09IDY0O1xuICAgIGNwb3MgKz0gNjQ7XG4gICAgbXBvcyArPSA2NDtcbiAgfVxuICBpZiAoYiA+IDApIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYjsgaSsrKSBjW2Nwb3MraV0gPSBtW21wb3MraV0gXiB4W2ldO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAoYyxjcG9zLGIsbixrKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMTYpLCB4ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgdSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHpbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB6W2ldID0gbltpXTtcbiAgd2hpbGUgKGIgPj0gNjQpIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgY1tjcG9zK2ldID0geFtpXTtcbiAgICB1ID0gMTtcbiAgICBmb3IgKGkgPSA4OyBpIDwgMTY7IGkrKykge1xuICAgICAgdSA9IHUgKyAoeltpXSAmIDB4ZmYpIHwgMDtcbiAgICAgIHpbaV0gPSB1ICYgMHhmZjtcbiAgICAgIHUgPj4+PSA4O1xuICAgIH1cbiAgICBiIC09IDY0O1xuICAgIGNwb3MgKz0gNjQ7XG4gIH1cbiAgaWYgKGIgPiAwKSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IGI7IGkrKykgY1tjcG9zK2ldID0geFtpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbShjLGNwb3MsZCxuLGspIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwKHMsbixrLHNpZ21hKTtcbiAgdmFyIHNuID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBzbltpXSA9IG5baSsxNl07XG4gIHJldHVybiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAoYyxjcG9zLGQsc24scyk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW1feG9yKGMsY3BvcyxtLG1wb3MsZCxuLGspIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwKHMsbixrLHNpZ21hKTtcbiAgdmFyIHNuID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBzbltpXSA9IG5baSsxNl07XG4gIHJldHVybiBjcnlwdG9fc3RyZWFtX3NhbHNhMjBfeG9yKGMsY3BvcyxtLG1wb3MsZCxzbixzKTtcbn1cblxuLypcbiogUG9ydCBvZiBBbmRyZXcgTW9vbidzIFBvbHkxMzA1LWRvbm5hLTE2LiBQdWJsaWMgZG9tYWluLlxuKiBodHRwczovL2dpdGh1Yi5jb20vZmxvb2R5YmVycnkvcG9seTEzMDUtZG9ubmFcbiovXG5cbnZhciBwb2x5MTMwNSA9IGZ1bmN0aW9uKGtleSkge1xuICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgdGhpcy5yID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdGhpcy5oID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdGhpcy5wYWQgPSBuZXcgVWludDE2QXJyYXkoOCk7XG4gIHRoaXMubGVmdG92ZXIgPSAwO1xuICB0aGlzLmZpbiA9IDA7XG5cbiAgdmFyIHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NztcblxuICB0MCA9IGtleVsgMF0gJiAweGZmIHwgKGtleVsgMV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbMF0gPSAoIHQwICAgICAgICAgICAgICAgICAgICAgKSAmIDB4MWZmZjtcbiAgdDEgPSBrZXlbIDJdICYgMHhmZiB8IChrZXlbIDNdICYgMHhmZikgPDwgODsgdGhpcy5yWzFdID0gKCh0MCA+Pj4gMTMpIHwgKHQxIDw8ICAzKSkgJiAweDFmZmY7XG4gIHQyID0ga2V5WyA0XSAmIDB4ZmYgfCAoa2V5WyA1XSAmIDB4ZmYpIDw8IDg7IHRoaXMuclsyXSA9ICgodDEgPj4+IDEwKSB8ICh0MiA8PCAgNikpICYgMHgxZjAzO1xuICB0MyA9IGtleVsgNl0gJiAweGZmIHwgKGtleVsgN10gJiAweGZmKSA8PCA4OyB0aGlzLnJbM10gPSAoKHQyID4+PiAgNykgfCAodDMgPDwgIDkpKSAmIDB4MWZmZjtcbiAgdDQgPSBrZXlbIDhdICYgMHhmZiB8IChrZXlbIDldICYgMHhmZikgPDwgODsgdGhpcy5yWzRdID0gKCh0MyA+Pj4gIDQpIHwgKHQ0IDw8IDEyKSkgJiAweDAwZmY7XG4gIHRoaXMucls1XSA9ICgodDQgPj4+ICAxKSkgJiAweDFmZmU7XG4gIHQ1ID0ga2V5WzEwXSAmIDB4ZmYgfCAoa2V5WzExXSAmIDB4ZmYpIDw8IDg7IHRoaXMucls2XSA9ICgodDQgPj4+IDE0KSB8ICh0NSA8PCAgMikpICYgMHgxZmZmO1xuICB0NiA9IGtleVsxMl0gJiAweGZmIHwgKGtleVsxM10gJiAweGZmKSA8PCA4OyB0aGlzLnJbN10gPSAoKHQ1ID4+PiAxMSkgfCAodDYgPDwgIDUpKSAmIDB4MWY4MTtcbiAgdDcgPSBrZXlbMTRdICYgMHhmZiB8IChrZXlbMTVdICYgMHhmZikgPDwgODsgdGhpcy5yWzhdID0gKCh0NiA+Pj4gIDgpIHwgKHQ3IDw8ICA4KSkgJiAweDFmZmY7XG4gIHRoaXMucls5XSA9ICgodDcgPj4+ICA1KSkgJiAweDAwN2Y7XG5cbiAgdGhpcy5wYWRbMF0gPSBrZXlbMTZdICYgMHhmZiB8IChrZXlbMTddICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbMV0gPSBrZXlbMThdICYgMHhmZiB8IChrZXlbMTldICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbMl0gPSBrZXlbMjBdICYgMHhmZiB8IChrZXlbMjFdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbM10gPSBrZXlbMjJdICYgMHhmZiB8IChrZXlbMjNdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNF0gPSBrZXlbMjRdICYgMHhmZiB8IChrZXlbMjVdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNV0gPSBrZXlbMjZdICYgMHhmZiB8IChrZXlbMjddICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNl0gPSBrZXlbMjhdICYgMHhmZiB8IChrZXlbMjldICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbN10gPSBrZXlbMzBdICYgMHhmZiB8IChrZXlbMzFdICYgMHhmZikgPDwgODtcbn07XG5cbnBvbHkxMzA1LnByb3RvdHlwZS5ibG9ja3MgPSBmdW5jdGlvbihtLCBtcG9zLCBieXRlcykge1xuICB2YXIgaGliaXQgPSB0aGlzLmZpbiA/IDAgOiAoMSA8PCAxMSk7XG4gIHZhciB0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIGM7XG4gIHZhciBkMCwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcsIGQ4LCBkOTtcblxuICB2YXIgaDAgPSB0aGlzLmhbMF0sXG4gICAgICBoMSA9IHRoaXMuaFsxXSxcbiAgICAgIGgyID0gdGhpcy5oWzJdLFxuICAgICAgaDMgPSB0aGlzLmhbM10sXG4gICAgICBoNCA9IHRoaXMuaFs0XSxcbiAgICAgIGg1ID0gdGhpcy5oWzVdLFxuICAgICAgaDYgPSB0aGlzLmhbNl0sXG4gICAgICBoNyA9IHRoaXMuaFs3XSxcbiAgICAgIGg4ID0gdGhpcy5oWzhdLFxuICAgICAgaDkgPSB0aGlzLmhbOV07XG5cbiAgdmFyIHIwID0gdGhpcy5yWzBdLFxuICAgICAgcjEgPSB0aGlzLnJbMV0sXG4gICAgICByMiA9IHRoaXMuclsyXSxcbiAgICAgIHIzID0gdGhpcy5yWzNdLFxuICAgICAgcjQgPSB0aGlzLnJbNF0sXG4gICAgICByNSA9IHRoaXMucls1XSxcbiAgICAgIHI2ID0gdGhpcy5yWzZdLFxuICAgICAgcjcgPSB0aGlzLnJbN10sXG4gICAgICByOCA9IHRoaXMucls4XSxcbiAgICAgIHI5ID0gdGhpcy5yWzldO1xuXG4gIHdoaWxlIChieXRlcyA+PSAxNikge1xuICAgIHQwID0gbVttcG9zKyAwXSAmIDB4ZmYgfCAobVttcG9zKyAxXSAmIDB4ZmYpIDw8IDg7IGgwICs9ICggdDAgICAgICAgICAgICAgICAgICAgICApICYgMHgxZmZmO1xuICAgIHQxID0gbVttcG9zKyAyXSAmIDB4ZmYgfCAobVttcG9zKyAzXSAmIDB4ZmYpIDw8IDg7IGgxICs9ICgodDAgPj4+IDEzKSB8ICh0MSA8PCAgMykpICYgMHgxZmZmO1xuICAgIHQyID0gbVttcG9zKyA0XSAmIDB4ZmYgfCAobVttcG9zKyA1XSAmIDB4ZmYpIDw8IDg7IGgyICs9ICgodDEgPj4+IDEwKSB8ICh0MiA8PCAgNikpICYgMHgxZmZmO1xuICAgIHQzID0gbVttcG9zKyA2XSAmIDB4ZmYgfCAobVttcG9zKyA3XSAmIDB4ZmYpIDw8IDg7IGgzICs9ICgodDIgPj4+ICA3KSB8ICh0MyA8PCAgOSkpICYgMHgxZmZmO1xuICAgIHQ0ID0gbVttcG9zKyA4XSAmIDB4ZmYgfCAobVttcG9zKyA5XSAmIDB4ZmYpIDw8IDg7IGg0ICs9ICgodDMgPj4+ICA0KSB8ICh0NCA8PCAxMikpICYgMHgxZmZmO1xuICAgIGg1ICs9ICgodDQgPj4+ICAxKSkgJiAweDFmZmY7XG4gICAgdDUgPSBtW21wb3MrMTBdICYgMHhmZiB8IChtW21wb3MrMTFdICYgMHhmZikgPDwgODsgaDYgKz0gKCh0NCA+Pj4gMTQpIHwgKHQ1IDw8ICAyKSkgJiAweDFmZmY7XG4gICAgdDYgPSBtW21wb3MrMTJdICYgMHhmZiB8IChtW21wb3MrMTNdICYgMHhmZikgPDwgODsgaDcgKz0gKCh0NSA+Pj4gMTEpIHwgKHQ2IDw8ICA1KSkgJiAweDFmZmY7XG4gICAgdDcgPSBtW21wb3MrMTRdICYgMHhmZiB8IChtW21wb3MrMTVdICYgMHhmZikgPDwgODsgaDggKz0gKCh0NiA+Pj4gIDgpIHwgKHQ3IDw8ICA4KSkgJiAweDFmZmY7XG4gICAgaDkgKz0gKCh0NyA+Pj4gNSkpIHwgaGliaXQ7XG5cbiAgICBjID0gMDtcblxuICAgIGQwID0gYztcbiAgICBkMCArPSBoMCAqIHIwO1xuICAgIGQwICs9IGgxICogKDUgKiByOSk7XG4gICAgZDAgKz0gaDIgKiAoNSAqIHI4KTtcbiAgICBkMCArPSBoMyAqICg1ICogcjcpO1xuICAgIGQwICs9IGg0ICogKDUgKiByNik7XG4gICAgYyA9IChkMCA+Pj4gMTMpOyBkMCAmPSAweDFmZmY7XG4gICAgZDAgKz0gaDUgKiAoNSAqIHI1KTtcbiAgICBkMCArPSBoNiAqICg1ICogcjQpO1xuICAgIGQwICs9IGg3ICogKDUgKiByMyk7XG4gICAgZDAgKz0gaDggKiAoNSAqIHIyKTtcbiAgICBkMCArPSBoOSAqICg1ICogcjEpO1xuICAgIGMgKz0gKGQwID4+PiAxMyk7IGQwICY9IDB4MWZmZjtcblxuICAgIGQxID0gYztcbiAgICBkMSArPSBoMCAqIHIxO1xuICAgIGQxICs9IGgxICogcjA7XG4gICAgZDEgKz0gaDIgKiAoNSAqIHI5KTtcbiAgICBkMSArPSBoMyAqICg1ICogcjgpO1xuICAgIGQxICs9IGg0ICogKDUgKiByNyk7XG4gICAgYyA9IChkMSA+Pj4gMTMpOyBkMSAmPSAweDFmZmY7XG4gICAgZDEgKz0gaDUgKiAoNSAqIHI2KTtcbiAgICBkMSArPSBoNiAqICg1ICogcjUpO1xuICAgIGQxICs9IGg3ICogKDUgKiByNCk7XG4gICAgZDEgKz0gaDggKiAoNSAqIHIzKTtcbiAgICBkMSArPSBoOSAqICg1ICogcjIpO1xuICAgIGMgKz0gKGQxID4+PiAxMyk7IGQxICY9IDB4MWZmZjtcblxuICAgIGQyID0gYztcbiAgICBkMiArPSBoMCAqIHIyO1xuICAgIGQyICs9IGgxICogcjE7XG4gICAgZDIgKz0gaDIgKiByMDtcbiAgICBkMiArPSBoMyAqICg1ICogcjkpO1xuICAgIGQyICs9IGg0ICogKDUgKiByOCk7XG4gICAgYyA9IChkMiA+Pj4gMTMpOyBkMiAmPSAweDFmZmY7XG4gICAgZDIgKz0gaDUgKiAoNSAqIHI3KTtcbiAgICBkMiArPSBoNiAqICg1ICogcjYpO1xuICAgIGQyICs9IGg3ICogKDUgKiByNSk7XG4gICAgZDIgKz0gaDggKiAoNSAqIHI0KTtcbiAgICBkMiArPSBoOSAqICg1ICogcjMpO1xuICAgIGMgKz0gKGQyID4+PiAxMyk7IGQyICY9IDB4MWZmZjtcblxuICAgIGQzID0gYztcbiAgICBkMyArPSBoMCAqIHIzO1xuICAgIGQzICs9IGgxICogcjI7XG4gICAgZDMgKz0gaDIgKiByMTtcbiAgICBkMyArPSBoMyAqIHIwO1xuICAgIGQzICs9IGg0ICogKDUgKiByOSk7XG4gICAgYyA9IChkMyA+Pj4gMTMpOyBkMyAmPSAweDFmZmY7XG4gICAgZDMgKz0gaDUgKiAoNSAqIHI4KTtcbiAgICBkMyArPSBoNiAqICg1ICogcjcpO1xuICAgIGQzICs9IGg3ICogKDUgKiByNik7XG4gICAgZDMgKz0gaDggKiAoNSAqIHI1KTtcbiAgICBkMyArPSBoOSAqICg1ICogcjQpO1xuICAgIGMgKz0gKGQzID4+PiAxMyk7IGQzICY9IDB4MWZmZjtcblxuICAgIGQ0ID0gYztcbiAgICBkNCArPSBoMCAqIHI0O1xuICAgIGQ0ICs9IGgxICogcjM7XG4gICAgZDQgKz0gaDIgKiByMjtcbiAgICBkNCArPSBoMyAqIHIxO1xuICAgIGQ0ICs9IGg0ICogcjA7XG4gICAgYyA9IChkNCA+Pj4gMTMpOyBkNCAmPSAweDFmZmY7XG4gICAgZDQgKz0gaDUgKiAoNSAqIHI5KTtcbiAgICBkNCArPSBoNiAqICg1ICogcjgpO1xuICAgIGQ0ICs9IGg3ICogKDUgKiByNyk7XG4gICAgZDQgKz0gaDggKiAoNSAqIHI2KTtcbiAgICBkNCArPSBoOSAqICg1ICogcjUpO1xuICAgIGMgKz0gKGQ0ID4+PiAxMyk7IGQ0ICY9IDB4MWZmZjtcblxuICAgIGQ1ID0gYztcbiAgICBkNSArPSBoMCAqIHI1O1xuICAgIGQ1ICs9IGgxICogcjQ7XG4gICAgZDUgKz0gaDIgKiByMztcbiAgICBkNSArPSBoMyAqIHIyO1xuICAgIGQ1ICs9IGg0ICogcjE7XG4gICAgYyA9IChkNSA+Pj4gMTMpOyBkNSAmPSAweDFmZmY7XG4gICAgZDUgKz0gaDUgKiByMDtcbiAgICBkNSArPSBoNiAqICg1ICogcjkpO1xuICAgIGQ1ICs9IGg3ICogKDUgKiByOCk7XG4gICAgZDUgKz0gaDggKiAoNSAqIHI3KTtcbiAgICBkNSArPSBoOSAqICg1ICogcjYpO1xuICAgIGMgKz0gKGQ1ID4+PiAxMyk7IGQ1ICY9IDB4MWZmZjtcblxuICAgIGQ2ID0gYztcbiAgICBkNiArPSBoMCAqIHI2O1xuICAgIGQ2ICs9IGgxICogcjU7XG4gICAgZDYgKz0gaDIgKiByNDtcbiAgICBkNiArPSBoMyAqIHIzO1xuICAgIGQ2ICs9IGg0ICogcjI7XG4gICAgYyA9IChkNiA+Pj4gMTMpOyBkNiAmPSAweDFmZmY7XG4gICAgZDYgKz0gaDUgKiByMTtcbiAgICBkNiArPSBoNiAqIHIwO1xuICAgIGQ2ICs9IGg3ICogKDUgKiByOSk7XG4gICAgZDYgKz0gaDggKiAoNSAqIHI4KTtcbiAgICBkNiArPSBoOSAqICg1ICogcjcpO1xuICAgIGMgKz0gKGQ2ID4+PiAxMyk7IGQ2ICY9IDB4MWZmZjtcblxuICAgIGQ3ID0gYztcbiAgICBkNyArPSBoMCAqIHI3O1xuICAgIGQ3ICs9IGgxICogcjY7XG4gICAgZDcgKz0gaDIgKiByNTtcbiAgICBkNyArPSBoMyAqIHI0O1xuICAgIGQ3ICs9IGg0ICogcjM7XG4gICAgYyA9IChkNyA+Pj4gMTMpOyBkNyAmPSAweDFmZmY7XG4gICAgZDcgKz0gaDUgKiByMjtcbiAgICBkNyArPSBoNiAqIHIxO1xuICAgIGQ3ICs9IGg3ICogcjA7XG4gICAgZDcgKz0gaDggKiAoNSAqIHI5KTtcbiAgICBkNyArPSBoOSAqICg1ICogcjgpO1xuICAgIGMgKz0gKGQ3ID4+PiAxMyk7IGQ3ICY9IDB4MWZmZjtcblxuICAgIGQ4ID0gYztcbiAgICBkOCArPSBoMCAqIHI4O1xuICAgIGQ4ICs9IGgxICogcjc7XG4gICAgZDggKz0gaDIgKiByNjtcbiAgICBkOCArPSBoMyAqIHI1O1xuICAgIGQ4ICs9IGg0ICogcjQ7XG4gICAgYyA9IChkOCA+Pj4gMTMpOyBkOCAmPSAweDFmZmY7XG4gICAgZDggKz0gaDUgKiByMztcbiAgICBkOCArPSBoNiAqIHIyO1xuICAgIGQ4ICs9IGg3ICogcjE7XG4gICAgZDggKz0gaDggKiByMDtcbiAgICBkOCArPSBoOSAqICg1ICogcjkpO1xuICAgIGMgKz0gKGQ4ID4+PiAxMyk7IGQ4ICY9IDB4MWZmZjtcblxuICAgIGQ5ID0gYztcbiAgICBkOSArPSBoMCAqIHI5O1xuICAgIGQ5ICs9IGgxICogcjg7XG4gICAgZDkgKz0gaDIgKiByNztcbiAgICBkOSArPSBoMyAqIHI2O1xuICAgIGQ5ICs9IGg0ICogcjU7XG4gICAgYyA9IChkOSA+Pj4gMTMpOyBkOSAmPSAweDFmZmY7XG4gICAgZDkgKz0gaDUgKiByNDtcbiAgICBkOSArPSBoNiAqIHIzO1xuICAgIGQ5ICs9IGg3ICogcjI7XG4gICAgZDkgKz0gaDggKiByMTtcbiAgICBkOSArPSBoOSAqIHIwO1xuICAgIGMgKz0gKGQ5ID4+PiAxMyk7IGQ5ICY9IDB4MWZmZjtcblxuICAgIGMgPSAoKChjIDw8IDIpICsgYykpIHwgMDtcbiAgICBjID0gKGMgKyBkMCkgfCAwO1xuICAgIGQwID0gYyAmIDB4MWZmZjtcbiAgICBjID0gKGMgPj4+IDEzKTtcbiAgICBkMSArPSBjO1xuXG4gICAgaDAgPSBkMDtcbiAgICBoMSA9IGQxO1xuICAgIGgyID0gZDI7XG4gICAgaDMgPSBkMztcbiAgICBoNCA9IGQ0O1xuICAgIGg1ID0gZDU7XG4gICAgaDYgPSBkNjtcbiAgICBoNyA9IGQ3O1xuICAgIGg4ID0gZDg7XG4gICAgaDkgPSBkOTtcblxuICAgIG1wb3MgKz0gMTY7XG4gICAgYnl0ZXMgLT0gMTY7XG4gIH1cbiAgdGhpcy5oWzBdID0gaDA7XG4gIHRoaXMuaFsxXSA9IGgxO1xuICB0aGlzLmhbMl0gPSBoMjtcbiAgdGhpcy5oWzNdID0gaDM7XG4gIHRoaXMuaFs0XSA9IGg0O1xuICB0aGlzLmhbNV0gPSBoNTtcbiAgdGhpcy5oWzZdID0gaDY7XG4gIHRoaXMuaFs3XSA9IGg3O1xuICB0aGlzLmhbOF0gPSBoODtcbiAgdGhpcy5oWzldID0gaDk7XG59O1xuXG5wb2x5MTMwNS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24obWFjLCBtYWNwb3MpIHtcbiAgdmFyIGcgPSBuZXcgVWludDE2QXJyYXkoMTApO1xuICB2YXIgYywgbWFzaywgZiwgaTtcblxuICBpZiAodGhpcy5sZWZ0b3Zlcikge1xuICAgIGkgPSB0aGlzLmxlZnRvdmVyO1xuICAgIHRoaXMuYnVmZmVyW2krK10gPSAxO1xuICAgIGZvciAoOyBpIDwgMTY7IGkrKykgdGhpcy5idWZmZXJbaV0gPSAwO1xuICAgIHRoaXMuZmluID0gMTtcbiAgICB0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwgMCwgMTYpO1xuICB9XG5cbiAgYyA9IHRoaXMuaFsxXSA+Pj4gMTM7XG4gIHRoaXMuaFsxXSAmPSAweDFmZmY7XG4gIGZvciAoaSA9IDI7IGkgPCAxMDsgaSsrKSB7XG4gICAgdGhpcy5oW2ldICs9IGM7XG4gICAgYyA9IHRoaXMuaFtpXSA+Pj4gMTM7XG4gICAgdGhpcy5oW2ldICY9IDB4MWZmZjtcbiAgfVxuICB0aGlzLmhbMF0gKz0gKGMgKiA1KTtcbiAgYyA9IHRoaXMuaFswXSA+Pj4gMTM7XG4gIHRoaXMuaFswXSAmPSAweDFmZmY7XG4gIHRoaXMuaFsxXSArPSBjO1xuICBjID0gdGhpcy5oWzFdID4+PiAxMztcbiAgdGhpcy5oWzFdICY9IDB4MWZmZjtcbiAgdGhpcy5oWzJdICs9IGM7XG5cbiAgZ1swXSA9IHRoaXMuaFswXSArIDU7XG4gIGMgPSBnWzBdID4+PiAxMztcbiAgZ1swXSAmPSAweDFmZmY7XG4gIGZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgZ1tpXSA9IHRoaXMuaFtpXSArIGM7XG4gICAgYyA9IGdbaV0gPj4+IDEzO1xuICAgIGdbaV0gJj0gMHgxZmZmO1xuICB9XG4gIGdbOV0gLT0gKDEgPDwgMTMpO1xuXG4gIG1hc2sgPSAoYyBeIDEpIC0gMTtcbiAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIGdbaV0gJj0gbWFzaztcbiAgbWFzayA9IH5tYXNrO1xuICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgdGhpcy5oW2ldID0gKHRoaXMuaFtpXSAmIG1hc2spIHwgZ1tpXTtcblxuICB0aGlzLmhbMF0gPSAoKHRoaXMuaFswXSAgICAgICApIHwgKHRoaXMuaFsxXSA8PCAxMykgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFsxXSA9ICgodGhpcy5oWzFdID4+PiAgMykgfCAodGhpcy5oWzJdIDw8IDEwKSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzJdID0gKCh0aGlzLmhbMl0gPj4+ICA2KSB8ICh0aGlzLmhbM10gPDwgIDcpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbM10gPSAoKHRoaXMuaFszXSA+Pj4gIDkpIHwgKHRoaXMuaFs0XSA8PCAgNCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs0XSA9ICgodGhpcy5oWzRdID4+PiAxMikgfCAodGhpcy5oWzVdIDw8ICAxKSB8ICh0aGlzLmhbNl0gPDwgMTQpKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzVdID0gKCh0aGlzLmhbNl0gPj4+ICAyKSB8ICh0aGlzLmhbN10gPDwgMTEpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbNl0gPSAoKHRoaXMuaFs3XSA+Pj4gIDUpIHwgKHRoaXMuaFs4XSA8PCAgOCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs3XSA9ICgodGhpcy5oWzhdID4+PiAgOCkgfCAodGhpcy5oWzldIDw8ICA1KSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcblxuICBmID0gdGhpcy5oWzBdICsgdGhpcy5wYWRbMF07XG4gIHRoaXMuaFswXSA9IGYgJiAweGZmZmY7XG4gIGZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHtcbiAgICBmID0gKCgodGhpcy5oW2ldICsgdGhpcy5wYWRbaV0pIHwgMCkgKyAoZiA+Pj4gMTYpKSB8IDA7XG4gICAgdGhpcy5oW2ldID0gZiAmIDB4ZmZmZjtcbiAgfVxuXG4gIG1hY1ttYWNwb3MrIDBdID0gKHRoaXMuaFswXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyAxXSA9ICh0aGlzLmhbMF0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgMl0gPSAodGhpcy5oWzFdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDNdID0gKHRoaXMuaFsxXSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA0XSA9ICh0aGlzLmhbMl0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgNV0gPSAodGhpcy5oWzJdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDZdID0gKHRoaXMuaFszXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA3XSA9ICh0aGlzLmhbM10gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgOF0gPSAodGhpcy5oWzRdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDldID0gKHRoaXMuaFs0XSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEwXSA9ICh0aGlzLmhbNV0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysxMV0gPSAodGhpcy5oWzVdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTJdID0gKHRoaXMuaFs2XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEzXSA9ICh0aGlzLmhbNl0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysxNF0gPSAodGhpcy5oWzddID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTVdID0gKHRoaXMuaFs3XSA+Pj4gOCkgJiAweGZmO1xufTtcblxucG9seTEzMDUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKG0sIG1wb3MsIGJ5dGVzKSB7XG4gIHZhciBpLCB3YW50O1xuXG4gIGlmICh0aGlzLmxlZnRvdmVyKSB7XG4gICAgd2FudCA9ICgxNiAtIHRoaXMubGVmdG92ZXIpO1xuICAgIGlmICh3YW50ID4gYnl0ZXMpXG4gICAgICB3YW50ID0gYnl0ZXM7XG4gICAgZm9yIChpID0gMDsgaSA8IHdhbnQ7IGkrKylcbiAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVmdG92ZXIgKyBpXSA9IG1bbXBvcytpXTtcbiAgICBieXRlcyAtPSB3YW50O1xuICAgIG1wb3MgKz0gd2FudDtcbiAgICB0aGlzLmxlZnRvdmVyICs9IHdhbnQ7XG4gICAgaWYgKHRoaXMubGVmdG92ZXIgPCAxNilcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwgMCwgMTYpO1xuICAgIHRoaXMubGVmdG92ZXIgPSAwO1xuICB9XG5cbiAgaWYgKGJ5dGVzID49IDE2KSB7XG4gICAgd2FudCA9IGJ5dGVzIC0gKGJ5dGVzICUgMTYpO1xuICAgIHRoaXMuYmxvY2tzKG0sIG1wb3MsIHdhbnQpO1xuICAgIG1wb3MgKz0gd2FudDtcbiAgICBieXRlcyAtPSB3YW50O1xuICB9XG5cbiAgaWYgKGJ5dGVzKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyspXG4gICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyICsgaV0gPSBtW21wb3MraV07XG4gICAgdGhpcy5sZWZ0b3ZlciArPSBieXRlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gY3J5cHRvX29uZXRpbWVhdXRoKG91dCwgb3V0cG9zLCBtLCBtcG9zLCBuLCBrKSB7XG4gIHZhciBzID0gbmV3IHBvbHkxMzA1KGspO1xuICBzLnVwZGF0ZShtLCBtcG9zLCBuKTtcbiAgcy5maW5pc2gob3V0LCBvdXRwb3MpO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeShoLCBocG9zLCBtLCBtcG9zLCBuLCBrKSB7XG4gIHZhciB4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBjcnlwdG9fb25ldGltZWF1dGgoeCwwLG0sbXBvcyxuLGspO1xuICByZXR1cm4gY3J5cHRvX3ZlcmlmeV8xNihoLGhwb3MseCwwKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NlY3JldGJveChjLG0sZCxuLGspIHtcbiAgdmFyIGk7XG4gIGlmIChkIDwgMzIpIHJldHVybiAtMTtcbiAgY3J5cHRvX3N0cmVhbV94b3IoYywwLG0sMCxkLG4sayk7XG4gIGNyeXB0b19vbmV0aW1lYXV0aChjLCAxNiwgYywgMzIsIGQgLSAzMiwgYyk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSBjW2ldID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3hfb3BlbihtLGMsZCxuLGspIHtcbiAgdmFyIGk7XG4gIHZhciB4ID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBpZiAoZCA8IDMyKSByZXR1cm4gLTE7XG4gIGNyeXB0b19zdHJlYW0oeCwwLDMyLG4sayk7XG4gIGlmIChjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5KGMsIDE2LGMsIDMyLGQgLSAzMix4KSAhPT0gMCkgcmV0dXJuIC0xO1xuICBjcnlwdG9fc3RyZWFtX3hvcihtLDAsYywwLGQsbixrKTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIG1baV0gPSAwO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gc2V0MjU1MTkociwgYSkge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHJbaV0gPSBhW2ldfDA7XG59XG5cbmZ1bmN0aW9uIGNhcjI1NTE5KG8pIHtcbiAgdmFyIGksIHYsIGMgPSAxO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIHYgPSBvW2ldICsgYyArIDY1NTM1O1xuICAgIGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7XG4gICAgb1tpXSA9IHYgLSBjICogNjU1MzY7XG4gIH1cbiAgb1swXSArPSBjLTEgKyAzNyAqIChjLTEpO1xufVxuXG5mdW5jdGlvbiBzZWwyNTUxOShwLCBxLCBiKSB7XG4gIHZhciB0LCBjID0gfihiLTEpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB0ID0gYyAmIChwW2ldIF4gcVtpXSk7XG4gICAgcFtpXSBePSB0O1xuICAgIHFbaV0gXj0gdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWNrMjU1MTkobywgbikge1xuICB2YXIgaSwgaiwgYjtcbiAgdmFyIG0gPSBnZigpLCB0ID0gZ2YoKTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHRbaV0gPSBuW2ldO1xuICBjYXIyNTUxOSh0KTtcbiAgY2FyMjU1MTkodCk7XG4gIGNhcjI1NTE5KHQpO1xuICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7XG4gICAgbVswXSA9IHRbMF0gLSAweGZmZWQ7XG4gICAgZm9yIChpID0gMTsgaSA8IDE1OyBpKyspIHtcbiAgICAgIG1baV0gPSB0W2ldIC0gMHhmZmZmIC0gKChtW2ktMV0+PjE2KSAmIDEpO1xuICAgICAgbVtpLTFdICY9IDB4ZmZmZjtcbiAgICB9XG4gICAgbVsxNV0gPSB0WzE1XSAtIDB4N2ZmZiAtICgobVsxNF0+PjE2KSAmIDEpO1xuICAgIGIgPSAobVsxNV0+PjE2KSAmIDE7XG4gICAgbVsxNF0gJj0gMHhmZmZmO1xuICAgIHNlbDI1NTE5KHQsIG0sIDEtYik7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBvWzIqaV0gPSB0W2ldICYgMHhmZjtcbiAgICBvWzIqaSsxXSA9IHRbaV0+Pjg7XG4gIH1cbn1cblxuZnVuY3Rpb24gbmVxMjU1MTkoYSwgYikge1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KDMyKSwgZCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgcGFjazI1NTE5KGMsIGEpO1xuICBwYWNrMjU1MTkoZCwgYik7XG4gIHJldHVybiBjcnlwdG9fdmVyaWZ5XzMyKGMsIDAsIGQsIDApO1xufVxuXG5mdW5jdGlvbiBwYXIyNTUxOShhKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBwYWNrMjU1MTkoZCwgYSk7XG4gIHJldHVybiBkWzBdICYgMTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrMjU1MTkobywgbikge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIG9baV0gPSBuWzIqaV0gKyAoblsyKmkrMV0gPDwgOCk7XG4gIG9bMTVdICY9IDB4N2ZmZjtcbn1cblxuZnVuY3Rpb24gQShvLCBhLCBiKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgb1tpXSA9IGFbaV0gKyBiW2ldO1xufVxuXG5mdW5jdGlvbiBaKG8sIGEsIGIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSBvW2ldID0gYVtpXSAtIGJbaV07XG59XG5cbmZ1bmN0aW9uIE0obywgYSwgYikge1xuICB2YXIgdiwgYyxcbiAgICAgdDAgPSAwLCAgdDEgPSAwLCAgdDIgPSAwLCAgdDMgPSAwLCAgdDQgPSAwLCAgdDUgPSAwLCAgdDYgPSAwLCAgdDcgPSAwLFxuICAgICB0OCA9IDAsICB0OSA9IDAsIHQxMCA9IDAsIHQxMSA9IDAsIHQxMiA9IDAsIHQxMyA9IDAsIHQxNCA9IDAsIHQxNSA9IDAsXG4gICAgdDE2ID0gMCwgdDE3ID0gMCwgdDE4ID0gMCwgdDE5ID0gMCwgdDIwID0gMCwgdDIxID0gMCwgdDIyID0gMCwgdDIzID0gMCxcbiAgICB0MjQgPSAwLCB0MjUgPSAwLCB0MjYgPSAwLCB0MjcgPSAwLCB0MjggPSAwLCB0MjkgPSAwLCB0MzAgPSAwLFxuICAgIGIwID0gYlswXSxcbiAgICBiMSA9IGJbMV0sXG4gICAgYjIgPSBiWzJdLFxuICAgIGIzID0gYlszXSxcbiAgICBiNCA9IGJbNF0sXG4gICAgYjUgPSBiWzVdLFxuICAgIGI2ID0gYls2XSxcbiAgICBiNyA9IGJbN10sXG4gICAgYjggPSBiWzhdLFxuICAgIGI5ID0gYls5XSxcbiAgICBiMTAgPSBiWzEwXSxcbiAgICBiMTEgPSBiWzExXSxcbiAgICBiMTIgPSBiWzEyXSxcbiAgICBiMTMgPSBiWzEzXSxcbiAgICBiMTQgPSBiWzE0XSxcbiAgICBiMTUgPSBiWzE1XTtcblxuICB2ID0gYVswXTtcbiAgdDAgKz0gdiAqIGIwO1xuICB0MSArPSB2ICogYjE7XG4gIHQyICs9IHYgKiBiMjtcbiAgdDMgKz0gdiAqIGIzO1xuICB0NCArPSB2ICogYjQ7XG4gIHQ1ICs9IHYgKiBiNTtcbiAgdDYgKz0gdiAqIGI2O1xuICB0NyArPSB2ICogYjc7XG4gIHQ4ICs9IHYgKiBiODtcbiAgdDkgKz0gdiAqIGI5O1xuICB0MTAgKz0gdiAqIGIxMDtcbiAgdDExICs9IHYgKiBiMTE7XG4gIHQxMiArPSB2ICogYjEyO1xuICB0MTMgKz0gdiAqIGIxMztcbiAgdDE0ICs9IHYgKiBiMTQ7XG4gIHQxNSArPSB2ICogYjE1O1xuICB2ID0gYVsxXTtcbiAgdDEgKz0gdiAqIGIwO1xuICB0MiArPSB2ICogYjE7XG4gIHQzICs9IHYgKiBiMjtcbiAgdDQgKz0gdiAqIGIzO1xuICB0NSArPSB2ICogYjQ7XG4gIHQ2ICs9IHYgKiBiNTtcbiAgdDcgKz0gdiAqIGI2O1xuICB0OCArPSB2ICogYjc7XG4gIHQ5ICs9IHYgKiBiODtcbiAgdDEwICs9IHYgKiBiOTtcbiAgdDExICs9IHYgKiBiMTA7XG4gIHQxMiArPSB2ICogYjExO1xuICB0MTMgKz0gdiAqIGIxMjtcbiAgdDE0ICs9IHYgKiBiMTM7XG4gIHQxNSArPSB2ICogYjE0O1xuICB0MTYgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMl07XG4gIHQyICs9IHYgKiBiMDtcbiAgdDMgKz0gdiAqIGIxO1xuICB0NCArPSB2ICogYjI7XG4gIHQ1ICs9IHYgKiBiMztcbiAgdDYgKz0gdiAqIGI0O1xuICB0NyArPSB2ICogYjU7XG4gIHQ4ICs9IHYgKiBiNjtcbiAgdDkgKz0gdiAqIGI3O1xuICB0MTAgKz0gdiAqIGI4O1xuICB0MTEgKz0gdiAqIGI5O1xuICB0MTIgKz0gdiAqIGIxMDtcbiAgdDEzICs9IHYgKiBiMTE7XG4gIHQxNCArPSB2ICogYjEyO1xuICB0MTUgKz0gdiAqIGIxMztcbiAgdDE2ICs9IHYgKiBiMTQ7XG4gIHQxNyArPSB2ICogYjE1O1xuICB2ID0gYVszXTtcbiAgdDMgKz0gdiAqIGIwO1xuICB0NCArPSB2ICogYjE7XG4gIHQ1ICs9IHYgKiBiMjtcbiAgdDYgKz0gdiAqIGIzO1xuICB0NyArPSB2ICogYjQ7XG4gIHQ4ICs9IHYgKiBiNTtcbiAgdDkgKz0gdiAqIGI2O1xuICB0MTAgKz0gdiAqIGI3O1xuICB0MTEgKz0gdiAqIGI4O1xuICB0MTIgKz0gdiAqIGI5O1xuICB0MTMgKz0gdiAqIGIxMDtcbiAgdDE0ICs9IHYgKiBiMTE7XG4gIHQxNSArPSB2ICogYjEyO1xuICB0MTYgKz0gdiAqIGIxMztcbiAgdDE3ICs9IHYgKiBiMTQ7XG4gIHQxOCArPSB2ICogYjE1O1xuICB2ID0gYVs0XTtcbiAgdDQgKz0gdiAqIGIwO1xuICB0NSArPSB2ICogYjE7XG4gIHQ2ICs9IHYgKiBiMjtcbiAgdDcgKz0gdiAqIGIzO1xuICB0OCArPSB2ICogYjQ7XG4gIHQ5ICs9IHYgKiBiNTtcbiAgdDEwICs9IHYgKiBiNjtcbiAgdDExICs9IHYgKiBiNztcbiAgdDEyICs9IHYgKiBiODtcbiAgdDEzICs9IHYgKiBiOTtcbiAgdDE0ICs9IHYgKiBiMTA7XG4gIHQxNSArPSB2ICogYjExO1xuICB0MTYgKz0gdiAqIGIxMjtcbiAgdDE3ICs9IHYgKiBiMTM7XG4gIHQxOCArPSB2ICogYjE0O1xuICB0MTkgKz0gdiAqIGIxNTtcbiAgdiA9IGFbNV07XG4gIHQ1ICs9IHYgKiBiMDtcbiAgdDYgKz0gdiAqIGIxO1xuICB0NyArPSB2ICogYjI7XG4gIHQ4ICs9IHYgKiBiMztcbiAgdDkgKz0gdiAqIGI0O1xuICB0MTAgKz0gdiAqIGI1O1xuICB0MTEgKz0gdiAqIGI2O1xuICB0MTIgKz0gdiAqIGI3O1xuICB0MTMgKz0gdiAqIGI4O1xuICB0MTQgKz0gdiAqIGI5O1xuICB0MTUgKz0gdiAqIGIxMDtcbiAgdDE2ICs9IHYgKiBiMTE7XG4gIHQxNyArPSB2ICogYjEyO1xuICB0MTggKz0gdiAqIGIxMztcbiAgdDE5ICs9IHYgKiBiMTQ7XG4gIHQyMCArPSB2ICogYjE1O1xuICB2ID0gYVs2XTtcbiAgdDYgKz0gdiAqIGIwO1xuICB0NyArPSB2ICogYjE7XG4gIHQ4ICs9IHYgKiBiMjtcbiAgdDkgKz0gdiAqIGIzO1xuICB0MTAgKz0gdiAqIGI0O1xuICB0MTEgKz0gdiAqIGI1O1xuICB0MTIgKz0gdiAqIGI2O1xuICB0MTMgKz0gdiAqIGI3O1xuICB0MTQgKz0gdiAqIGI4O1xuICB0MTUgKz0gdiAqIGI5O1xuICB0MTYgKz0gdiAqIGIxMDtcbiAgdDE3ICs9IHYgKiBiMTE7XG4gIHQxOCArPSB2ICogYjEyO1xuICB0MTkgKz0gdiAqIGIxMztcbiAgdDIwICs9IHYgKiBiMTQ7XG4gIHQyMSArPSB2ICogYjE1O1xuICB2ID0gYVs3XTtcbiAgdDcgKz0gdiAqIGIwO1xuICB0OCArPSB2ICogYjE7XG4gIHQ5ICs9IHYgKiBiMjtcbiAgdDEwICs9IHYgKiBiMztcbiAgdDExICs9IHYgKiBiNDtcbiAgdDEyICs9IHYgKiBiNTtcbiAgdDEzICs9IHYgKiBiNjtcbiAgdDE0ICs9IHYgKiBiNztcbiAgdDE1ICs9IHYgKiBiODtcbiAgdDE2ICs9IHYgKiBiOTtcbiAgdDE3ICs9IHYgKiBiMTA7XG4gIHQxOCArPSB2ICogYjExO1xuICB0MTkgKz0gdiAqIGIxMjtcbiAgdDIwICs9IHYgKiBiMTM7XG4gIHQyMSArPSB2ICogYjE0O1xuICB0MjIgKz0gdiAqIGIxNTtcbiAgdiA9IGFbOF07XG4gIHQ4ICs9IHYgKiBiMDtcbiAgdDkgKz0gdiAqIGIxO1xuICB0MTAgKz0gdiAqIGIyO1xuICB0MTEgKz0gdiAqIGIzO1xuICB0MTIgKz0gdiAqIGI0O1xuICB0MTMgKz0gdiAqIGI1O1xuICB0MTQgKz0gdiAqIGI2O1xuICB0MTUgKz0gdiAqIGI3O1xuICB0MTYgKz0gdiAqIGI4O1xuICB0MTcgKz0gdiAqIGI5O1xuICB0MTggKz0gdiAqIGIxMDtcbiAgdDE5ICs9IHYgKiBiMTE7XG4gIHQyMCArPSB2ICogYjEyO1xuICB0MjEgKz0gdiAqIGIxMztcbiAgdDIyICs9IHYgKiBiMTQ7XG4gIHQyMyArPSB2ICogYjE1O1xuICB2ID0gYVs5XTtcbiAgdDkgKz0gdiAqIGIwO1xuICB0MTAgKz0gdiAqIGIxO1xuICB0MTEgKz0gdiAqIGIyO1xuICB0MTIgKz0gdiAqIGIzO1xuICB0MTMgKz0gdiAqIGI0O1xuICB0MTQgKz0gdiAqIGI1O1xuICB0MTUgKz0gdiAqIGI2O1xuICB0MTYgKz0gdiAqIGI3O1xuICB0MTcgKz0gdiAqIGI4O1xuICB0MTggKz0gdiAqIGI5O1xuICB0MTkgKz0gdiAqIGIxMDtcbiAgdDIwICs9IHYgKiBiMTE7XG4gIHQyMSArPSB2ICogYjEyO1xuICB0MjIgKz0gdiAqIGIxMztcbiAgdDIzICs9IHYgKiBiMTQ7XG4gIHQyNCArPSB2ICogYjE1O1xuICB2ID0gYVsxMF07XG4gIHQxMCArPSB2ICogYjA7XG4gIHQxMSArPSB2ICogYjE7XG4gIHQxMiArPSB2ICogYjI7XG4gIHQxMyArPSB2ICogYjM7XG4gIHQxNCArPSB2ICogYjQ7XG4gIHQxNSArPSB2ICogYjU7XG4gIHQxNiArPSB2ICogYjY7XG4gIHQxNyArPSB2ICogYjc7XG4gIHQxOCArPSB2ICogYjg7XG4gIHQxOSArPSB2ICogYjk7XG4gIHQyMCArPSB2ICogYjEwO1xuICB0MjEgKz0gdiAqIGIxMTtcbiAgdDIyICs9IHYgKiBiMTI7XG4gIHQyMyArPSB2ICogYjEzO1xuICB0MjQgKz0gdiAqIGIxNDtcbiAgdDI1ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzExXTtcbiAgdDExICs9IHYgKiBiMDtcbiAgdDEyICs9IHYgKiBiMTtcbiAgdDEzICs9IHYgKiBiMjtcbiAgdDE0ICs9IHYgKiBiMztcbiAgdDE1ICs9IHYgKiBiNDtcbiAgdDE2ICs9IHYgKiBiNTtcbiAgdDE3ICs9IHYgKiBiNjtcbiAgdDE4ICs9IHYgKiBiNztcbiAgdDE5ICs9IHYgKiBiODtcbiAgdDIwICs9IHYgKiBiOTtcbiAgdDIxICs9IHYgKiBiMTA7XG4gIHQyMiArPSB2ICogYjExO1xuICB0MjMgKz0gdiAqIGIxMjtcbiAgdDI0ICs9IHYgKiBiMTM7XG4gIHQyNSArPSB2ICogYjE0O1xuICB0MjYgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTJdO1xuICB0MTIgKz0gdiAqIGIwO1xuICB0MTMgKz0gdiAqIGIxO1xuICB0MTQgKz0gdiAqIGIyO1xuICB0MTUgKz0gdiAqIGIzO1xuICB0MTYgKz0gdiAqIGI0O1xuICB0MTcgKz0gdiAqIGI1O1xuICB0MTggKz0gdiAqIGI2O1xuICB0MTkgKz0gdiAqIGI3O1xuICB0MjAgKz0gdiAqIGI4O1xuICB0MjEgKz0gdiAqIGI5O1xuICB0MjIgKz0gdiAqIGIxMDtcbiAgdDIzICs9IHYgKiBiMTE7XG4gIHQyNCArPSB2ICogYjEyO1xuICB0MjUgKz0gdiAqIGIxMztcbiAgdDI2ICs9IHYgKiBiMTQ7XG4gIHQyNyArPSB2ICogYjE1O1xuICB2ID0gYVsxM107XG4gIHQxMyArPSB2ICogYjA7XG4gIHQxNCArPSB2ICogYjE7XG4gIHQxNSArPSB2ICogYjI7XG4gIHQxNiArPSB2ICogYjM7XG4gIHQxNyArPSB2ICogYjQ7XG4gIHQxOCArPSB2ICogYjU7XG4gIHQxOSArPSB2ICogYjY7XG4gIHQyMCArPSB2ICogYjc7XG4gIHQyMSArPSB2ICogYjg7XG4gIHQyMiArPSB2ICogYjk7XG4gIHQyMyArPSB2ICogYjEwO1xuICB0MjQgKz0gdiAqIGIxMTtcbiAgdDI1ICs9IHYgKiBiMTI7XG4gIHQyNiArPSB2ICogYjEzO1xuICB0MjcgKz0gdiAqIGIxNDtcbiAgdDI4ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzE0XTtcbiAgdDE0ICs9IHYgKiBiMDtcbiAgdDE1ICs9IHYgKiBiMTtcbiAgdDE2ICs9IHYgKiBiMjtcbiAgdDE3ICs9IHYgKiBiMztcbiAgdDE4ICs9IHYgKiBiNDtcbiAgdDE5ICs9IHYgKiBiNTtcbiAgdDIwICs9IHYgKiBiNjtcbiAgdDIxICs9IHYgKiBiNztcbiAgdDIyICs9IHYgKiBiODtcbiAgdDIzICs9IHYgKiBiOTtcbiAgdDI0ICs9IHYgKiBiMTA7XG4gIHQyNSArPSB2ICogYjExO1xuICB0MjYgKz0gdiAqIGIxMjtcbiAgdDI3ICs9IHYgKiBiMTM7XG4gIHQyOCArPSB2ICogYjE0O1xuICB0MjkgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTVdO1xuICB0MTUgKz0gdiAqIGIwO1xuICB0MTYgKz0gdiAqIGIxO1xuICB0MTcgKz0gdiAqIGIyO1xuICB0MTggKz0gdiAqIGIzO1xuICB0MTkgKz0gdiAqIGI0O1xuICB0MjAgKz0gdiAqIGI1O1xuICB0MjEgKz0gdiAqIGI2O1xuICB0MjIgKz0gdiAqIGI3O1xuICB0MjMgKz0gdiAqIGI4O1xuICB0MjQgKz0gdiAqIGI5O1xuICB0MjUgKz0gdiAqIGIxMDtcbiAgdDI2ICs9IHYgKiBiMTE7XG4gIHQyNyArPSB2ICogYjEyO1xuICB0MjggKz0gdiAqIGIxMztcbiAgdDI5ICs9IHYgKiBiMTQ7XG4gIHQzMCArPSB2ICogYjE1O1xuXG4gIHQwICArPSAzOCAqIHQxNjtcbiAgdDEgICs9IDM4ICogdDE3O1xuICB0MiAgKz0gMzggKiB0MTg7XG4gIHQzICArPSAzOCAqIHQxOTtcbiAgdDQgICs9IDM4ICogdDIwO1xuICB0NSAgKz0gMzggKiB0MjE7XG4gIHQ2ICArPSAzOCAqIHQyMjtcbiAgdDcgICs9IDM4ICogdDIzO1xuICB0OCAgKz0gMzggKiB0MjQ7XG4gIHQ5ICArPSAzOCAqIHQyNTtcbiAgdDEwICs9IDM4ICogdDI2O1xuICB0MTEgKz0gMzggKiB0Mjc7XG4gIHQxMiArPSAzOCAqIHQyODtcbiAgdDEzICs9IDM4ICogdDI5O1xuICB0MTQgKz0gMzggKiB0MzA7XG4gIC8vIHQxNSBsZWZ0IGFzIGlzXG5cbiAgLy8gZmlyc3QgY2FyXG4gIGMgPSAxO1xuICB2ID0gIHQwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQxICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDUgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ2ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDYgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ3ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDcgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ4ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDggPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ5ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDkgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDExICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTUgPSB2IC0gYyAqIDY1NTM2O1xuICB0MCArPSBjLTEgKyAzNyAqIChjLTEpO1xuXG4gIC8vIHNlY29uZCBjYXJcbiAgYyA9IDE7XG4gIHYgPSAgdDAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDYgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDcgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDggKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDkgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNSA9IHYgLSBjICogNjU1MzY7XG4gIHQwICs9IGMtMSArIDM3ICogKGMtMSk7XG5cbiAgb1sgMF0gPSB0MDtcbiAgb1sgMV0gPSB0MTtcbiAgb1sgMl0gPSB0MjtcbiAgb1sgM10gPSB0MztcbiAgb1sgNF0gPSB0NDtcbiAgb1sgNV0gPSB0NTtcbiAgb1sgNl0gPSB0NjtcbiAgb1sgN10gPSB0NztcbiAgb1sgOF0gPSB0ODtcbiAgb1sgOV0gPSB0OTtcbiAgb1sxMF0gPSB0MTA7XG4gIG9bMTFdID0gdDExO1xuICBvWzEyXSA9IHQxMjtcbiAgb1sxM10gPSB0MTM7XG4gIG9bMTRdID0gdDE0O1xuICBvWzE1XSA9IHQxNTtcbn1cblxuZnVuY3Rpb24gUyhvLCBhKSB7XG4gIE0obywgYSwgYSk7XG59XG5cbmZ1bmN0aW9uIGludjI1NTE5KG8sIGkpIHtcbiAgdmFyIGMgPSBnZigpO1xuICB2YXIgYTtcbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIGNbYV0gPSBpW2FdO1xuICBmb3IgKGEgPSAyNTM7IGEgPj0gMDsgYS0tKSB7XG4gICAgUyhjLCBjKTtcbiAgICBpZihhICE9PSAyICYmIGEgIT09IDQpIE0oYywgYywgaSk7XG4gIH1cbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIG9bYV0gPSBjW2FdO1xufVxuXG5mdW5jdGlvbiBwb3cyNTIzKG8sIGkpIHtcbiAgdmFyIGMgPSBnZigpO1xuICB2YXIgYTtcbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIGNbYV0gPSBpW2FdO1xuICBmb3IgKGEgPSAyNTA7IGEgPj0gMDsgYS0tKSB7XG4gICAgICBTKGMsIGMpO1xuICAgICAgaWYoYSAhPT0gMSkgTShjLCBjLCBpKTtcbiAgfVxuICBmb3IgKGEgPSAwOyBhIDwgMTY7IGErKykgb1thXSA9IGNbYV07XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIHApIHtcbiAgdmFyIHogPSBuZXcgVWludDhBcnJheSgzMik7XG4gIHZhciB4ID0gbmV3IEZsb2F0NjRBcnJheSg4MCksIHIsIGk7XG4gIHZhciBhID0gZ2YoKSwgYiA9IGdmKCksIGMgPSBnZigpLFxuICAgICAgZCA9IGdmKCksIGUgPSBnZigpLCBmID0gZ2YoKTtcbiAgZm9yIChpID0gMDsgaSA8IDMxOyBpKyspIHpbaV0gPSBuW2ldO1xuICB6WzMxXT0oblszMV0mMTI3KXw2NDtcbiAgelswXSY9MjQ4O1xuICB1bnBhY2syNTUxOSh4LHApO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJbaV09eFtpXTtcbiAgICBkW2ldPWFbaV09Y1tpXT0wO1xuICB9XG4gIGFbMF09ZFswXT0xO1xuICBmb3IgKGk9MjU0OyBpPj0wOyAtLWkpIHtcbiAgICByPSh6W2k+Pj4zXT4+PihpJjcpKSYxO1xuICAgIHNlbDI1NTE5KGEsYixyKTtcbiAgICBzZWwyNTUxOShjLGQscik7XG4gICAgQShlLGEsYyk7XG4gICAgWihhLGEsYyk7XG4gICAgQShjLGIsZCk7XG4gICAgWihiLGIsZCk7XG4gICAgUyhkLGUpO1xuICAgIFMoZixhKTtcbiAgICBNKGEsYyxhKTtcbiAgICBNKGMsYixlKTtcbiAgICBBKGUsYSxjKTtcbiAgICBaKGEsYSxjKTtcbiAgICBTKGIsYSk7XG4gICAgWihjLGQsZik7XG4gICAgTShhLGMsXzEyMTY2NSk7XG4gICAgQShhLGEsZCk7XG4gICAgTShjLGMsYSk7XG4gICAgTShhLGQsZik7XG4gICAgTShkLGIseCk7XG4gICAgUyhiLGUpO1xuICAgIHNlbDI1NTE5KGEsYixyKTtcbiAgICBzZWwyNTUxOShjLGQscik7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB4W2krMTZdPWFbaV07XG4gICAgeFtpKzMyXT1jW2ldO1xuICAgIHhbaSs0OF09YltpXTtcbiAgICB4W2krNjRdPWRbaV07XG4gIH1cbiAgdmFyIHgzMiA9IHguc3ViYXJyYXkoMzIpO1xuICB2YXIgeDE2ID0geC5zdWJhcnJheSgxNik7XG4gIGludjI1NTE5KHgzMix4MzIpO1xuICBNKHgxNix4MTYseDMyKTtcbiAgcGFjazI1NTE5KHEseDE2KTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UocSwgbikge1xuICByZXR1cm4gY3J5cHRvX3NjYWxhcm11bHQocSwgbiwgXzkpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X2tleXBhaXIoeSwgeCkge1xuICByYW5kb21ieXRlcyh4LCAzMik7XG4gIHJldHVybiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHksIHgpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHksIHgpIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19zY2FsYXJtdWx0KHMsIHgsIHkpO1xuICByZXR1cm4gY3J5cHRvX2NvcmVfaHNhbHNhMjAoaywgXzAsIHMsIHNpZ21hKTtcbn1cblxudmFyIGNyeXB0b19ib3hfYWZ0ZXJubSA9IGNyeXB0b19zZWNyZXRib3g7XG52YXIgY3J5cHRvX2JveF9vcGVuX2FmdGVybm0gPSBjcnlwdG9fc2VjcmV0Ym94X29wZW47XG5cbmZ1bmN0aW9uIGNyeXB0b19ib3goYywgbSwgZCwgbiwgeSwgeCkge1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgY3J5cHRvX2JveF9iZWZvcmVubShrLCB5LCB4KTtcbiAgcmV0dXJuIGNyeXB0b19ib3hfYWZ0ZXJubShjLCBtLCBkLCBuLCBrKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9vcGVuKG0sIGMsIGQsIG4sIHksIHgpIHtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgeSwgeCk7XG4gIHJldHVybiBjcnlwdG9fYm94X29wZW5fYWZ0ZXJubShtLCBjLCBkLCBuLCBrKTtcbn1cblxudmFyIEsgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl07XG5cbmZ1bmN0aW9uIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgbSwgbikge1xuICB2YXIgd2ggPSBuZXcgSW50MzJBcnJheSgxNiksIHdsID0gbmV3IEludDMyQXJyYXkoMTYpLFxuICAgICAgYmgwLCBiaDEsIGJoMiwgYmgzLCBiaDQsIGJoNSwgYmg2LCBiaDcsXG4gICAgICBibDAsIGJsMSwgYmwyLCBibDMsIGJsNCwgYmw1LCBibDYsIGJsNyxcbiAgICAgIHRoLCB0bCwgaSwgaiwgaCwgbCwgYSwgYiwgYywgZDtcblxuICB2YXIgYWgwID0gaGhbMF0sXG4gICAgICBhaDEgPSBoaFsxXSxcbiAgICAgIGFoMiA9IGhoWzJdLFxuICAgICAgYWgzID0gaGhbM10sXG4gICAgICBhaDQgPSBoaFs0XSxcbiAgICAgIGFoNSA9IGhoWzVdLFxuICAgICAgYWg2ID0gaGhbNl0sXG4gICAgICBhaDcgPSBoaFs3XSxcblxuICAgICAgYWwwID0gaGxbMF0sXG4gICAgICBhbDEgPSBobFsxXSxcbiAgICAgIGFsMiA9IGhsWzJdLFxuICAgICAgYWwzID0gaGxbM10sXG4gICAgICBhbDQgPSBobFs0XSxcbiAgICAgIGFsNSA9IGhsWzVdLFxuICAgICAgYWw2ID0gaGxbNl0sXG4gICAgICBhbDcgPSBobFs3XTtcblxuICB2YXIgcG9zID0gMDtcbiAgd2hpbGUgKG4gPj0gMTI4KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGogPSA4ICogaSArIHBvcztcbiAgICAgIHdoW2ldID0gKG1baiswXSA8PCAyNCkgfCAobVtqKzFdIDw8IDE2KSB8IChtW2orMl0gPDwgOCkgfCBtW2orM107XG4gICAgICB3bFtpXSA9IChtW2orNF0gPDwgMjQpIHwgKG1bais1XSA8PCAxNikgfCAobVtqKzZdIDw8IDgpIHwgbVtqKzddO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgODA7IGkrKykge1xuICAgICAgYmgwID0gYWgwO1xuICAgICAgYmgxID0gYWgxO1xuICAgICAgYmgyID0gYWgyO1xuICAgICAgYmgzID0gYWgzO1xuICAgICAgYmg0ID0gYWg0O1xuICAgICAgYmg1ID0gYWg1O1xuICAgICAgYmg2ID0gYWg2O1xuICAgICAgYmg3ID0gYWg3O1xuXG4gICAgICBibDAgPSBhbDA7XG4gICAgICBibDEgPSBhbDE7XG4gICAgICBibDIgPSBhbDI7XG4gICAgICBibDMgPSBhbDM7XG4gICAgICBibDQgPSBhbDQ7XG4gICAgICBibDUgPSBhbDU7XG4gICAgICBibDYgPSBhbDY7XG4gICAgICBibDcgPSBhbDc7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IGFoNztcbiAgICAgIGwgPSBhbDc7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAvLyBTaWdtYTFcbiAgICAgIGggPSAoKGFoNCA+Pj4gMTQpIHwgKGFsNCA8PCAoMzItMTQpKSkgXiAoKGFoNCA+Pj4gMTgpIHwgKGFsNCA8PCAoMzItMTgpKSkgXiAoKGFsNCA+Pj4gKDQxLTMyKSkgfCAoYWg0IDw8ICgzMi0oNDEtMzIpKSkpO1xuICAgICAgbCA9ICgoYWw0ID4+PiAxNCkgfCAoYWg0IDw8ICgzMi0xNCkpKSBeICgoYWw0ID4+PiAxOCkgfCAoYWg0IDw8ICgzMi0xOCkpKSBeICgoYWg0ID4+PiAoNDEtMzIpKSB8IChhbDQgPDwgKDMyLSg0MS0zMikpKSk7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgLy8gQ2hcbiAgICAgIGggPSAoYWg0ICYgYWg1KSBeICh+YWg0ICYgYWg2KTtcbiAgICAgIGwgPSAoYWw0ICYgYWw1KSBeICh+YWw0ICYgYWw2KTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyBLXG4gICAgICBoID0gS1tpKjJdO1xuICAgICAgbCA9IEtbaSoyKzFdO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIHdcbiAgICAgIGggPSB3aFtpJTE2XTtcbiAgICAgIGwgPSB3bFtpJTE2XTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICBiICs9IGEgPj4+IDE2O1xuICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICAgIHRoID0gYyAmIDB4ZmZmZiB8IGQgPDwgMTY7XG4gICAgICB0bCA9IGEgJiAweGZmZmYgfCBiIDw8IDE2O1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSB0aDtcbiAgICAgIGwgPSB0bDtcblxuICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIFNpZ21hMFxuICAgICAgaCA9ICgoYWgwID4+PiAyOCkgfCAoYWwwIDw8ICgzMi0yOCkpKSBeICgoYWwwID4+PiAoMzQtMzIpKSB8IChhaDAgPDwgKDMyLSgzNC0zMikpKSkgXiAoKGFsMCA+Pj4gKDM5LTMyKSkgfCAoYWgwIDw8ICgzMi0oMzktMzIpKSkpO1xuICAgICAgbCA9ICgoYWwwID4+PiAyOCkgfCAoYWgwIDw8ICgzMi0yOCkpKSBeICgoYWgwID4+PiAoMzQtMzIpKSB8IChhbDAgPDwgKDMyLSgzNC0zMikpKSkgXiAoKGFoMCA+Pj4gKDM5LTMyKSkgfCAoYWwwIDw8ICgzMi0oMzktMzIpKSkpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIE1halxuICAgICAgaCA9IChhaDAgJiBhaDEpIF4gKGFoMCAmIGFoMikgXiAoYWgxICYgYWgyKTtcbiAgICAgIGwgPSAoYWwwICYgYWwxKSBeIChhbDAgJiBhbDIpIF4gKGFsMSAmIGFsMik7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICBiaDcgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICBibDcgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IGJoMztcbiAgICAgIGwgPSBibDM7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICBoID0gdGg7XG4gICAgICBsID0gdGw7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICBiaDMgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICBibDMgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICAgIGFoMSA9IGJoMDtcbiAgICAgIGFoMiA9IGJoMTtcbiAgICAgIGFoMyA9IGJoMjtcbiAgICAgIGFoNCA9IGJoMztcbiAgICAgIGFoNSA9IGJoNDtcbiAgICAgIGFoNiA9IGJoNTtcbiAgICAgIGFoNyA9IGJoNjtcbiAgICAgIGFoMCA9IGJoNztcblxuICAgICAgYWwxID0gYmwwO1xuICAgICAgYWwyID0gYmwxO1xuICAgICAgYWwzID0gYmwyO1xuICAgICAgYWw0ID0gYmwzO1xuICAgICAgYWw1ID0gYmw0O1xuICAgICAgYWw2ID0gYmw1O1xuICAgICAgYWw3ID0gYmw2O1xuICAgICAgYWwwID0gYmw3O1xuXG4gICAgICBpZiAoaSUxNiA9PT0gMTUpIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHtcbiAgICAgICAgICAvLyBhZGRcbiAgICAgICAgICBoID0gd2hbal07XG4gICAgICAgICAgbCA9IHdsW2pdO1xuXG4gICAgICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAgICAgaCA9IHdoWyhqKzkpJTE2XTtcbiAgICAgICAgICBsID0gd2xbKGorOSklMTZdO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIC8vIHNpZ21hMFxuICAgICAgICAgIHRoID0gd2hbKGorMSklMTZdO1xuICAgICAgICAgIHRsID0gd2xbKGorMSklMTZdO1xuICAgICAgICAgIGggPSAoKHRoID4+PiAxKSB8ICh0bCA8PCAoMzItMSkpKSBeICgodGggPj4+IDgpIHwgKHRsIDw8ICgzMi04KSkpIF4gKHRoID4+PiA3KTtcbiAgICAgICAgICBsID0gKCh0bCA+Pj4gMSkgfCAodGggPDwgKDMyLTEpKSkgXiAoKHRsID4+PiA4KSB8ICh0aCA8PCAoMzItOCkpKSBeICgodGwgPj4+IDcpIHwgKHRoIDw8ICgzMi03KSkpO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIC8vIHNpZ21hMVxuICAgICAgICAgIHRoID0gd2hbKGorMTQpJTE2XTtcbiAgICAgICAgICB0bCA9IHdsWyhqKzE0KSUxNl07XG4gICAgICAgICAgaCA9ICgodGggPj4+IDE5KSB8ICh0bCA8PCAoMzItMTkpKSkgXiAoKHRsID4+PiAoNjEtMzIpKSB8ICh0aCA8PCAoMzItKDYxLTMyKSkpKSBeICh0aCA+Pj4gNik7XG4gICAgICAgICAgbCA9ICgodGwgPj4+IDE5KSB8ICh0aCA8PCAoMzItMTkpKSkgXiAoKHRoID4+PiAoNjEtMzIpKSB8ICh0bCA8PCAoMzItKDYxLTMyKSkpKSBeICgodGwgPj4+IDYpIHwgKHRoIDw8ICgzMi02KSkpO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICAgICAgd2hbal0gPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICAgICAgd2xbal0gPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGRcbiAgICBoID0gYWgwO1xuICAgIGwgPSBhbDA7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMF07XG4gICAgbCA9IGhsWzBdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMF0gPSBhaDAgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMF0gPSBhbDAgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgxO1xuICAgIGwgPSBhbDE7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMV07XG4gICAgbCA9IGhsWzFdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMV0gPSBhaDEgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMV0gPSBhbDEgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgyO1xuICAgIGwgPSBhbDI7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMl07XG4gICAgbCA9IGhsWzJdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMl0gPSBhaDIgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMl0gPSBhbDIgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgzO1xuICAgIGwgPSBhbDM7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbM107XG4gICAgbCA9IGhsWzNdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbM10gPSBhaDMgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbM10gPSBhbDMgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg0O1xuICAgIGwgPSBhbDQ7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNF07XG4gICAgbCA9IGhsWzRdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNF0gPSBhaDQgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNF0gPSBhbDQgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg1O1xuICAgIGwgPSBhbDU7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNV07XG4gICAgbCA9IGhsWzVdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNV0gPSBhaDUgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNV0gPSBhbDUgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg2O1xuICAgIGwgPSBhbDY7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNl07XG4gICAgbCA9IGhsWzZdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNl0gPSBhaDYgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNl0gPSBhbDYgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg3O1xuICAgIGwgPSBhbDc7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbN107XG4gICAgbCA9IGhsWzddO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbN10gPSBhaDcgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbN10gPSBhbDcgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBwb3MgKz0gMTI4O1xuICAgIG4gLT0gMTI4O1xuICB9XG5cbiAgcmV0dXJuIG47XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19oYXNoKG91dCwgbSwgbikge1xuICB2YXIgaGggPSBuZXcgSW50MzJBcnJheSg4KSxcbiAgICAgIGhsID0gbmV3IEludDMyQXJyYXkoOCksXG4gICAgICB4ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KSxcbiAgICAgIGksIGIgPSBuO1xuXG4gIGhoWzBdID0gMHg2YTA5ZTY2NztcbiAgaGhbMV0gPSAweGJiNjdhZTg1O1xuICBoaFsyXSA9IDB4M2M2ZWYzNzI7XG4gIGhoWzNdID0gMHhhNTRmZjUzYTtcbiAgaGhbNF0gPSAweDUxMGU1MjdmO1xuICBoaFs1XSA9IDB4OWIwNTY4OGM7XG4gIGhoWzZdID0gMHgxZjgzZDlhYjtcbiAgaGhbN10gPSAweDViZTBjZDE5O1xuXG4gIGhsWzBdID0gMHhmM2JjYzkwODtcbiAgaGxbMV0gPSAweDg0Y2FhNzNiO1xuICBobFsyXSA9IDB4ZmU5NGY4MmI7XG4gIGhsWzNdID0gMHg1ZjFkMzZmMTtcbiAgaGxbNF0gPSAweGFkZTY4MmQxO1xuICBobFs1XSA9IDB4MmIzZTZjMWY7XG4gIGhsWzZdID0gMHhmYjQxYmQ2YjtcbiAgaGxbN10gPSAweDEzN2UyMTc5O1xuXG4gIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgbSwgbik7XG4gIG4gJT0gMTI4O1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHhbaV0gPSBtW2ItbitpXTtcbiAgeFtuXSA9IDEyODtcblxuICBuID0gMjU2LTEyOCoobjwxMTI/MTowKTtcbiAgeFtuLTldID0gMDtcbiAgdHM2NCh4LCBuLTgsICAoYiAvIDB4MjAwMDAwMDApIHwgMCwgYiA8PCAzKTtcbiAgY3J5cHRvX2hhc2hibG9ja3NfaGwoaGgsIGhsLCB4LCBuKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB0czY0KG91dCwgOCppLCBoaFtpXSwgaGxbaV0pO1xuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBhZGQocCwgcSkge1xuICB2YXIgYSA9IGdmKCksIGIgPSBnZigpLCBjID0gZ2YoKSxcbiAgICAgIGQgPSBnZigpLCBlID0gZ2YoKSwgZiA9IGdmKCksXG4gICAgICBnID0gZ2YoKSwgaCA9IGdmKCksIHQgPSBnZigpO1xuXG4gIFooYSwgcFsxXSwgcFswXSk7XG4gIFoodCwgcVsxXSwgcVswXSk7XG4gIE0oYSwgYSwgdCk7XG4gIEEoYiwgcFswXSwgcFsxXSk7XG4gIEEodCwgcVswXSwgcVsxXSk7XG4gIE0oYiwgYiwgdCk7XG4gIE0oYywgcFszXSwgcVszXSk7XG4gIE0oYywgYywgRDIpO1xuICBNKGQsIHBbMl0sIHFbMl0pO1xuICBBKGQsIGQsIGQpO1xuICBaKGUsIGIsIGEpO1xuICBaKGYsIGQsIGMpO1xuICBBKGcsIGQsIGMpO1xuICBBKGgsIGIsIGEpO1xuXG4gIE0ocFswXSwgZSwgZik7XG4gIE0ocFsxXSwgaCwgZyk7XG4gIE0ocFsyXSwgZywgZik7XG4gIE0ocFszXSwgZSwgaCk7XG59XG5cbmZ1bmN0aW9uIGNzd2FwKHAsIHEsIGIpIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBzZWwyNTUxOShwW2ldLCBxW2ldLCBiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWNrKHIsIHApIHtcbiAgdmFyIHR4ID0gZ2YoKSwgdHkgPSBnZigpLCB6aSA9IGdmKCk7XG4gIGludjI1NTE5KHppLCBwWzJdKTtcbiAgTSh0eCwgcFswXSwgemkpO1xuICBNKHR5LCBwWzFdLCB6aSk7XG4gIHBhY2syNTUxOShyLCB0eSk7XG4gIHJbMzFdIF49IHBhcjI1NTE5KHR4KSA8PCA3O1xufVxuXG5mdW5jdGlvbiBzY2FsYXJtdWx0KHAsIHEsIHMpIHtcbiAgdmFyIGIsIGk7XG4gIHNldDI1NTE5KHBbMF0sIGdmMCk7XG4gIHNldDI1NTE5KHBbMV0sIGdmMSk7XG4gIHNldDI1NTE5KHBbMl0sIGdmMSk7XG4gIHNldDI1NTE5KHBbM10sIGdmMCk7XG4gIGZvciAoaSA9IDI1NTsgaSA+PSAwOyAtLWkpIHtcbiAgICBiID0gKHNbKGkvOCl8MF0gPj4gKGkmNykpICYgMTtcbiAgICBjc3dhcChwLCBxLCBiKTtcbiAgICBhZGQocSwgcCk7XG4gICAgYWRkKHAsIHApO1xuICAgIGNzd2FwKHAsIHEsIGIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjYWxhcmJhc2UocCwgcykge1xuICB2YXIgcSA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcbiAgc2V0MjU1MTkocVswXSwgWCk7XG4gIHNldDI1NTE5KHFbMV0sIFkpO1xuICBzZXQyNTUxOShxWzJdLCBnZjEpO1xuICBNKHFbM10sIFgsIFkpO1xuICBzY2FsYXJtdWx0KHAsIHEsIHMpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzaywgc2VlZGVkKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcbiAgdmFyIGk7XG5cbiAgaWYgKCFzZWVkZWQpIHJhbmRvbWJ5dGVzKHNrLCAzMik7XG4gIGNyeXB0b19oYXNoKGQsIHNrLCAzMik7XG4gIGRbMF0gJj0gMjQ4O1xuICBkWzMxXSAmPSAxMjc7XG4gIGRbMzFdIHw9IDY0O1xuXG4gIHNjYWxhcmJhc2UocCwgZCk7XG4gIHBhY2socGssIHApO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBza1tpKzMyXSA9IHBrW2ldO1xuICByZXR1cm4gMDtcbn1cblxudmFyIEwgPSBuZXcgRmxvYXQ2NEFycmF5KFsweGVkLCAweGQzLCAweGY1LCAweDVjLCAweDFhLCAweDYzLCAweDEyLCAweDU4LCAweGQ2LCAweDljLCAweGY3LCAweGEyLCAweGRlLCAweGY5LCAweGRlLCAweDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDEwXSk7XG5cbmZ1bmN0aW9uIG1vZEwociwgeCkge1xuICB2YXIgY2FycnksIGksIGosIGs7XG4gIGZvciAoaSA9IDYzOyBpID49IDMyOyAtLWkpIHtcbiAgICBjYXJyeSA9IDA7XG4gICAgZm9yIChqID0gaSAtIDMyLCBrID0gaSAtIDEyOyBqIDwgazsgKytqKSB7XG4gICAgICB4W2pdICs9IGNhcnJ5IC0gMTYgKiB4W2ldICogTFtqIC0gKGkgLSAzMildO1xuICAgICAgY2FycnkgPSAoeFtqXSArIDEyOCkgPj4gODtcbiAgICAgIHhbal0gLT0gY2FycnkgKiAyNTY7XG4gICAgfVxuICAgIHhbal0gKz0gY2Fycnk7XG4gICAgeFtpXSA9IDA7XG4gIH1cbiAgY2FycnkgPSAwO1xuICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykge1xuICAgIHhbal0gKz0gY2FycnkgLSAoeFszMV0gPj4gNCkgKiBMW2pdO1xuICAgIGNhcnJ5ID0geFtqXSA+PiA4O1xuICAgIHhbal0gJj0gMjU1O1xuICB9XG4gIGZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB4W2pdIC09IGNhcnJ5ICogTFtqXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICB4W2krMV0gKz0geFtpXSA+PiA4O1xuICAgIHJbaV0gPSB4W2ldICYgMjU1O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZHVjZShyKSB7XG4gIHZhciB4ID0gbmV3IEZsb2F0NjRBcnJheSg2NCksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB4W2ldID0gcltpXTtcbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHJbaV0gPSAwO1xuICBtb2RMKHIsIHgpO1xufVxuXG4vLyBOb3RlOiBkaWZmZXJlbmNlIGZyb20gQyAtIHNtbGVuIHJldHVybmVkLCBub3QgcGFzc2VkIGFzIGFyZ3VtZW50LlxuZnVuY3Rpb24gY3J5cHRvX3NpZ24oc20sIG0sIG4sIHNrKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoNjQpLCBoID0gbmV3IFVpbnQ4QXJyYXkoNjQpLCByID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgaSwgaiwgeCA9IG5ldyBGbG9hdDY0QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcblxuICBjcnlwdG9faGFzaChkLCBzaywgMzIpO1xuICBkWzBdICY9IDI0ODtcbiAgZFszMV0gJj0gMTI3O1xuICBkWzMxXSB8PSA2NDtcblxuICB2YXIgc21sZW4gPSBuICsgNjQ7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHNtWzY0ICsgaV0gPSBtW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgc21bMzIgKyBpXSA9IGRbMzIgKyBpXTtcblxuICBjcnlwdG9faGFzaChyLCBzbS5zdWJhcnJheSgzMiksIG4rMzIpO1xuICByZWR1Y2Uocik7XG4gIHNjYWxhcmJhc2UocCwgcik7XG4gIHBhY2soc20sIHApO1xuXG4gIGZvciAoaSA9IDMyOyBpIDwgNjQ7IGkrKykgc21baV0gPSBza1tpXTtcbiAgY3J5cHRvX2hhc2goaCwgc20sIG4gKyA2NCk7XG4gIHJlZHVjZShoKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeFtpXSA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB4W2ldID0gcltpXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykge1xuICAgICAgeFtpK2pdICs9IGhbaV0gKiBkW2pdO1xuICAgIH1cbiAgfVxuXG4gIG1vZEwoc20uc3ViYXJyYXkoMzIpLCB4KTtcbiAgcmV0dXJuIHNtbGVuO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tuZWcociwgcCkge1xuICB2YXIgdCA9IGdmKCksIGNoayA9IGdmKCksIG51bSA9IGdmKCksXG4gICAgICBkZW4gPSBnZigpLCBkZW4yID0gZ2YoKSwgZGVuNCA9IGdmKCksXG4gICAgICBkZW42ID0gZ2YoKTtcblxuICBzZXQyNTUxOShyWzJdLCBnZjEpO1xuICB1bnBhY2syNTUxOShyWzFdLCBwKTtcbiAgUyhudW0sIHJbMV0pO1xuICBNKGRlbiwgbnVtLCBEKTtcbiAgWihudW0sIG51bSwgclsyXSk7XG4gIEEoZGVuLCByWzJdLCBkZW4pO1xuXG4gIFMoZGVuMiwgZGVuKTtcbiAgUyhkZW40LCBkZW4yKTtcbiAgTShkZW42LCBkZW40LCBkZW4yKTtcbiAgTSh0LCBkZW42LCBudW0pO1xuICBNKHQsIHQsIGRlbik7XG5cbiAgcG93MjUyMyh0LCB0KTtcbiAgTSh0LCB0LCBudW0pO1xuICBNKHQsIHQsIGRlbik7XG4gIE0odCwgdCwgZGVuKTtcbiAgTShyWzBdLCB0LCBkZW4pO1xuXG4gIFMoY2hrLCByWzBdKTtcbiAgTShjaGssIGNoaywgZGVuKTtcbiAgaWYgKG5lcTI1NTE5KGNoaywgbnVtKSkgTShyWzBdLCByWzBdLCBJKTtcblxuICBTKGNoaywgclswXSk7XG4gIE0oY2hrLCBjaGssIGRlbik7XG4gIGlmIChuZXEyNTUxOShjaGssIG51bSkpIHJldHVybiAtMTtcblxuICBpZiAocGFyMjU1MTkoclswXSkgPT09IChwWzMxXT4+NykpIFooclswXSwgZ2YwLCByWzBdKTtcblxuICBNKHJbM10sIHJbMF0sIHJbMV0pO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NpZ25fb3BlbihtLCBzbSwgbiwgcGspIHtcbiAgdmFyIGksIG1sZW47XG4gIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoMzIpLCBoID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXSxcbiAgICAgIHEgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG5cbiAgbWxlbiA9IC0xO1xuICBpZiAobiA8IDY0KSByZXR1cm4gLTE7XG5cbiAgaWYgKHVucGFja25lZyhxLCBwaykpIHJldHVybiAtMTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBtW2ldID0gc21baV07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBtW2krMzJdID0gcGtbaV07XG4gIGNyeXB0b19oYXNoKGgsIG0sIG4pO1xuICByZWR1Y2UoaCk7XG4gIHNjYWxhcm11bHQocCwgcSwgaCk7XG5cbiAgc2NhbGFyYmFzZShxLCBzbS5zdWJhcnJheSgzMikpO1xuICBhZGQocCwgcSk7XG4gIHBhY2sodCwgcCk7XG5cbiAgbiAtPSA2NDtcbiAgaWYgKGNyeXB0b192ZXJpZnlfMzIoc20sIDAsIHQsIDApKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IHNtW2kgKyA2NF07XG4gIG1sZW4gPSBuO1xuICByZXR1cm4gbWxlbjtcbn1cblxudmFyIGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMgPSAyNCxcbiAgICBjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyA9IDMyLFxuICAgIGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTID0gMTYsXG4gICAgY3J5cHRvX3NjYWxhcm11bHRfQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9OT05DRUJZVEVTID0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTLFxuICAgIGNyeXB0b19ib3hfWkVST0JZVEVTID0gY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMsXG4gICAgY3J5cHRvX2JveF9CT1haRVJPQllURVMgPSBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyxcbiAgICBjcnlwdG9fc2lnbl9CWVRFUyA9IDY0LFxuICAgIGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMgPSA2NCxcbiAgICBjcnlwdG9fc2lnbl9TRUVEQllURVMgPSAzMixcbiAgICBjcnlwdG9faGFzaF9CWVRFUyA9IDY0O1xuXG5uYWNsLmxvd2xldmVsID0ge1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMDogY3J5cHRvX2NvcmVfaHNhbHNhMjAsXG4gIGNyeXB0b19zdHJlYW1feG9yOiBjcnlwdG9fc3RyZWFtX3hvcixcbiAgY3J5cHRvX3N0cmVhbTogY3J5cHRvX3N0cmVhbSxcbiAgY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcjogY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcixcbiAgY3J5cHRvX3N0cmVhbV9zYWxzYTIwOiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAsXG4gIGNyeXB0b19vbmV0aW1lYXV0aDogY3J5cHRvX29uZXRpbWVhdXRoLFxuICBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5OiBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5LFxuICBjcnlwdG9fdmVyaWZ5XzE2OiBjcnlwdG9fdmVyaWZ5XzE2LFxuICBjcnlwdG9fdmVyaWZ5XzMyOiBjcnlwdG9fdmVyaWZ5XzMyLFxuICBjcnlwdG9fc2VjcmV0Ym94OiBjcnlwdG9fc2VjcmV0Ym94LFxuICBjcnlwdG9fc2VjcmV0Ym94X29wZW46IGNyeXB0b19zZWNyZXRib3hfb3BlbixcbiAgY3J5cHRvX3NjYWxhcm11bHQ6IGNyeXB0b19zY2FsYXJtdWx0LFxuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlOiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlLFxuICBjcnlwdG9fYm94X2JlZm9yZW5tOiBjcnlwdG9fYm94X2JlZm9yZW5tLFxuICBjcnlwdG9fYm94X2FmdGVybm06IGNyeXB0b19ib3hfYWZ0ZXJubSxcbiAgY3J5cHRvX2JveDogY3J5cHRvX2JveCxcbiAgY3J5cHRvX2JveF9vcGVuOiBjcnlwdG9fYm94X29wZW4sXG4gIGNyeXB0b19ib3hfa2V5cGFpcjogY3J5cHRvX2JveF9rZXlwYWlyLFxuICBjcnlwdG9faGFzaDogY3J5cHRvX2hhc2gsXG4gIGNyeXB0b19zaWduOiBjcnlwdG9fc2lnbixcbiAgY3J5cHRvX3NpZ25fa2V5cGFpcjogY3J5cHRvX3NpZ25fa2V5cGFpcixcbiAgY3J5cHRvX3NpZ25fb3BlbjogY3J5cHRvX3NpZ25fb3BlbixcblxuICBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVM6IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVM6IGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUzogY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMsXG4gIGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTOiBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyxcbiAgY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM6IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTLFxuICBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTOiBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTLFxuICBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTOiBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTLFxuICBjcnlwdG9fYm94X0JFRk9SRU5NQllURVM6IGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyxcbiAgY3J5cHRvX2JveF9OT05DRUJZVEVTOiBjcnlwdG9fYm94X05PTkNFQllURVMsXG4gIGNyeXB0b19ib3hfWkVST0JZVEVTOiBjcnlwdG9fYm94X1pFUk9CWVRFUyxcbiAgY3J5cHRvX2JveF9CT1haRVJPQllURVM6IGNyeXB0b19ib3hfQk9YWkVST0JZVEVTLFxuICBjcnlwdG9fc2lnbl9CWVRFUzogY3J5cHRvX3NpZ25fQllURVMsXG4gIGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTOiBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyxcbiAgY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVM6IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTLFxuICBjcnlwdG9fc2lnbl9TRUVEQllURVM6IGNyeXB0b19zaWduX1NFRURCWVRFUyxcbiAgY3J5cHRvX2hhc2hfQllURVM6IGNyeXB0b19oYXNoX0JZVEVTXG59O1xuXG4vKiBIaWdoLWxldmVsIEFQSSAqL1xuXG5mdW5jdGlvbiBjaGVja0xlbmd0aHMoaywgbikge1xuICBpZiAoay5sZW5ndGggIT09IGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIGtleSBzaXplJyk7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBub25jZSBzaXplJyk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQm94TGVuZ3Rocyhwaywgc2spIHtcbiAgaWYgKHBrLmxlbmd0aCAhPT0gY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgcHVibGljIGtleSBzaXplJyk7XG4gIGlmIChzay5sZW5ndGggIT09IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xufVxuXG5mdW5jdGlvbiBjaGVja0FycmF5VHlwZXMoKSB7XG4gIHZhciB0LCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgIGlmICgodCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHNbaV0pKSAhPT0gJ1tvYmplY3QgVWludDhBcnJheV0nKVxuICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgdHlwZSAnICsgdCArICcsIHVzZSBVaW50OEFycmF5Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cChhcnIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycltpXSA9IDA7XG59XG5cbi8vIFRPRE86IENvbXBsZXRlbHkgcmVtb3ZlIHRoaXMgaW4gdjAuMTUuXG5pZiAoIW5hY2wudXRpbCkge1xuICBuYWNsLnV0aWwgPSB7fTtcbiAgbmFjbC51dGlsLmRlY29kZVVURjggPSBuYWNsLnV0aWwuZW5jb2RlVVRGOCA9IG5hY2wudXRpbC5lbmNvZGVCYXNlNjQgPSBuYWNsLnV0aWwuZGVjb2RlQmFzZTY0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCduYWNsLnV0aWwgbW92ZWQgaW50byBzZXBhcmF0ZSBwYWNrYWdlOiBodHRwczovL2dpdGh1Yi5jb20vZGNoZXN0L3R3ZWV0bmFjbC11dGlsLWpzJyk7XG4gIH07XG59XG5cbm5hY2wucmFuZG9tQnl0ZXMgPSBmdW5jdGlvbihuKSB7XG4gIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gIHJhbmRvbWJ5dGVzKGIsIG4pO1xuICByZXR1cm4gYjtcbn07XG5cbm5hY2wuc2VjcmV0Ym94ID0gZnVuY3Rpb24obXNnLCBub25jZSwga2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIG5vbmNlLCBrZXkpO1xuICBjaGVja0xlbmd0aHMoa2V5LCBub25jZSk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMgKyBtc2cubGVuZ3RoKTtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheShtLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSBtW2krY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVNdID0gbXNnW2ldO1xuICBjcnlwdG9fc2VjcmV0Ym94KGMsIG0sIG0ubGVuZ3RoLCBub25jZSwga2V5KTtcbiAgcmV0dXJuIGMuc3ViYXJyYXkoY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMpO1xufTtcblxubmFjbC5zZWNyZXRib3gub3BlbiA9IGZ1bmN0aW9uKGJveCwgbm9uY2UsIGtleSkge1xuICBjaGVja0FycmF5VHlwZXMoYm94LCBub25jZSwga2V5KTtcbiAgY2hlY2tMZW5ndGhzKGtleSwgbm9uY2UpO1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTICsgYm94Lmxlbmd0aCk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoYy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJveC5sZW5ndGg7IGkrKykgY1tpK2NyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTXSA9IGJveFtpXTtcbiAgaWYgKGMubGVuZ3RoIDwgMzIpIHJldHVybiBmYWxzZTtcbiAgaWYgKGNyeXB0b19zZWNyZXRib3hfb3BlbihtLCBjLCBjLmxlbmd0aCwgbm9uY2UsIGtleSkgIT09IDApIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIG0uc3ViYXJyYXkoY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMpO1xufTtcblxubmFjbC5zZWNyZXRib3gua2V5TGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUztcbm5hY2wuc2VjcmV0Ym94Lm5vbmNlTGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTO1xubmFjbC5zZWNyZXRib3gub3ZlcmhlYWRMZW5ndGggPSBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUztcblxubmFjbC5zY2FsYXJNdWx0ID0gZnVuY3Rpb24obiwgcCkge1xuICBjaGVja0FycmF5VHlwZXMobiwgcCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG4gc2l6ZScpO1xuICBpZiAocC5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwIHNpemUnKTtcbiAgdmFyIHEgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyk7XG4gIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIHApO1xuICByZXR1cm4gcTtcbn07XG5cbm5hY2wuc2NhbGFyTXVsdC5iYXNlID0gZnVuY3Rpb24obikge1xuICBjaGVja0FycmF5VHlwZXMobik7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG4gc2l6ZScpO1xuICB2YXIgcSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKTtcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZShxLCBuKTtcbiAgcmV0dXJuIHE7XG59O1xuXG5uYWNsLnNjYWxhck11bHQuc2NhbGFyTGVuZ3RoID0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM7XG5uYWNsLnNjYWxhck11bHQuZ3JvdXBFbGVtZW50TGVuZ3RoID0gY3J5cHRvX3NjYWxhcm11bHRfQllURVM7XG5cbm5hY2wuYm94ID0gZnVuY3Rpb24obXNnLCBub25jZSwgcHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgdmFyIGsgPSBuYWNsLmJveC5iZWZvcmUocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gbmFjbC5zZWNyZXRib3gobXNnLCBub25jZSwgayk7XG59O1xuXG5uYWNsLmJveC5iZWZvcmUgPSBmdW5jdGlvbihwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICBjaGVja0JveExlbmd0aHMocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyk7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgcHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gaztcbn07XG5cbm5hY2wuYm94LmFmdGVyID0gbmFjbC5zZWNyZXRib3g7XG5cbm5hY2wuYm94Lm9wZW4gPSBmdW5jdGlvbihtc2csIG5vbmNlLCBwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICB2YXIgayA9IG5hY2wuYm94LmJlZm9yZShwdWJsaWNLZXksIHNlY3JldEtleSk7XG4gIHJldHVybiBuYWNsLnNlY3JldGJveC5vcGVuKG1zZywgbm9uY2UsIGspO1xufTtcblxubmFjbC5ib3gub3Blbi5hZnRlciA9IG5hY2wuc2VjcmV0Ym94Lm9wZW47XG5cbm5hY2wuYm94LmtleVBhaXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpO1xuICBjcnlwdG9fYm94X2tleXBhaXIocGssIHNrKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuYm94LmtleVBhaXIuZnJvbVNlY3JldEtleSA9IGZ1bmN0aW9uKHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMoc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpO1xuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHBrLCBzZWNyZXRLZXkpO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogbmV3IFVpbnQ4QXJyYXkoc2VjcmV0S2V5KX07XG59O1xuXG5uYWNsLmJveC5wdWJsaWNLZXlMZW5ndGggPSBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTO1xubmFjbC5ib3guc2VjcmV0S2V5TGVuZ3RoID0gY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUztcbm5hY2wuYm94LnNoYXJlZEtleUxlbmd0aCA9IGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUztcbm5hY2wuYm94Lm5vbmNlTGVuZ3RoID0gY3J5cHRvX2JveF9OT05DRUJZVEVTO1xubmFjbC5ib3gub3ZlcmhlYWRMZW5ndGggPSBuYWNsLnNlY3JldGJveC5vdmVyaGVhZExlbmd0aDtcblxubmFjbC5zaWduID0gZnVuY3Rpb24obXNnLCBzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgc2lnbmVkTXNnID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMrbXNnLmxlbmd0aCk7XG4gIGNyeXB0b19zaWduKHNpZ25lZE1zZywgbXNnLCBtc2cubGVuZ3RoLCBzZWNyZXRLZXkpO1xuICByZXR1cm4gc2lnbmVkTXNnO1xufTtcblxubmFjbC5zaWduLm9wZW4gPSBmdW5jdGlvbihzaWduZWRNc2csIHB1YmxpY0tleSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25hY2wuc2lnbi5vcGVuIGFjY2VwdHMgMiBhcmd1bWVudHM7IGRpZCB5b3UgbWVhbiB0byB1c2UgbmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeT8nKTtcbiAgY2hlY2tBcnJheVR5cGVzKHNpZ25lZE1zZywgcHVibGljS2V5KTtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICB2YXIgdG1wID0gbmV3IFVpbnQ4QXJyYXkoc2lnbmVkTXNnLmxlbmd0aCk7XG4gIHZhciBtbGVuID0gY3J5cHRvX3NpZ25fb3Blbih0bXAsIHNpZ25lZE1zZywgc2lnbmVkTXNnLmxlbmd0aCwgcHVibGljS2V5KTtcbiAgaWYgKG1sZW4gPCAwKSByZXR1cm4gbnVsbDtcbiAgdmFyIG0gPSBuZXcgVWludDhBcnJheShtbGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSBtW2ldID0gdG1wW2ldO1xuICByZXR1cm4gbTtcbn07XG5cbm5hY2wuc2lnbi5kZXRhY2hlZCA9IGZ1bmN0aW9uKG1zZywgc2VjcmV0S2V5KSB7XG4gIHZhciBzaWduZWRNc2cgPSBuYWNsLnNpZ24obXNnLCBzZWNyZXRLZXkpO1xuICB2YXIgc2lnID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZy5sZW5ndGg7IGkrKykgc2lnW2ldID0gc2lnbmVkTXNnW2ldO1xuICByZXR1cm4gc2lnO1xufTtcblxubmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeSA9IGZ1bmN0aW9uKG1zZywgc2lnLCBwdWJsaWNLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgc2lnLCBwdWJsaWNLZXkpO1xuICBpZiAoc2lnLmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2lnbmF0dXJlIHNpemUnKTtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICB2YXIgc20gPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9CWVRFUyArIG1zZy5sZW5ndGgpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTICsgbXNnLmxlbmd0aCk7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgY3J5cHRvX3NpZ25fQllURVM7IGkrKykgc21baV0gPSBzaWdbaV07XG4gIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHNtW2krY3J5cHRvX3NpZ25fQllURVNdID0gbXNnW2ldO1xuICByZXR1cm4gKGNyeXB0b19zaWduX29wZW4obSwgc20sIHNtLmxlbmd0aCwgcHVibGljS2V5KSA+PSAwKTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgdmFyIHNrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpO1xuICBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzayk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VjcmV0S2V5ID0gZnVuY3Rpb24oc2VjcmV0S2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhzZWNyZXRLZXkpO1xuICBpZiAoc2VjcmV0S2V5Lmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBway5sZW5ndGg7IGkrKykgcGtbaV0gPSBzZWNyZXRLZXlbMzIraV07XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBuZXcgVWludDhBcnJheShzZWNyZXRLZXkpfTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkID0gZnVuY3Rpb24oc2VlZCkge1xuICBjaGVja0FycmF5VHlwZXMoc2VlZCk7XG4gIGlmIChzZWVkLmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VFREJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlZWQgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKSBza1tpXSA9IHNlZWRbaV07XG4gIGNyeXB0b19zaWduX2tleXBhaXIocGssIHNrLCB0cnVlKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuc2lnbi5wdWJsaWNLZXlMZW5ndGggPSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUztcbm5hY2wuc2lnbi5zZWNyZXRLZXlMZW5ndGggPSBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUztcbm5hY2wuc2lnbi5zZWVkTGVuZ3RoID0gY3J5cHRvX3NpZ25fU0VFREJZVEVTO1xubmFjbC5zaWduLnNpZ25hdHVyZUxlbmd0aCA9IGNyeXB0b19zaWduX0JZVEVTO1xuXG5uYWNsLmhhc2ggPSBmdW5jdGlvbihtc2cpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZyk7XG4gIHZhciBoID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2hhc2hfQllURVMpO1xuICBjcnlwdG9faGFzaChoLCBtc2csIG1zZy5sZW5ndGgpO1xuICByZXR1cm4gaDtcbn07XG5cbm5hY2wuaGFzaC5oYXNoTGVuZ3RoID0gY3J5cHRvX2hhc2hfQllURVM7XG5cbm5hY2wudmVyaWZ5ID0gZnVuY3Rpb24oeCwgeSkge1xuICBjaGVja0FycmF5VHlwZXMoeCwgeSk7XG4gIC8vIFplcm8gbGVuZ3RoIGFyZ3VtZW50cyBhcmUgY29uc2lkZXJlZCBub3QgZXF1YWwuXG4gIGlmICh4Lmxlbmd0aCA9PT0gMCB8fCB5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoeC5sZW5ndGggIT09IHkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAodm4oeCwgMCwgeSwgMCwgeC5sZW5ndGgpID09PSAwKSA/IHRydWUgOiBmYWxzZTtcbn07XG5cbm5hY2wuc2V0UFJORyA9IGZ1bmN0aW9uKGZuKSB7XG4gIHJhbmRvbWJ5dGVzID0gZm47XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIC8vIEluaXRpYWxpemUgUFJORyBpZiBlbnZpcm9ubWVudCBwcm92aWRlcyBDU1BSTkcuXG4gIC8vIElmIG5vdCwgbWV0aG9kcyBjYWxsaW5nIHJhbmRvbWJ5dGVzIHdpbGwgdGhyb3cuXG4gIHZhciBjcnlwdG8gPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyAoc2VsZi5jcnlwdG8gfHwgc2VsZi5tc0NyeXB0bykgOiBudWxsO1xuICBpZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBCcm93c2Vycy5cbiAgICB2YXIgUVVPVEEgPSA2NTUzNjtcbiAgICBuYWNsLnNldFBSTkcoZnVuY3Rpb24oeCwgbikge1xuICAgICAgdmFyIGksIHYgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpICs9IFFVT1RBKSB7XG4gICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModi5zdWJhcnJheShpLCBpICsgTWF0aC5taW4obiAtIGksIFFVT1RBKSkpO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeFtpXSA9IHZbaV07XG4gICAgICBjbGVhbnVwKHYpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vZGUuanMuXG4gICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgaWYgKGNyeXB0byAmJiBjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcbiAgICAgIG5hY2wuc2V0UFJORyhmdW5jdGlvbih4LCBuKSB7XG4gICAgICAgIHZhciBpLCB2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKG4pO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB4W2ldID0gdltpXTtcbiAgICAgICAgY2xlYW51cCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSkoKTtcblxufSkodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgPyBtb2R1bGUuZXhwb3J0cyA6IChzZWxmLm5hY2wgPSBzZWxmLm5hY2wgfHwge30pKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi90d2VldG5hY2wvbmFjbC1mYXN0LmpzXG4vLyBtb2R1bGUgaWQgPSA4OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAoaWdub3JlZCkgKi9cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyB2ZXJ0eCAoaWdub3JlZClcbi8vIG1vZHVsZSBpZCA9IDg5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIChpZ25vcmVkKSAqL1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGNyeXB0byAoaWdub3JlZClcbi8vIG1vZHVsZSBpZCA9IDkwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file