mirror of
https://github.com/bigchaindb/js-bigchaindb-driver.git
synced 2024-11-22 17:50:09 +01:00
a338a5c570
update examples and tutorials
6295 lines
2.3 MiB
6295 lines
2.3 MiB
(function webpackUniversalModuleDefinition(root, factory) {
|
||
if(typeof exports === 'object' && typeof module === 'object')
|
||
module.exports = factory();
|
||
else if(typeof define === 'function' && define.amd)
|
||
define([], factory);
|
||
else if(typeof exports === 'object')
|
||
exports["js-bigchaindb-quickstart"] = factory();
|
||
else
|
||
root["js-bigchaindb-quickstart"] = factory();
|
||
})(this, function() {
|
||
return /******/ (function(modules) { // webpackBootstrap
|
||
/******/ // The module cache
|
||
/******/ var installedModules = {};
|
||
/******/
|
||
/******/ // The require function
|
||
/******/ function __webpack_require__(moduleId) {
|
||
/******/
|
||
/******/ // Check if module is in cache
|
||
/******/ if(installedModules[moduleId])
|
||
/******/ return installedModules[moduleId].exports;
|
||
/******/
|
||
/******/ // Create a new module (and put it into the cache)
|
||
/******/ var module = installedModules[moduleId] = {
|
||
/******/ i: moduleId,
|
||
/******/ l: false,
|
||
/******/ exports: {}
|
||
/******/ };
|
||
/******/
|
||
/******/ // Execute the module function
|
||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||
/******/
|
||
/******/ // Flag the module as loaded
|
||
/******/ module.l = true;
|
||
/******/
|
||
/******/ // Return the exports of the module
|
||
/******/ return module.exports;
|
||
/******/ }
|
||
/******/
|
||
/******/
|
||
/******/ // expose the modules object (__webpack_modules__)
|
||
/******/ __webpack_require__.m = modules;
|
||
/******/
|
||
/******/ // expose the module cache
|
||
/******/ __webpack_require__.c = installedModules;
|
||
/******/
|
||
/******/ // identity function for calling harmony imports with the correct context
|
||
/******/ __webpack_require__.i = function(value) { return value; };
|
||
/******/
|
||
/******/ // define getter function for harmony exports
|
||
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||
/******/ if(!__webpack_require__.o(exports, name)) {
|
||
/******/ Object.defineProperty(exports, name, {
|
||
/******/ configurable: false,
|
||
/******/ enumerable: true,
|
||
/******/ get: getter
|
||
/******/ });
|
||
/******/ }
|
||
/******/ };
|
||
/******/
|
||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||
/******/ __webpack_require__.n = function(module) {
|
||
/******/ var getter = module && module.__esModule ?
|
||
/******/ function getDefault() { return module['default']; } :
|
||
/******/ function getModuleExports() { return module; };
|
||
/******/ __webpack_require__.d(getter, 'a', getter);
|
||
/******/ return getter;
|
||
/******/ };
|
||
/******/
|
||
/******/ // Object.prototype.hasOwnProperty.call
|
||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||
/******/
|
||
/******/ // __webpack_public_path__
|
||
/******/ __webpack_require__.p = "";
|
||
/******/
|
||
/******/ // Load entry module and return exports
|
||
/******/ return __webpack_require__(__webpack_require__.s = 29);
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ([
|
||
/* 0 */
|
||
/***/ (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() {
|
||
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;
|
||
}
|
||
|
||
/***/ }),
|
||
/* 1 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var basex = __webpack_require__(17)
|
||
var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
||
|
||
module.exports = basex(ALPHABET)
|
||
|
||
|
||
/***/ }),
|
||
/* 2 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* WEBPACK VAR INJECTION */(function(global) {/*!
|
||
* The buffer module from node.js, for the browser.
|
||
*
|
||
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
|
||
* @license MIT
|
||
*/
|
||
/* eslint-disable no-proto */
|
||
|
||
|
||
|
||
var base64 = __webpack_require__(18)
|
||
var ieee754 = __webpack_require__(19)
|
||
var isArray = __webpack_require__(20)
|
||
|
||
exports.Buffer = Buffer
|
||
exports.SlowBuffer = SlowBuffer
|
||
exports.INSPECT_MAX_BYTES = 50
|
||
|
||
/**
|
||
* If `Buffer.TYPED_ARRAY_SUPPORT`:
|
||
* === true Use Uint8Array implementation (fastest)
|
||
* === false Use Object implementation (most compatible, even IE6)
|
||
*
|
||
* Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
|
||
* Opera 11.6+, iOS 4.2+.
|
||
*
|
||
* Due to various browser bugs, sometimes the Object implementation will be used even
|
||
* when the browser supports typed arrays.
|
||
*
|
||
* Note:
|
||
*
|
||
* - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
|
||
* See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
|
||
*
|
||
* - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
|
||
*
|
||
* - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
|
||
* incorrect length in some situations.
|
||
|
||
* We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
|
||
* get the Object implementation, which is slower but behaves correctly.
|
||
*/
|
||
Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
|
||
? global.TYPED_ARRAY_SUPPORT
|
||
: typedArraySupport()
|
||
|
||
/*
|
||
* Export kMaxLength after typed array support is determined.
|
||
*/
|
||
exports.kMaxLength = kMaxLength()
|
||
|
||
function typedArraySupport () {
|
||
try {
|
||
var arr = new Uint8Array(1)
|
||
arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
|
||
return arr.foo() === 42 && // typed array instances can be augmented
|
||
typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
|
||
arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
|
||
} catch (e) {
|
||
return false
|
||
}
|
||
}
|
||
|
||
function kMaxLength () {
|
||
return Buffer.TYPED_ARRAY_SUPPORT
|
||
? 0x7fffffff
|
||
: 0x3fffffff
|
||
}
|
||
|
||
function createBuffer (that, length) {
|
||
if (kMaxLength() < length) {
|
||
throw new RangeError('Invalid typed array length')
|
||
}
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
// Return an augmented `Uint8Array` instance, for best performance
|
||
that = new Uint8Array(length)
|
||
that.__proto__ = Buffer.prototype
|
||
} else {
|
||
// Fallback: Return an object instance of the Buffer class
|
||
if (that === null) {
|
||
that = new Buffer(length)
|
||
}
|
||
that.length = length
|
||
}
|
||
|
||
return that
|
||
}
|
||
|
||
/**
|
||
* The Buffer constructor returns instances of `Uint8Array` that have their
|
||
* prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
|
||
* `Uint8Array`, so the returned instances will have all the node `Buffer` methods
|
||
* and the `Uint8Array` methods. Square bracket notation works as expected -- it
|
||
* returns a single octet.
|
||
*
|
||
* The `Uint8Array` prototype remains unmodified.
|
||
*/
|
||
|
||
function Buffer (arg, encodingOrOffset, length) {
|
||
if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
|
||
return new Buffer(arg, encodingOrOffset, length)
|
||
}
|
||
|
||
// Common case.
|
||
if (typeof arg === 'number') {
|
||
if (typeof encodingOrOffset === 'string') {
|
||
throw new Error(
|
||
'If encoding is specified then the first argument must be a string'
|
||
)
|
||
}
|
||
return allocUnsafe(this, arg)
|
||
}
|
||
return from(this, arg, encodingOrOffset, length)
|
||
}
|
||
|
||
Buffer.poolSize = 8192 // not used by this implementation
|
||
|
||
// TODO: Legacy, not needed anymore. Remove in next major version.
|
||
Buffer._augment = function (arr) {
|
||
arr.__proto__ = Buffer.prototype
|
||
return arr
|
||
}
|
||
|
||
function from (that, value, encodingOrOffset, length) {
|
||
if (typeof value === 'number') {
|
||
throw new TypeError('"value" argument must not be a number')
|
||
}
|
||
|
||
if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
|
||
return fromArrayBuffer(that, value, encodingOrOffset, length)
|
||
}
|
||
|
||
if (typeof value === 'string') {
|
||
return fromString(that, value, encodingOrOffset)
|
||
}
|
||
|
||
return fromObject(that, value)
|
||
}
|
||
|
||
/**
|
||
* Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
|
||
* if value is a number.
|
||
* Buffer.from(str[, encoding])
|
||
* Buffer.from(array)
|
||
* Buffer.from(buffer)
|
||
* Buffer.from(arrayBuffer[, byteOffset[, length]])
|
||
**/
|
||
Buffer.from = function (value, encodingOrOffset, length) {
|
||
return from(null, value, encodingOrOffset, length)
|
||
}
|
||
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
Buffer.prototype.__proto__ = Uint8Array.prototype
|
||
Buffer.__proto__ = Uint8Array
|
||
if (typeof Symbol !== 'undefined' && Symbol.species &&
|
||
Buffer[Symbol.species] === Buffer) {
|
||
// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
|
||
Object.defineProperty(Buffer, Symbol.species, {
|
||
value: null,
|
||
configurable: true
|
||
})
|
||
}
|
||
}
|
||
|
||
function assertSize (size) {
|
||
if (typeof size !== 'number') {
|
||
throw new TypeError('"size" argument must be a number')
|
||
} else if (size < 0) {
|
||
throw new RangeError('"size" argument must not be negative')
|
||
}
|
||
}
|
||
|
||
function alloc (that, size, fill, encoding) {
|
||
assertSize(size)
|
||
if (size <= 0) {
|
||
return createBuffer(that, size)
|
||
}
|
||
if (fill !== undefined) {
|
||
// Only pay attention to encoding if it's a string. This
|
||
// prevents accidentally sending in a number that would
|
||
// be interpretted as a start offset.
|
||
return typeof encoding === 'string'
|
||
? createBuffer(that, size).fill(fill, encoding)
|
||
: createBuffer(that, size).fill(fill)
|
||
}
|
||
return createBuffer(that, size)
|
||
}
|
||
|
||
/**
|
||
* Creates a new filled Buffer instance.
|
||
* alloc(size[, fill[, encoding]])
|
||
**/
|
||
Buffer.alloc = function (size, fill, encoding) {
|
||
return alloc(null, size, fill, encoding)
|
||
}
|
||
|
||
function allocUnsafe (that, size) {
|
||
assertSize(size)
|
||
that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
|
||
if (!Buffer.TYPED_ARRAY_SUPPORT) {
|
||
for (var i = 0; i < size; ++i) {
|
||
that[i] = 0
|
||
}
|
||
}
|
||
return that
|
||
}
|
||
|
||
/**
|
||
* Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
|
||
* */
|
||
Buffer.allocUnsafe = function (size) {
|
||
return allocUnsafe(null, size)
|
||
}
|
||
/**
|
||
* Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
|
||
*/
|
||
Buffer.allocUnsafeSlow = function (size) {
|
||
return allocUnsafe(null, size)
|
||
}
|
||
|
||
function fromString (that, string, encoding) {
|
||
if (typeof encoding !== 'string' || encoding === '') {
|
||
encoding = 'utf8'
|
||
}
|
||
|
||
if (!Buffer.isEncoding(encoding)) {
|
||
throw new TypeError('"encoding" must be a valid string encoding')
|
||
}
|
||
|
||
var length = byteLength(string, encoding) | 0
|
||
that = createBuffer(that, length)
|
||
|
||
var actual = that.write(string, encoding)
|
||
|
||
if (actual !== length) {
|
||
// Writing a hex string, for example, that contains invalid characters will
|
||
// cause everything after the first invalid character to be ignored. (e.g.
|
||
// 'abxxcd' will be treated as 'ab')
|
||
that = that.slice(0, actual)
|
||
}
|
||
|
||
return that
|
||
}
|
||
|
||
function fromArrayLike (that, array) {
|
||
var length = array.length < 0 ? 0 : checked(array.length) | 0
|
||
that = createBuffer(that, length)
|
||
for (var i = 0; i < length; i += 1) {
|
||
that[i] = array[i] & 255
|
||
}
|
||
return that
|
||
}
|
||
|
||
function fromArrayBuffer (that, array, byteOffset, length) {
|
||
array.byteLength // this throws if `array` is not a valid ArrayBuffer
|
||
|
||
if (byteOffset < 0 || array.byteLength < byteOffset) {
|
||
throw new RangeError('\'offset\' is out of bounds')
|
||
}
|
||
|
||
if (array.byteLength < byteOffset + (length || 0)) {
|
||
throw new RangeError('\'length\' is out of bounds')
|
||
}
|
||
|
||
if (byteOffset === undefined && length === undefined) {
|
||
array = new Uint8Array(array)
|
||
} else if (length === undefined) {
|
||
array = new Uint8Array(array, byteOffset)
|
||
} else {
|
||
array = new Uint8Array(array, byteOffset, length)
|
||
}
|
||
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
// Return an augmented `Uint8Array` instance, for best performance
|
||
that = array
|
||
that.__proto__ = Buffer.prototype
|
||
} else {
|
||
// Fallback: Return an object instance of the Buffer class
|
||
that = fromArrayLike(that, array)
|
||
}
|
||
return that
|
||
}
|
||
|
||
function fromObject (that, obj) {
|
||
if (Buffer.isBuffer(obj)) {
|
||
var len = checked(obj.length) | 0
|
||
that = createBuffer(that, len)
|
||
|
||
if (that.length === 0) {
|
||
return that
|
||
}
|
||
|
||
obj.copy(that, 0, 0, len)
|
||
return that
|
||
}
|
||
|
||
if (obj) {
|
||
if ((typeof ArrayBuffer !== 'undefined' &&
|
||
obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
|
||
if (typeof obj.length !== 'number' || isnan(obj.length)) {
|
||
return createBuffer(that, 0)
|
||
}
|
||
return fromArrayLike(that, obj)
|
||
}
|
||
|
||
if (obj.type === 'Buffer' && isArray(obj.data)) {
|
||
return fromArrayLike(that, obj.data)
|
||
}
|
||
}
|
||
|
||
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
|
||
}
|
||
|
||
function checked (length) {
|
||
// Note: cannot use `length < kMaxLength()` here because that fails when
|
||
// length is NaN (which is otherwise coerced to zero.)
|
||
if (length >= kMaxLength()) {
|
||
throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
|
||
'size: 0x' + kMaxLength().toString(16) + ' bytes')
|
||
}
|
||
return length | 0
|
||
}
|
||
|
||
function SlowBuffer (length) {
|
||
if (+length != length) { // eslint-disable-line eqeqeq
|
||
length = 0
|
||
}
|
||
return Buffer.alloc(+length)
|
||
}
|
||
|
||
Buffer.isBuffer = function isBuffer (b) {
|
||
return !!(b != null && b._isBuffer)
|
||
}
|
||
|
||
Buffer.compare = function compare (a, b) {
|
||
if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
|
||
throw new TypeError('Arguments must be Buffers')
|
||
}
|
||
|
||
if (a === b) return 0
|
||
|
||
var x = a.length
|
||
var y = b.length
|
||
|
||
for (var i = 0, len = Math.min(x, y); i < len; ++i) {
|
||
if (a[i] !== b[i]) {
|
||
x = a[i]
|
||
y = b[i]
|
||
break
|
||
}
|
||
}
|
||
|
||
if (x < y) return -1
|
||
if (y < x) return 1
|
||
return 0
|
||
}
|
||
|
||
Buffer.isEncoding = function isEncoding (encoding) {
|
||
switch (String(encoding).toLowerCase()) {
|
||
case 'hex':
|
||
case 'utf8':
|
||
case 'utf-8':
|
||
case 'ascii':
|
||
case 'latin1':
|
||
case 'binary':
|
||
case 'base64':
|
||
case 'ucs2':
|
||
case 'ucs-2':
|
||
case 'utf16le':
|
||
case 'utf-16le':
|
||
return true
|
||
default:
|
||
return false
|
||
}
|
||
}
|
||
|
||
Buffer.concat = function concat (list, length) {
|
||
if (!isArray(list)) {
|
||
throw new TypeError('"list" argument must be an Array of Buffers')
|
||
}
|
||
|
||
if (list.length === 0) {
|
||
return Buffer.alloc(0)
|
||
}
|
||
|
||
var i
|
||
if (length === undefined) {
|
||
length = 0
|
||
for (i = 0; i < list.length; ++i) {
|
||
length += list[i].length
|
||
}
|
||
}
|
||
|
||
var buffer = Buffer.allocUnsafe(length)
|
||
var pos = 0
|
||
for (i = 0; i < list.length; ++i) {
|
||
var buf = list[i]
|
||
if (!Buffer.isBuffer(buf)) {
|
||
throw new TypeError('"list" argument must be an Array of Buffers')
|
||
}
|
||
buf.copy(buffer, pos)
|
||
pos += buf.length
|
||
}
|
||
return buffer
|
||
}
|
||
|
||
function byteLength (string, encoding) {
|
||
if (Buffer.isBuffer(string)) {
|
||
return string.length
|
||
}
|
||
if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
|
||
(ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
|
||
return string.byteLength
|
||
}
|
||
if (typeof string !== 'string') {
|
||
string = '' + string
|
||
}
|
||
|
||
var len = string.length
|
||
if (len === 0) return 0
|
||
|
||
// Use a for loop to avoid recursion
|
||
var loweredCase = false
|
||
for (;;) {
|
||
switch (encoding) {
|
||
case 'ascii':
|
||
case 'latin1':
|
||
case 'binary':
|
||
return len
|
||
case 'utf8':
|
||
case 'utf-8':
|
||
case undefined:
|
||
return utf8ToBytes(string).length
|
||
case 'ucs2':
|
||
case 'ucs-2':
|
||
case 'utf16le':
|
||
case 'utf-16le':
|
||
return len * 2
|
||
case 'hex':
|
||
return len >>> 1
|
||
case 'base64':
|
||
return base64ToBytes(string).length
|
||
default:
|
||
if (loweredCase) return utf8ToBytes(string).length // assume utf8
|
||
encoding = ('' + encoding).toLowerCase()
|
||
loweredCase = true
|
||
}
|
||
}
|
||
}
|
||
Buffer.byteLength = byteLength
|
||
|
||
function slowToString (encoding, start, end) {
|
||
var loweredCase = false
|
||
|
||
// No need to verify that "this.length <= MAX_UINT32" since it's a read-only
|
||
// property of a typed array.
|
||
|
||
// This behaves neither like String nor Uint8Array in that we set start/end
|
||
// to their upper/lower bounds if the value passed is out of range.
|
||
// undefined is handled specially as per ECMA-262 6th Edition,
|
||
// Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
|
||
if (start === undefined || start < 0) {
|
||
start = 0
|
||
}
|
||
// Return early if start > this.length. Done here to prevent potential uint32
|
||
// coercion fail below.
|
||
if (start > this.length) {
|
||
return ''
|
||
}
|
||
|
||
if (end === undefined || end > this.length) {
|
||
end = this.length
|
||
}
|
||
|
||
if (end <= 0) {
|
||
return ''
|
||
}
|
||
|
||
// Force coersion to uint32. This will also coerce falsey/NaN values to 0.
|
||
end >>>= 0
|
||
start >>>= 0
|
||
|
||
if (end <= start) {
|
||
return ''
|
||
}
|
||
|
||
if (!encoding) encoding = 'utf8'
|
||
|
||
while (true) {
|
||
switch (encoding) {
|
||
case 'hex':
|
||
return hexSlice(this, start, end)
|
||
|
||
case 'utf8':
|
||
case 'utf-8':
|
||
return utf8Slice(this, start, end)
|
||
|
||
case 'ascii':
|
||
return asciiSlice(this, start, end)
|
||
|
||
case 'latin1':
|
||
case 'binary':
|
||
return latin1Slice(this, start, end)
|
||
|
||
case 'base64':
|
||
return base64Slice(this, start, end)
|
||
|
||
case 'ucs2':
|
||
case 'ucs-2':
|
||
case 'utf16le':
|
||
case 'utf-16le':
|
||
return utf16leSlice(this, start, end)
|
||
|
||
default:
|
||
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
|
||
encoding = (encoding + '').toLowerCase()
|
||
loweredCase = true
|
||
}
|
||
}
|
||
}
|
||
|
||
// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
|
||
// Buffer instances.
|
||
Buffer.prototype._isBuffer = true
|
||
|
||
function swap (b, n, m) {
|
||
var i = b[n]
|
||
b[n] = b[m]
|
||
b[m] = i
|
||
}
|
||
|
||
Buffer.prototype.swap16 = function swap16 () {
|
||
var len = this.length
|
||
if (len % 2 !== 0) {
|
||
throw new RangeError('Buffer size must be a multiple of 16-bits')
|
||
}
|
||
for (var i = 0; i < len; i += 2) {
|
||
swap(this, i, i + 1)
|
||
}
|
||
return this
|
||
}
|
||
|
||
Buffer.prototype.swap32 = function swap32 () {
|
||
var len = this.length
|
||
if (len % 4 !== 0) {
|
||
throw new RangeError('Buffer size must be a multiple of 32-bits')
|
||
}
|
||
for (var i = 0; i < len; i += 4) {
|
||
swap(this, i, i + 3)
|
||
swap(this, i + 1, i + 2)
|
||
}
|
||
return this
|
||
}
|
||
|
||
Buffer.prototype.swap64 = function swap64 () {
|
||
var len = this.length
|
||
if (len % 8 !== 0) {
|
||
throw new RangeError('Buffer size must be a multiple of 64-bits')
|
||
}
|
||
for (var i = 0; i < len; i += 8) {
|
||
swap(this, i, i + 7)
|
||
swap(this, i + 1, i + 6)
|
||
swap(this, i + 2, i + 5)
|
||
swap(this, i + 3, i + 4)
|
||
}
|
||
return this
|
||
}
|
||
|
||
Buffer.prototype.toString = function toString () {
|
||
var length = this.length | 0
|
||
if (length === 0) return ''
|
||
if (arguments.length === 0) return utf8Slice(this, 0, length)
|
||
return slowToString.apply(this, arguments)
|
||
}
|
||
|
||
Buffer.prototype.equals = function equals (b) {
|
||
if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
|
||
if (this === b) return true
|
||
return Buffer.compare(this, b) === 0
|
||
}
|
||
|
||
Buffer.prototype.inspect = function inspect () {
|
||
var str = ''
|
||
var max = exports.INSPECT_MAX_BYTES
|
||
if (this.length > 0) {
|
||
str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
|
||
if (this.length > max) str += ' ... '
|
||
}
|
||
return '<Buffer ' + str + '>'
|
||
}
|
||
|
||
Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
|
||
if (!Buffer.isBuffer(target)) {
|
||
throw new TypeError('Argument must be a Buffer')
|
||
}
|
||
|
||
if (start === undefined) {
|
||
start = 0
|
||
}
|
||
if (end === undefined) {
|
||
end = target ? target.length : 0
|
||
}
|
||
if (thisStart === undefined) {
|
||
thisStart = 0
|
||
}
|
||
if (thisEnd === undefined) {
|
||
thisEnd = this.length
|
||
}
|
||
|
||
if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
|
||
throw new RangeError('out of range index')
|
||
}
|
||
|
||
if (thisStart >= thisEnd && start >= end) {
|
||
return 0
|
||
}
|
||
if (thisStart >= thisEnd) {
|
||
return -1
|
||
}
|
||
if (start >= end) {
|
||
return 1
|
||
}
|
||
|
||
start >>>= 0
|
||
end >>>= 0
|
||
thisStart >>>= 0
|
||
thisEnd >>>= 0
|
||
|
||
if (this === target) return 0
|
||
|
||
var x = thisEnd - thisStart
|
||
var y = end - start
|
||
var len = Math.min(x, y)
|
||
|
||
var thisCopy = this.slice(thisStart, thisEnd)
|
||
var targetCopy = target.slice(start, end)
|
||
|
||
for (var i = 0; i < len; ++i) {
|
||
if (thisCopy[i] !== targetCopy[i]) {
|
||
x = thisCopy[i]
|
||
y = targetCopy[i]
|
||
break
|
||
}
|
||
}
|
||
|
||
if (x < y) return -1
|
||
if (y < x) return 1
|
||
return 0
|
||
}
|
||
|
||
// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
|
||
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
|
||
//
|
||
// Arguments:
|
||
// - buffer - a Buffer to search
|
||
// - val - a string, Buffer, or number
|
||
// - byteOffset - an index into `buffer`; will be clamped to an int32
|
||
// - encoding - an optional encoding, relevant is val is a string
|
||
// - dir - true for indexOf, false for lastIndexOf
|
||
function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
|
||
// Empty buffer means no match
|
||
if (buffer.length === 0) return -1
|
||
|
||
// Normalize byteOffset
|
||
if (typeof byteOffset === 'string') {
|
||
encoding = byteOffset
|
||
byteOffset = 0
|
||
} else if (byteOffset > 0x7fffffff) {
|
||
byteOffset = 0x7fffffff
|
||
} else if (byteOffset < -0x80000000) {
|
||
byteOffset = -0x80000000
|
||
}
|
||
byteOffset = +byteOffset // Coerce to Number.
|
||
if (isNaN(byteOffset)) {
|
||
// byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
|
||
byteOffset = dir ? 0 : (buffer.length - 1)
|
||
}
|
||
|
||
// Normalize byteOffset: negative offsets start from the end of the buffer
|
||
if (byteOffset < 0) byteOffset = buffer.length + byteOffset
|
||
if (byteOffset >= buffer.length) {
|
||
if (dir) return -1
|
||
else byteOffset = buffer.length - 1
|
||
} else if (byteOffset < 0) {
|
||
if (dir) byteOffset = 0
|
||
else return -1
|
||
}
|
||
|
||
// Normalize val
|
||
if (typeof val === 'string') {
|
||
val = Buffer.from(val, encoding)
|
||
}
|
||
|
||
// Finally, search either indexOf (if dir is true) or lastIndexOf
|
||
if (Buffer.isBuffer(val)) {
|
||
// Special case: looking for empty string/buffer always fails
|
||
if (val.length === 0) {
|
||
return -1
|
||
}
|
||
return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
|
||
} else if (typeof val === 'number') {
|
||
val = val & 0xFF // Search for a byte value [0-255]
|
||
if (Buffer.TYPED_ARRAY_SUPPORT &&
|
||
typeof Uint8Array.prototype.indexOf === 'function') {
|
||
if (dir) {
|
||
return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
|
||
} else {
|
||
return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
|
||
}
|
||
}
|
||
return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
|
||
}
|
||
|
||
throw new TypeError('val must be string, number or Buffer')
|
||
}
|
||
|
||
function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
|
||
var indexSize = 1
|
||
var arrLength = arr.length
|
||
var valLength = val.length
|
||
|
||
if (encoding !== undefined) {
|
||
encoding = String(encoding).toLowerCase()
|
||
if (encoding === 'ucs2' || encoding === 'ucs-2' ||
|
||
encoding === 'utf16le' || encoding === 'utf-16le') {
|
||
if (arr.length < 2 || val.length < 2) {
|
||
return -1
|
||
}
|
||
indexSize = 2
|
||
arrLength /= 2
|
||
valLength /= 2
|
||
byteOffset /= 2
|
||
}
|
||
}
|
||
|
||
function read (buf, i) {
|
||
if (indexSize === 1) {
|
||
return buf[i]
|
||
} else {
|
||
return buf.readUInt16BE(i * indexSize)
|
||
}
|
||
}
|
||
|
||
var i
|
||
if (dir) {
|
||
var foundIndex = -1
|
||
for (i = byteOffset; i < arrLength; i++) {
|
||
if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
|
||
if (foundIndex === -1) foundIndex = i
|
||
if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
|
||
} else {
|
||
if (foundIndex !== -1) i -= i - foundIndex
|
||
foundIndex = -1
|
||
}
|
||
}
|
||
} else {
|
||
if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
|
||
for (i = byteOffset; i >= 0; i--) {
|
||
var found = true
|
||
for (var j = 0; j < valLength; j++) {
|
||
if (read(arr, i + j) !== read(val, j)) {
|
||
found = false
|
||
break
|
||
}
|
||
}
|
||
if (found) return i
|
||
}
|
||
}
|
||
|
||
return -1
|
||
}
|
||
|
||
Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
|
||
return this.indexOf(val, byteOffset, encoding) !== -1
|
||
}
|
||
|
||
Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
|
||
return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
|
||
}
|
||
|
||
Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
|
||
return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
|
||
}
|
||
|
||
function hexWrite (buf, string, offset, length) {
|
||
offset = Number(offset) || 0
|
||
var remaining = buf.length - offset
|
||
if (!length) {
|
||
length = remaining
|
||
} else {
|
||
length = Number(length)
|
||
if (length > remaining) {
|
||
length = remaining
|
||
}
|
||
}
|
||
|
||
// must be an even number of digits
|
||
var strLen = string.length
|
||
if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
|
||
|
||
if (length > strLen / 2) {
|
||
length = strLen / 2
|
||
}
|
||
for (var i = 0; i < length; ++i) {
|
||
var parsed = parseInt(string.substr(i * 2, 2), 16)
|
||
if (isNaN(parsed)) return i
|
||
buf[offset + i] = parsed
|
||
}
|
||
return i
|
||
}
|
||
|
||
function utf8Write (buf, string, offset, length) {
|
||
return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
|
||
}
|
||
|
||
function asciiWrite (buf, string, offset, length) {
|
||
return blitBuffer(asciiToBytes(string), buf, offset, length)
|
||
}
|
||
|
||
function latin1Write (buf, string, offset, length) {
|
||
return asciiWrite(buf, string, offset, length)
|
||
}
|
||
|
||
function base64Write (buf, string, offset, length) {
|
||
return blitBuffer(base64ToBytes(string), buf, offset, length)
|
||
}
|
||
|
||
function ucs2Write (buf, string, offset, length) {
|
||
return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
|
||
}
|
||
|
||
Buffer.prototype.write = function write (string, offset, length, encoding) {
|
||
// Buffer#write(string)
|
||
if (offset === undefined) {
|
||
encoding = 'utf8'
|
||
length = this.length
|
||
offset = 0
|
||
// Buffer#write(string, encoding)
|
||
} else if (length === undefined && typeof offset === 'string') {
|
||
encoding = offset
|
||
length = this.length
|
||
offset = 0
|
||
// Buffer#write(string, offset[, length][, encoding])
|
||
} else if (isFinite(offset)) {
|
||
offset = offset | 0
|
||
if (isFinite(length)) {
|
||
length = length | 0
|
||
if (encoding === undefined) encoding = 'utf8'
|
||
} else {
|
||
encoding = length
|
||
length = undefined
|
||
}
|
||
// legacy write(string, encoding, offset, length) - remove in v0.13
|
||
} else {
|
||
throw new Error(
|
||
'Buffer.write(string, encoding, offset[, length]) is no longer supported'
|
||
)
|
||
}
|
||
|
||
var remaining = this.length - offset
|
||
if (length === undefined || length > remaining) length = remaining
|
||
|
||
if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
|
||
throw new RangeError('Attempt to write outside buffer bounds')
|
||
}
|
||
|
||
if (!encoding) encoding = 'utf8'
|
||
|
||
var loweredCase = false
|
||
for (;;) {
|
||
switch (encoding) {
|
||
case 'hex':
|
||
return hexWrite(this, string, offset, length)
|
||
|
||
case 'utf8':
|
||
case 'utf-8':
|
||
return utf8Write(this, string, offset, length)
|
||
|
||
case 'ascii':
|
||
return asciiWrite(this, string, offset, length)
|
||
|
||
case 'latin1':
|
||
case 'binary':
|
||
return latin1Write(this, string, offset, length)
|
||
|
||
case 'base64':
|
||
// Warning: maxLength not taken into account in base64Write
|
||
return base64Write(this, string, offset, length)
|
||
|
||
case 'ucs2':
|
||
case 'ucs-2':
|
||
case 'utf16le':
|
||
case 'utf-16le':
|
||
return ucs2Write(this, string, offset, length)
|
||
|
||
default:
|
||
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
|
||
encoding = ('' + encoding).toLowerCase()
|
||
loweredCase = true
|
||
}
|
||
}
|
||
}
|
||
|
||
Buffer.prototype.toJSON = function toJSON () {
|
||
return {
|
||
type: 'Buffer',
|
||
data: Array.prototype.slice.call(this._arr || this, 0)
|
||
}
|
||
}
|
||
|
||
function base64Slice (buf, start, end) {
|
||
if (start === 0 && end === buf.length) {
|
||
return base64.fromByteArray(buf)
|
||
} else {
|
||
return base64.fromByteArray(buf.slice(start, end))
|
||
}
|
||
}
|
||
|
||
function utf8Slice (buf, start, end) {
|
||
end = Math.min(buf.length, end)
|
||
var res = []
|
||
|
||
var i = start
|
||
while (i < end) {
|
||
var firstByte = buf[i]
|
||
var codePoint = null
|
||
var bytesPerSequence = (firstByte > 0xEF) ? 4
|
||
: (firstByte > 0xDF) ? 3
|
||
: (firstByte > 0xBF) ? 2
|
||
: 1
|
||
|
||
if (i + bytesPerSequence <= end) {
|
||
var secondByte, thirdByte, fourthByte, tempCodePoint
|
||
|
||
switch (bytesPerSequence) {
|
||
case 1:
|
||
if (firstByte < 0x80) {
|
||
codePoint = firstByte
|
||
}
|
||
break
|
||
case 2:
|
||
secondByte = buf[i + 1]
|
||
if ((secondByte & 0xC0) === 0x80) {
|
||
tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
|
||
if (tempCodePoint > 0x7F) {
|
||
codePoint = tempCodePoint
|
||
}
|
||
}
|
||
break
|
||
case 3:
|
||
secondByte = buf[i + 1]
|
||
thirdByte = buf[i + 2]
|
||
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
|
||
tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
|
||
if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
|
||
codePoint = tempCodePoint
|
||
}
|
||
}
|
||
break
|
||
case 4:
|
||
secondByte = buf[i + 1]
|
||
thirdByte = buf[i + 2]
|
||
fourthByte = buf[i + 3]
|
||
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
|
||
tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
|
||
if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
|
||
codePoint = tempCodePoint
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (codePoint === null) {
|
||
// we did not generate a valid codePoint so insert a
|
||
// replacement char (U+FFFD) and advance only 1 byte
|
||
codePoint = 0xFFFD
|
||
bytesPerSequence = 1
|
||
} else if (codePoint > 0xFFFF) {
|
||
// encode to utf16 (surrogate pair dance)
|
||
codePoint -= 0x10000
|
||
res.push(codePoint >>> 10 & 0x3FF | 0xD800)
|
||
codePoint = 0xDC00 | codePoint & 0x3FF
|
||
}
|
||
|
||
res.push(codePoint)
|
||
i += bytesPerSequence
|
||
}
|
||
|
||
return decodeCodePointsArray(res)
|
||
}
|
||
|
||
// Based on http://stackoverflow.com/a/22747272/680742, the browser with
|
||
// the lowest limit is Chrome, with 0x10000 args.
|
||
// We go 1 magnitude less, for safety
|
||
var MAX_ARGUMENTS_LENGTH = 0x1000
|
||
|
||
function decodeCodePointsArray (codePoints) {
|
||
var len = codePoints.length
|
||
if (len <= MAX_ARGUMENTS_LENGTH) {
|
||
return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
|
||
}
|
||
|
||
// Decode in chunks to avoid "call stack size exceeded".
|
||
var res = ''
|
||
var i = 0
|
||
while (i < len) {
|
||
res += String.fromCharCode.apply(
|
||
String,
|
||
codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
|
||
)
|
||
}
|
||
return res
|
||
}
|
||
|
||
function asciiSlice (buf, start, end) {
|
||
var ret = ''
|
||
end = Math.min(buf.length, end)
|
||
|
||
for (var i = start; i < end; ++i) {
|
||
ret += String.fromCharCode(buf[i] & 0x7F)
|
||
}
|
||
return ret
|
||
}
|
||
|
||
function latin1Slice (buf, start, end) {
|
||
var ret = ''
|
||
end = Math.min(buf.length, end)
|
||
|
||
for (var i = start; i < end; ++i) {
|
||
ret += String.fromCharCode(buf[i])
|
||
}
|
||
return ret
|
||
}
|
||
|
||
function hexSlice (buf, start, end) {
|
||
var len = buf.length
|
||
|
||
if (!start || start < 0) start = 0
|
||
if (!end || end < 0 || end > len) end = len
|
||
|
||
var out = ''
|
||
for (var i = start; i < end; ++i) {
|
||
out += toHex(buf[i])
|
||
}
|
||
return out
|
||
}
|
||
|
||
function utf16leSlice (buf, start, end) {
|
||
var bytes = buf.slice(start, end)
|
||
var res = ''
|
||
for (var i = 0; i < bytes.length; i += 2) {
|
||
res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
|
||
}
|
||
return res
|
||
}
|
||
|
||
Buffer.prototype.slice = function slice (start, end) {
|
||
var len = this.length
|
||
start = ~~start
|
||
end = end === undefined ? len : ~~end
|
||
|
||
if (start < 0) {
|
||
start += len
|
||
if (start < 0) start = 0
|
||
} else if (start > len) {
|
||
start = len
|
||
}
|
||
|
||
if (end < 0) {
|
||
end += len
|
||
if (end < 0) end = 0
|
||
} else if (end > len) {
|
||
end = len
|
||
}
|
||
|
||
if (end < start) end = start
|
||
|
||
var newBuf
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
newBuf = this.subarray(start, end)
|
||
newBuf.__proto__ = Buffer.prototype
|
||
} else {
|
||
var sliceLen = end - start
|
||
newBuf = new Buffer(sliceLen, undefined)
|
||
for (var i = 0; i < sliceLen; ++i) {
|
||
newBuf[i] = this[i + start]
|
||
}
|
||
}
|
||
|
||
return newBuf
|
||
}
|
||
|
||
/*
|
||
* Need to make sure that buffer isn't trying to write out of bounds.
|
||
*/
|
||
function checkOffset (offset, ext, length) {
|
||
if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
|
||
if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
|
||
}
|
||
|
||
Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) checkOffset(offset, byteLength, this.length)
|
||
|
||
var val = this[offset]
|
||
var mul = 1
|
||
var i = 0
|
||
while (++i < byteLength && (mul *= 0x100)) {
|
||
val += this[offset + i] * mul
|
||
}
|
||
|
||
return val
|
||
}
|
||
|
||
Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) {
|
||
checkOffset(offset, byteLength, this.length)
|
||
}
|
||
|
||
var val = this[offset + --byteLength]
|
||
var mul = 1
|
||
while (byteLength > 0 && (mul *= 0x100)) {
|
||
val += this[offset + --byteLength] * mul
|
||
}
|
||
|
||
return val
|
||
}
|
||
|
||
Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 1, this.length)
|
||
return this[offset]
|
||
}
|
||
|
||
Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 2, this.length)
|
||
return this[offset] | (this[offset + 1] << 8)
|
||
}
|
||
|
||
Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 2, this.length)
|
||
return (this[offset] << 8) | this[offset + 1]
|
||
}
|
||
|
||
Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
|
||
return ((this[offset]) |
|
||
(this[offset + 1] << 8) |
|
||
(this[offset + 2] << 16)) +
|
||
(this[offset + 3] * 0x1000000)
|
||
}
|
||
|
||
Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
|
||
return (this[offset] * 0x1000000) +
|
||
((this[offset + 1] << 16) |
|
||
(this[offset + 2] << 8) |
|
||
this[offset + 3])
|
||
}
|
||
|
||
Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) checkOffset(offset, byteLength, this.length)
|
||
|
||
var val = this[offset]
|
||
var mul = 1
|
||
var i = 0
|
||
while (++i < byteLength && (mul *= 0x100)) {
|
||
val += this[offset + i] * mul
|
||
}
|
||
mul *= 0x80
|
||
|
||
if (val >= mul) val -= Math.pow(2, 8 * byteLength)
|
||
|
||
return val
|
||
}
|
||
|
||
Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) checkOffset(offset, byteLength, this.length)
|
||
|
||
var i = byteLength
|
||
var mul = 1
|
||
var val = this[offset + --i]
|
||
while (i > 0 && (mul *= 0x100)) {
|
||
val += this[offset + --i] * mul
|
||
}
|
||
mul *= 0x80
|
||
|
||
if (val >= mul) val -= Math.pow(2, 8 * byteLength)
|
||
|
||
return val
|
||
}
|
||
|
||
Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 1, this.length)
|
||
if (!(this[offset] & 0x80)) return (this[offset])
|
||
return ((0xff - this[offset] + 1) * -1)
|
||
}
|
||
|
||
Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 2, this.length)
|
||
var val = this[offset] | (this[offset + 1] << 8)
|
||
return (val & 0x8000) ? val | 0xFFFF0000 : val
|
||
}
|
||
|
||
Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 2, this.length)
|
||
var val = this[offset + 1] | (this[offset] << 8)
|
||
return (val & 0x8000) ? val | 0xFFFF0000 : val
|
||
}
|
||
|
||
Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
|
||
return (this[offset]) |
|
||
(this[offset + 1] << 8) |
|
||
(this[offset + 2] << 16) |
|
||
(this[offset + 3] << 24)
|
||
}
|
||
|
||
Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
|
||
return (this[offset] << 24) |
|
||
(this[offset + 1] << 16) |
|
||
(this[offset + 2] << 8) |
|
||
(this[offset + 3])
|
||
}
|
||
|
||
Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
return ieee754.read(this, offset, true, 23, 4)
|
||
}
|
||
|
||
Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
return ieee754.read(this, offset, false, 23, 4)
|
||
}
|
||
|
||
Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 8, this.length)
|
||
return ieee754.read(this, offset, true, 52, 8)
|
||
}
|
||
|
||
Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 8, this.length)
|
||
return ieee754.read(this, offset, false, 52, 8)
|
||
}
|
||
|
||
function checkInt (buf, value, offset, ext, max, min) {
|
||
if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
|
||
if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
|
||
if (offset + ext > buf.length) throw new RangeError('Index out of range')
|
||
}
|
||
|
||
Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) {
|
||
var maxBytes = Math.pow(2, 8 * byteLength) - 1
|
||
checkInt(this, value, offset, byteLength, maxBytes, 0)
|
||
}
|
||
|
||
var mul = 1
|
||
var i = 0
|
||
this[offset] = value & 0xFF
|
||
while (++i < byteLength && (mul *= 0x100)) {
|
||
this[offset + i] = (value / mul) & 0xFF
|
||
}
|
||
|
||
return offset + byteLength
|
||
}
|
||
|
||
Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) {
|
||
var maxBytes = Math.pow(2, 8 * byteLength) - 1
|
||
checkInt(this, value, offset, byteLength, maxBytes, 0)
|
||
}
|
||
|
||
var i = byteLength - 1
|
||
var mul = 1
|
||
this[offset + i] = value & 0xFF
|
||
while (--i >= 0 && (mul *= 0x100)) {
|
||
this[offset + i] = (value / mul) & 0xFF
|
||
}
|
||
|
||
return offset + byteLength
|
||
}
|
||
|
||
Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
|
||
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
|
||
this[offset] = (value & 0xff)
|
||
return offset + 1
|
||
}
|
||
|
||
function objectWriteUInt16 (buf, value, offset, littleEndian) {
|
||
if (value < 0) value = 0xffff + value + 1
|
||
for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
|
||
buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
|
||
(littleEndian ? i : 1 - i) * 8
|
||
}
|
||
}
|
||
|
||
Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value & 0xff)
|
||
this[offset + 1] = (value >>> 8)
|
||
} else {
|
||
objectWriteUInt16(this, value, offset, true)
|
||
}
|
||
return offset + 2
|
||
}
|
||
|
||
Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value >>> 8)
|
||
this[offset + 1] = (value & 0xff)
|
||
} else {
|
||
objectWriteUInt16(this, value, offset, false)
|
||
}
|
||
return offset + 2
|
||
}
|
||
|
||
function objectWriteUInt32 (buf, value, offset, littleEndian) {
|
||
if (value < 0) value = 0xffffffff + value + 1
|
||
for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
|
||
buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
|
||
}
|
||
}
|
||
|
||
Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset + 3] = (value >>> 24)
|
||
this[offset + 2] = (value >>> 16)
|
||
this[offset + 1] = (value >>> 8)
|
||
this[offset] = (value & 0xff)
|
||
} else {
|
||
objectWriteUInt32(this, value, offset, true)
|
||
}
|
||
return offset + 4
|
||
}
|
||
|
||
Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value >>> 24)
|
||
this[offset + 1] = (value >>> 16)
|
||
this[offset + 2] = (value >>> 8)
|
||
this[offset + 3] = (value & 0xff)
|
||
} else {
|
||
objectWriteUInt32(this, value, offset, false)
|
||
}
|
||
return offset + 4
|
||
}
|
||
|
||
Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) {
|
||
var limit = Math.pow(2, 8 * byteLength - 1)
|
||
|
||
checkInt(this, value, offset, byteLength, limit - 1, -limit)
|
||
}
|
||
|
||
var i = 0
|
||
var mul = 1
|
||
var sub = 0
|
||
this[offset] = value & 0xFF
|
||
while (++i < byteLength && (mul *= 0x100)) {
|
||
if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
|
||
sub = 1
|
||
}
|
||
this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
|
||
}
|
||
|
||
return offset + byteLength
|
||
}
|
||
|
||
Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) {
|
||
var limit = Math.pow(2, 8 * byteLength - 1)
|
||
|
||
checkInt(this, value, offset, byteLength, limit - 1, -limit)
|
||
}
|
||
|
||
var i = byteLength - 1
|
||
var mul = 1
|
||
var sub = 0
|
||
this[offset + i] = value & 0xFF
|
||
while (--i >= 0 && (mul *= 0x100)) {
|
||
if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
|
||
sub = 1
|
||
}
|
||
this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
|
||
}
|
||
|
||
return offset + byteLength
|
||
}
|
||
|
||
Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
|
||
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
|
||
if (value < 0) value = 0xff + value + 1
|
||
this[offset] = (value & 0xff)
|
||
return offset + 1
|
||
}
|
||
|
||
Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value & 0xff)
|
||
this[offset + 1] = (value >>> 8)
|
||
} else {
|
||
objectWriteUInt16(this, value, offset, true)
|
||
}
|
||
return offset + 2
|
||
}
|
||
|
||
Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value >>> 8)
|
||
this[offset + 1] = (value & 0xff)
|
||
} else {
|
||
objectWriteUInt16(this, value, offset, false)
|
||
}
|
||
return offset + 2
|
||
}
|
||
|
||
Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value & 0xff)
|
||
this[offset + 1] = (value >>> 8)
|
||
this[offset + 2] = (value >>> 16)
|
||
this[offset + 3] = (value >>> 24)
|
||
} else {
|
||
objectWriteUInt32(this, value, offset, true)
|
||
}
|
||
return offset + 4
|
||
}
|
||
|
||
Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
|
||
if (value < 0) value = 0xffffffff + value + 1
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value >>> 24)
|
||
this[offset + 1] = (value >>> 16)
|
||
this[offset + 2] = (value >>> 8)
|
||
this[offset + 3] = (value & 0xff)
|
||
} else {
|
||
objectWriteUInt32(this, value, offset, false)
|
||
}
|
||
return offset + 4
|
||
}
|
||
|
||
function checkIEEE754 (buf, value, offset, ext, max, min) {
|
||
if (offset + ext > buf.length) throw new RangeError('Index out of range')
|
||
if (offset < 0) throw new RangeError('Index out of range')
|
||
}
|
||
|
||
function writeFloat (buf, value, offset, littleEndian, noAssert) {
|
||
if (!noAssert) {
|
||
checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
|
||
}
|
||
ieee754.write(buf, value, offset, littleEndian, 23, 4)
|
||
return offset + 4
|
||
}
|
||
|
||
Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
|
||
return writeFloat(this, value, offset, true, noAssert)
|
||
}
|
||
|
||
Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
|
||
return writeFloat(this, value, offset, false, noAssert)
|
||
}
|
||
|
||
function writeDouble (buf, value, offset, littleEndian, noAssert) {
|
||
if (!noAssert) {
|
||
checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
|
||
}
|
||
ieee754.write(buf, value, offset, littleEndian, 52, 8)
|
||
return offset + 8
|
||
}
|
||
|
||
Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
|
||
return writeDouble(this, value, offset, true, noAssert)
|
||
}
|
||
|
||
Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
|
||
return writeDouble(this, value, offset, false, noAssert)
|
||
}
|
||
|
||
// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
|
||
Buffer.prototype.copy = function copy (target, targetStart, start, end) {
|
||
if (!start) start = 0
|
||
if (!end && end !== 0) end = this.length
|
||
if (targetStart >= target.length) targetStart = target.length
|
||
if (!targetStart) targetStart = 0
|
||
if (end > 0 && end < start) end = start
|
||
|
||
// Copy 0 bytes; we're done
|
||
if (end === start) return 0
|
||
if (target.length === 0 || this.length === 0) return 0
|
||
|
||
// Fatal error conditions
|
||
if (targetStart < 0) {
|
||
throw new RangeError('targetStart out of bounds')
|
||
}
|
||
if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
|
||
if (end < 0) throw new RangeError('sourceEnd out of bounds')
|
||
|
||
// Are we oob?
|
||
if (end > this.length) end = this.length
|
||
if (target.length - targetStart < end - start) {
|
||
end = target.length - targetStart + start
|
||
}
|
||
|
||
var len = end - start
|
||
var i
|
||
|
||
if (this === target && start < targetStart && targetStart < end) {
|
||
// descending copy from end
|
||
for (i = len - 1; i >= 0; --i) {
|
||
target[i + targetStart] = this[i + start]
|
||
}
|
||
} else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
|
||
// ascending copy from start
|
||
for (i = 0; i < len; ++i) {
|
||
target[i + targetStart] = this[i + start]
|
||
}
|
||
} else {
|
||
Uint8Array.prototype.set.call(
|
||
target,
|
||
this.subarray(start, start + len),
|
||
targetStart
|
||
)
|
||
}
|
||
|
||
return len
|
||
}
|
||
|
||
// Usage:
|
||
// buffer.fill(number[, offset[, end]])
|
||
// buffer.fill(buffer[, offset[, end]])
|
||
// buffer.fill(string[, offset[, end]][, encoding])
|
||
Buffer.prototype.fill = function fill (val, start, end, encoding) {
|
||
// Handle string cases:
|
||
if (typeof val === 'string') {
|
||
if (typeof start === 'string') {
|
||
encoding = start
|
||
start = 0
|
||
end = this.length
|
||
} else if (typeof end === 'string') {
|
||
encoding = end
|
||
end = this.length
|
||
}
|
||
if (val.length === 1) {
|
||
var code = val.charCodeAt(0)
|
||
if (code < 256) {
|
||
val = code
|
||
}
|
||
}
|
||
if (encoding !== undefined && typeof encoding !== 'string') {
|
||
throw new TypeError('encoding must be a string')
|
||
}
|
||
if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
|
||
throw new TypeError('Unknown encoding: ' + encoding)
|
||
}
|
||
} else if (typeof val === 'number') {
|
||
val = val & 255
|
||
}
|
||
|
||
// Invalid ranges are not set to a default, so can range check early.
|
||
if (start < 0 || this.length < start || this.length < end) {
|
||
throw new RangeError('Out of range index')
|
||
}
|
||
|
||
if (end <= start) {
|
||
return this
|
||
}
|
||
|
||
start = start >>> 0
|
||
end = end === undefined ? this.length : end >>> 0
|
||
|
||
if (!val) val = 0
|
||
|
||
var i
|
||
if (typeof val === 'number') {
|
||
for (i = start; i < end; ++i) {
|
||
this[i] = val
|
||
}
|
||
} else {
|
||
var bytes = Buffer.isBuffer(val)
|
||
? val
|
||
: utf8ToBytes(new Buffer(val, encoding).toString())
|
||
var len = bytes.length
|
||
for (i = 0; i < end - start; ++i) {
|
||
this[i + start] = bytes[i % len]
|
||
}
|
||
}
|
||
|
||
return this
|
||
}
|
||
|
||
// HELPER FUNCTIONS
|
||
// ================
|
||
|
||
var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
|
||
|
||
function base64clean (str) {
|
||
// Node strips out invalid characters like \n and \t from the string, base64-js does not
|
||
str = stringtrim(str).replace(INVALID_BASE64_RE, '')
|
||
// Node converts strings with length < 2 to ''
|
||
if (str.length < 2) return ''
|
||
// Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
|
||
while (str.length % 4 !== 0) {
|
||
str = str + '='
|
||
}
|
||
return str
|
||
}
|
||
|
||
function stringtrim (str) {
|
||
if (str.trim) return str.trim()
|
||
return str.replace(/^\s+|\s+$/g, '')
|
||
}
|
||
|
||
function toHex (n) {
|
||
if (n < 16) return '0' + n.toString(16)
|
||
return n.toString(16)
|
||
}
|
||
|
||
function utf8ToBytes (string, units) {
|
||
units = units || Infinity
|
||
var codePoint
|
||
var length = string.length
|
||
var leadSurrogate = null
|
||
var bytes = []
|
||
|
||
for (var i = 0; i < length; ++i) {
|
||
codePoint = string.charCodeAt(i)
|
||
|
||
// is surrogate component
|
||
if (codePoint > 0xD7FF && codePoint < 0xE000) {
|
||
// last char was a lead
|
||
if (!leadSurrogate) {
|
||
// no lead yet
|
||
if (codePoint > 0xDBFF) {
|
||
// unexpected trail
|
||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||
continue
|
||
} else if (i + 1 === length) {
|
||
// unpaired lead
|
||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||
continue
|
||
}
|
||
|
||
// valid lead
|
||
leadSurrogate = codePoint
|
||
|
||
continue
|
||
}
|
||
|
||
// 2 leads in a row
|
||
if (codePoint < 0xDC00) {
|
||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||
leadSurrogate = codePoint
|
||
continue
|
||
}
|
||
|
||
// valid surrogate pair
|
||
codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
|
||
} else if (leadSurrogate) {
|
||
// valid bmp char, but last char was a lead
|
||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||
}
|
||
|
||
leadSurrogate = null
|
||
|
||
// encode utf8
|
||
if (codePoint < 0x80) {
|
||
if ((units -= 1) < 0) break
|
||
bytes.push(codePoint)
|
||
} else if (codePoint < 0x800) {
|
||
if ((units -= 2) < 0) break
|
||
bytes.push(
|
||
codePoint >> 0x6 | 0xC0,
|
||
codePoint & 0x3F | 0x80
|
||
)
|
||
} else if (codePoint < 0x10000) {
|
||
if ((units -= 3) < 0) break
|
||
bytes.push(
|
||
codePoint >> 0xC | 0xE0,
|
||
codePoint >> 0x6 & 0x3F | 0x80,
|
||
codePoint & 0x3F | 0x80
|
||
)
|
||
} else if (codePoint < 0x110000) {
|
||
if ((units -= 4) < 0) break
|
||
bytes.push(
|
||
codePoint >> 0x12 | 0xF0,
|
||
codePoint >> 0xC & 0x3F | 0x80,
|
||
codePoint >> 0x6 & 0x3F | 0x80,
|
||
codePoint & 0x3F | 0x80
|
||
)
|
||
} else {
|
||
throw new Error('Invalid code point')
|
||
}
|
||
}
|
||
|
||
return bytes
|
||
}
|
||
|
||
function asciiToBytes (str) {
|
||
var byteArray = []
|
||
for (var i = 0; i < str.length; ++i) {
|
||
// Node's code seems to be doing this and not & 0x7F..
|
||
byteArray.push(str.charCodeAt(i) & 0xFF)
|
||
}
|
||
return byteArray
|
||
}
|
||
|
||
function utf16leToBytes (str, units) {
|
||
var c, hi, lo
|
||
var byteArray = []
|
||
for (var i = 0; i < str.length; ++i) {
|
||
if ((units -= 2) < 0) break
|
||
|
||
c = str.charCodeAt(i)
|
||
hi = c >> 8
|
||
lo = c % 256
|
||
byteArray.push(lo)
|
||
byteArray.push(hi)
|
||
}
|
||
|
||
return byteArray
|
||
}
|
||
|
||
function base64ToBytes (str) {
|
||
return base64.toByteArray(base64clean(str))
|
||
}
|
||
|
||
function blitBuffer (src, dst, offset, length) {
|
||
for (var i = 0; i < length; ++i) {
|
||
if ((i + offset >= dst.length) || (i >= src.length)) break
|
||
dst[i + offset] = src[i]
|
||
}
|
||
return i
|
||
}
|
||
|
||
function isnan (val) {
|
||
return val !== val // eslint-disable-line no-self-compare
|
||
}
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))
|
||
|
||
/***/ }),
|
||
/* 3 */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony export (immutable) */ __webpack_exports__["a"] = makeInputTemplate;
|
||
function makeInputTemplate() {
|
||
var publicKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
||
var fulfills = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
||
var fulfillment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
||
|
||
return {
|
||
fulfillment: fulfillment,
|
||
fulfills: fulfills,
|
||
'owners_before': publicKeys
|
||
};
|
||
}
|
||
|
||
/***/ }),
|
||
/* 4 */
|
||
/***/ (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___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_json_stable_stringify__);
|
||
/* 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 match = void 0;
|
||
tx.inputs.forEach(function (_input) {
|
||
|
||
if (!(_input && input && _input['fulfills'] && input['fulfills'] && !(_input['fulfills']['txid'] === input['fulfills']['txid'] && _input['fulfills']['output'] === input['fulfills']['output']))) {
|
||
match = tx.inputs.indexOf(_input);
|
||
}
|
||
_input.fulfillment = null;
|
||
});
|
||
if (input && match >= 0 && tx.inputs) {
|
||
tx.inputs = [tx.inputs[match]];
|
||
}
|
||
// Sort the keys
|
||
return __WEBPACK_IMPORTED_MODULE_0_json_stable_stringify___default()(tx, function (a, b) {
|
||
return a.key > b.key ? 1 : -1;
|
||
});
|
||
}
|
||
|
||
/***/ }),
|
||
/* 5 */
|
||
/***/ (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()<r)throw new RangeError("Invalid typed array length");return t.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(r),e.__proto__=t.prototype):(null===e&&(e=new t(r)),e.length=r),e}function t(e,r,n){if(!(t.TYPED_ARRAY_SUPPORT||this instanceof t))return new t(e,r,n);if("number"==typeof e){if("string"==typeof r)throw new Error("If encoding is specified then the first argument must be a string");return h(this,e)}return f(this,e,r,n)}function f(t,e,r,n){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?l(t,e,r,n):"string"==typeof e?c(t,e,r):p(t,e)}function s(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function u(t,e,r,n){return s(e),e<=0?a(t,e):void 0!==r?"string"==typeof n?a(t,e).fill(r,n):a(t,e).fill(r):a(t,e)}function h(e,r){if(s(r),e=a(e,r<0?0:0|b(r)),!t.TYPED_ARRAY_SUPPORT)for(var n=0;n<r;++n)e[n]=0;return e}function c(e,r,n){if("string"==typeof n&&""!==n||(n="utf8"),!t.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var i=0|y(r,n);e=a(e,i);var o=e.write(r,n);return o!==i&&(e=e.slice(0,o)),e}function d(t,e){var r=e.length<0?0:0|b(e.length);t=a(t,r);for(var n=0;n<r;n+=1)t[n]=255&e[n];return t}function l(e,r,n,i){if(r.byteLength,n<0||r.byteLength<n)throw new RangeError("'offset' is out of bounds");if(r.byteLength<n+(i||0))throw new RangeError("'length' is out of bounds");return r=void 0===n&&void 0===i?new Uint8Array(r):void 0===i?new Uint8Array(r,n):new Uint8Array(r,n,i),t.TYPED_ARRAY_SUPPORT?(e=r,e.__proto__=t.prototype):e=d(e,r),e}function p(e,r){if(t.isBuffer(r)){var n=0|b(r.length);return e=a(e,n),0===e.length?e:(r.copy(e,0,0,n),e)}if(r){if("undefined"!=typeof ArrayBuffer&&r.buffer instanceof ArrayBuffer||"length"in r)return"number"!=typeof r.length||Z(r.length)?a(e,0):d(e,r);if("Buffer"===r.type&&Q(r.data))return d(e,r.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function b(t){if(t>=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;u<f;u++)if(o(t,u)===o(e,h===-1?0:u-h)){if(h===-1&&(h=u),u-h+1===s)return h*a}else h!==-1&&(u-=u-h),h=-1}else for(r+s>f&&(r=f-s),u=r;u>=0;u--){for(var c=!0,d=0;d<s;d++)if(o(t,u+d)!==o(e,d)){c=!1;break}if(c)return u}return-1}function M(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n),n>i&&(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;a<n;++a){var f=parseInt(e.substr(2*a,2),16);if(isNaN(f))return a;t[r+a]=f}return a}function S(t,e,r,n){return W(V(e,t.length-r),t,r,n)}function E(t,e,r,n){return W(H(e),t,r,n)}function A(t,e,r,n){return E(t,e,r,n)}function k(t,e,r,n){return W(Y(e),t,r,n)}function x(t,e,r,n){return W(X(e,t.length-r),t,r,n)}function I(t,e,r){return 0===e&&r===t.length?J.fromByteArray(t):J.fromByteArray(t.slice(e,r))}function B(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var o=t[i],a=null,f=o>239?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;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=tt));return r}function R(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function P(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function T(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i="",o=e;o<r;++o)i+=G(t[o]);return i}function j(t,e,r){for(var n=t.slice(e,r),i="",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function C(t,e,r){if(t%1!==0||t<0)throw new RangeError("offset is not uint");if(t+e>r)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||r<a)throw new RangeError('"value" argument is out of bounds');if(n+i>e.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<o;++i)t[r+i]=(e&255<<8*(n?i:1-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<o;++i)t[r+i]=e>>>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;a<n;++a){if(r=t.charCodeAt(a),r>55295&&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<t.length;++r)e.push(255&t.charCodeAt(r));return e}function X(t,e){for(var r,n,i,o=[],a=0;a<t.length&&!((e-=2)<0);++a)r=t.charCodeAt(a),n=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<n&&!(i+r>=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);o<a;++o)if(e[o]!==r[o]){n=e[o],i=r[o];break}return n<i?-1:i<n?1:0},t.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},t.concat=function(e,r){if(!Q(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return t.alloc(0);var n;if(void 0===r)for(r=0,n=0;n<e.length;++n)r+=e[n].length;var i=t.allocUnsafe(r),o=0;for(n=0;n<e.length;++n){var a=e[n];if(!t.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(i,o),o+=a.length}return i},t.byteLength=y,t.prototype._isBuffer=!0,t.prototype.swap16=function(){var t=this.length;if(t%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)g(this,e,e+1);return this},t.prototype.swap32=function(){var t=this.length;if(t%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)g(this,e,e+3),g(this,e+1,e+2);return this},t.prototype.swap64=function(){var t=this.length;if(t%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)g(this,e,e+7),g(this,e+1,e+6),g(this,e+2,e+5),g(this,e+3,e+4);return this},t.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?B(this,0,t):m.apply(this,arguments)},t.prototype.equals=function(e){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===t.compare(this,e)},t.prototype.inspect=function(){var t="",r=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),"<Buffer "+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;c<s;++c)if(u[c]!==h[c]){a=u[c],f=h[c];break}return a<f?-1:f<a?1:0},t.prototype.includes=function(t,e,r){return this.indexOf(t,e,r)!==-1},t.prototype.indexOf=function(t,e,r){return w(this,t,e,r,!0)},t.prototype.lastIndexOf=function(t,e,r){return w(this,t,e,r,!1)},t.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(r)?(r|=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(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),r<e&&(r=e);var i;if(t.TYPED_ARRAY_SUPPORT)i=this.subarray(e,r),i.__proto__=t.prototype;else{var o=r-e;i=new t(o,void 0);for(var a=0;a<o;++a)i[a]=this[a+e]}return i},t.prototype.readUIntLE=function(t,e,r){t|=0,e|=0,r||C(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return n},t.prototype.readUIntBE=function(t,e,r){t|=0,e|=0,r||C(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(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<e&&(i*=256);)n+=this[t+o]*i;return i*=128,n>=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<r&&(o*=256);)this[e+a]=t/o&255;return e+r},t.prototype.writeUIntBE=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=r-1,a=1;for(this[e+o]=255&t;--o>=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<r&&(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.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<n&&(i=n),i===n)return 0;if(0===e.length||0===this.length)return 0;if(r<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=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<i-n&&(i=e.length-r+n);var o,a=i-n;if(this===e&&n<r&&r<i)for(o=a-1;o>=0;--o)e[o+r]=this[o+n];else if(a<1e3||!t.TYPED_ARRAY_SUPPORT)for(o=0;o<a;++o)e[o+r]=this[o+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+a),r);return a},t.prototype.fill=function(e,r,n,i){if("string"==typeof e){if("string"==typeof r?(i=r,r=0,n=this.length):"string"==typeof n&&(i=n,n=this.length),1===e.length){var o=e.charCodeAt(0);o<256&&(e=o)}if(void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!t.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"==typeof e&&(e&=255);if(r<0||this.length<r||this.length<n)throw new RangeError("Out of range index");if(n<=r)return this;r>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var a;if("number"==typeof e)for(a=r;a<n;++a)this[a]=e;else{var f=t.isBuffer(e)?e:V(new t(e,i).toString()),s=f.length;for(a=0;a<n-r;++a)this[a+r]=f[a%s]}return this};var et=/[^+\/0-9A-Za-z-_]/g}).call(e,r(1).Buffer,r(39))},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,r){var n=r(6);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,r){var n=r(87)("wks"),i=r(48),o=r(4).Symbol,a="function"==typeof o,f=t.exports=function(t){return n[t]||(n[t]=a&&o[t]||(a?o:i)("Symbol."+t))};f.store=n},function(t,e,r){t.exports=!r(5)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(3),i=r(174),o=r(29),a=Object.defineProperty;e.f=r(8)?Object.defineProperty:function(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return a(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},function(t,e,r){var n=r(38),i=Math.min;t.exports=function(t){return t>0?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+"</"+e+">"};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<i;o++){var a=t.charCodeAt(o)-48;n<<=4,n|=a>=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<o;a++){var f=t.charCodeAt(a)-48;i*=n,i+=f>=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<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>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<n;u++){for(var h=s>>>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<r.length-1;o++){var a=i;i=0;for(var f=67108863&n,s=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=s;u++){var h=o-u,c=0|t.words[h],d=0|e.words[u],l=c*d,p=67108863&l;a=a+(l/67108864|0)|0,p=p+f|0,f=67108863&p,a=a+(p>>>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<this.length;i++)this.words[i]=0;var o,a,f=0;if("be"===r)for(i=t.length-1,o=0;i>=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);else if("le"===r)for(i=0,o=0;i<t.length;i+=3)a=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>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<this.length;r++)this.words[r]=0;var n,i,o=0;for(r=t.length-6,n=0;r>=e;r-=6)i=a(t,r,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==e&&(i=a(t,e,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=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;h<s;h+=n)u=f(t,h,h+n,e),this.imuln(i),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==a){var c=1;for(u=f(t,h,t.length,e),h=0;h<a;h++)c*=e;this.imuln(c),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},o.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},o.prototype.clone=function(){var t=new o(null);return this.copy(t),t},o.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&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?"<BN-R: ":"<BN: ")+this.toString(16)+">"};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<this.length;a++){var f=this.words[a],s=(16777215&(f<<i|o)).toString(16);o=f>>>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<o;f++)u[f]=0}else{for(f=0;f<o-i;f++)u[f]=0;for(f=0;!h.isZero();f++)a=h.andln(255),
|
||
h.iushrn(8),u[o-f-1]=a}return u},Math.clz32?o.prototype._countBits=function(t){return 32-Math.clz32(t)}:o.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0===(8191&e)&&(r+=13,e>>>=13),0===(127&e)&&(r+=7,e>>>=7),0===(15&e)&&(r+=4,e>>>=4),0===(3&e)&&(r+=2,e>>>=2),0===(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},o.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},o.prototype.ior=function(t){return n(0===(this.negative|t.negative)),this.iuor(t)},o.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},o.prototype.iand=function(t){return n(0===(this.negative|t.negative)),this.iuand(t)},o.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},o.prototype.ixor=function(t){return n(0===(this.negative|t.negative)),this.iuxor(t)},o.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),e?this.words[r]=this.words[r]|1<<i:this.words[r]=this.words[r]&~(1<<i),this.strip()},o.prototype.iadd=function(t){var e;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();var r,n;this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o<n.length;o++)e=(0|r.words[o])+(0|n.words[o])+i,this.words[o]=67108863&e,i=e>>>26;for(;0!==i&&o<r.length;o++)e=(0|r.words[o])+i,this.words[o]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},o.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=t):(n=t,i=this);for(var o=0,a=0;a<i.length;a++)e=(0|n.words[a])-(0|i.words[a])+o,o=e>>26,this.words[a]=67108863&e;for(;0!==o&&a<n.length;a++)e=(0|n.words[a])+o,o=e>>26,this.words[a]=67108863&e;if(0===o&&a<n.length&&n!==this)for(;a<n.length;a++)this.words[a]=n.words[a];return this.length=Math.max(this.length,a),n!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(t){return this.clone().isub(t)};var E=function(t,e,r){var n,i,o,a=t.words,f=e.words,s=r.words,u=0,h=0|a[0],c=8191&h,d=h>>>13,l=0|a[1],p=8191&l,b=l>>>13,v=0|a[2],y=8191&v,m=v>>>13,g=0|a[3],w=8191&g,_=g>>>13,M=0|a[4],S=8191&M,E=M>>>13,A=0|a[5],k=8191&A,x=A>>>13,I=0|a[6],B=8191&I,O=I>>>13,R=0|a[7],P=8191&R,T=R>>>13,j=0|a[8],C=8191&j,N=j>>>13,L=0|a[9],U=8191&L,z=L>>>13,D=0|f[0],q=8191&D,F=D>>>13,K=0|f[1],G=8191&K,V=K>>>13,H=0|f[2],X=8191&H,Y=H>>>13,W=0|f[3],Z=8191&W,J=W>>>13,$=0|f[4],Q=8191&$,tt=$>>>13,et=0|f[5],rt=8191&et,nt=et>>>13,it=0|f[6],ot=8191&it,at=it>>>13,ft=0|f[7],st=8191&ft,ut=ft>>>13,ht=0|f[8],ct=8191&ht,dt=ht>>>13,lt=0|f[9],pt=8191<,bt=lt>>>13;r.negative=t.negative^e.negative,r.length=19,n=Math.imul(c,q),i=Math.imul(c,F),i=i+Math.imul(d,q)|0,o=Math.imul(d,F);var vt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(p,q),i=Math.imul(p,F),i=i+Math.imul(b,q)|0,o=Math.imul(b,F),n=n+Math.imul(c,G)|0,i=i+Math.imul(c,V)|0,i=i+Math.imul(d,G)|0,o=o+Math.imul(d,V)|0;var yt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,q),i=Math.imul(y,F),i=i+Math.imul(m,q)|0,o=Math.imul(m,F),n=n+Math.imul(p,G)|0,i=i+Math.imul(p,V)|0,i=i+Math.imul(b,G)|0,o=o+Math.imul(b,V)|0,n=n+Math.imul(c,X)|0,i=i+Math.imul(c,Y)|0,i=i+Math.imul(d,X)|0,o=o+Math.imul(d,Y)|0;var mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(w,q),i=Math.imul(w,F),i=i+Math.imul(_,q)|0,o=Math.imul(_,F),n=n+Math.imul(y,G)|0,i=i+Math.imul(y,V)|0,i=i+Math.imul(m,G)|0,o=o+Math.imul(m,V)|0,n=n+Math.imul(p,X)|0,i=i+Math.imul(p,Y)|0,i=i+Math.imul(b,X)|0,o=o+Math.imul(b,Y)|0,n=n+Math.imul(c,Z)|0,i=i+Math.imul(c,J)|0,i=i+Math.imul(d,Z)|0,o=o+Math.imul(d,J)|0;var gt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(S,q),i=Math.imul(S,F),i=i+Math.imul(E,q)|0,o=Math.imul(E,F),n=n+Math.imul(w,G)|0,i=i+Math.imul(w,V)|0,i=i+Math.imul(_,G)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,X)|0,i=i+Math.imul(y,Y)|0,i=i+Math.imul(m,X)|0,o=o+Math.imul(m,Y)|0,n=n+Math.imul(p,Z)|0,i=i+Math.imul(p,J)|0,i=i+Math.imul(b,Z)|0,o=o+Math.imul(b,J)|0,n=n+Math.imul(c,Q)|0,i=i+Math.imul(c,tt)|0,i=i+Math.imul(d,Q)|0,o=o+Math.imul(d,tt)|0;var wt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,q),i=Math.imul(k,F),i=i+Math.imul(x,q)|0,o=Math.imul(x,F),n=n+Math.imul(S,G)|0,i=i+Math.imul(S,V)|0,i=i+Math.imul(E,G)|0,o=o+Math.imul(E,V)|0,n=n+Math.imul(w,X)|0,i=i+Math.imul(w,Y)|0,i=i+Math.imul(_,X)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,Z)|0,i=i+Math.imul(y,J)|0,i=i+Math.imul(m,Z)|0,o=o+Math.imul(m,J)|0,n=n+Math.imul(p,Q)|0,i=i+Math.imul(p,tt)|0,i=i+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,n=n+Math.imul(c,rt)|0,i=i+Math.imul(c,nt)|0,i=i+Math.imul(d,rt)|0,o=o+Math.imul(d,nt)|0;var _t=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(B,q),i=Math.imul(B,F),i=i+Math.imul(O,q)|0,o=Math.imul(O,F),n=n+Math.imul(k,G)|0,i=i+Math.imul(k,V)|0,i=i+Math.imul(x,G)|0,o=o+Math.imul(x,V)|0,n=n+Math.imul(S,X)|0,i=i+Math.imul(S,Y)|0,i=i+Math.imul(E,X)|0,o=o+Math.imul(E,Y)|0,n=n+Math.imul(w,Z)|0,i=i+Math.imul(w,J)|0,i=i+Math.imul(_,Z)|0,o=o+Math.imul(_,J)|0,n=n+Math.imul(y,Q)|0,i=i+Math.imul(y,tt)|0,i=i+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0,n=n+Math.imul(p,rt)|0,i=i+Math.imul(p,nt)|0,i=i+Math.imul(b,rt)|0,o=o+Math.imul(b,nt)|0,n=n+Math.imul(c,ot)|0,i=i+Math.imul(c,at)|0,i=i+Math.imul(d,ot)|0,o=o+Math.imul(d,at)|0;var Mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,q),i=Math.imul(P,F),i=i+Math.imul(T,q)|0,o=Math.imul(T,F),n=n+Math.imul(B,G)|0,i=i+Math.imul(B,V)|0,i=i+Math.imul(O,G)|0,o=o+Math.imul(O,V)|0,n=n+Math.imul(k,X)|0,i=i+Math.imul(k,Y)|0,i=i+Math.imul(x,X)|0,o=o+Math.imul(x,Y)|0,n=n+Math.imul(S,Z)|0,i=i+Math.imul(S,J)|0,i=i+Math.imul(E,Z)|0,o=o+Math.imul(E,J)|0,n=n+Math.imul(w,Q)|0,i=i+Math.imul(w,tt)|0,i=i+Math.imul(_,Q)|0,o=o+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=i+Math.imul(y,nt)|0,i=i+Math.imul(m,rt)|0,o=o+Math.imul(m,nt)|0,n=n+Math.imul(p,ot)|0,i=i+Math.imul(p,at)|0,i=i+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0,n=n+Math.imul(c,st)|0,i=i+Math.imul(c,ut)|0,i=i+Math.imul(d,st)|0,o=o+Math.imul(d,ut)|0;var St=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(C,q),i=Math.imul(C,F),i=i+Math.imul(N,q)|0,o=Math.imul(N,F),n=n+Math.imul(P,G)|0,i=i+Math.imul(P,V)|0,i=i+Math.imul(T,G)|0,o=o+Math.imul(T,V)|0,n=n+Math.imul(B,X)|0,i=i+Math.imul(B,Y)|0,i=i+Math.imul(O,X)|0,o=o+Math.imul(O,Y)|0,n=n+Math.imul(k,Z)|0,i=i+Math.imul(k,J)|0,i=i+Math.imul(x,Z)|0,o=o+Math.imul(x,J)|0,n=n+Math.imul(S,Q)|0,i=i+Math.imul(S,tt)|0,i=i+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,n=n+Math.imul(w,rt)|0,i=i+Math.imul(w,nt)|0,i=i+Math.imul(_,rt)|0,o=o+Math.imul(_,nt)|0,n=n+Math.imul(y,ot)|0,i=i+Math.imul(y,at)|0,i=i+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0,n=n+Math.imul(p,st)|0,i=i+Math.imul(p,ut)|0,i=i+Math.imul(b,st)|0,o=o+Math.imul(b,ut)|0,n=n+Math.imul(c,ct)|0,i=i+Math.imul(c,dt)|0,i=i+Math.imul(d,ct)|0,o=o+Math.imul(d,dt)|0;var Et=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(U,q),i=Math.imul(U,F),i=i+Math.imul(z,q)|0,o=Math.imul(z,F),n=n+Math.imul(C,G)|0,i=i+Math.imul(C,V)|0,i=i+Math.imul(N,G)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,X)|0,i=i+Math.imul(P,Y)|0,i=i+Math.imul(T,X)|0,o=o+Math.imul(T,Y)|0,n=n+Math.imul(B,Z)|0,i=i+Math.imul(B,J)|0,i=i+Math.imul(O,Z)|0,o=o+Math.imul(O,J)|0,n=n+Math.imul(k,Q)|0,i=i+Math.imul(k,tt)|0,i=i+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,n=n+Math.imul(S,rt)|0,i=i+Math.imul(S,nt)|0,i=i+Math.imul(E,rt)|0,o=o+Math.imul(E,nt)|0,n=n+Math.imul(w,ot)|0,i=i+Math.imul(w,at)|0,i=i+Math.imul(_,ot)|0,o=o+Math.imul(_,at)|0,n=n+Math.imul(y,st)|0,i=i+Math.imul(y,ut)|0,i=i+Math.imul(m,st)|0,o=o+Math.imul(m,ut)|0,n=n+Math.imul(p,ct)|0,i=i+Math.imul(p,dt)|0,i=i+Math.imul(b,ct)|0,o=o+Math.imul(b,dt)|0,n=n+Math.imul(c,pt)|0,i=i+Math.imul(c,bt)|0,i=i+Math.imul(d,pt)|0,o=o+Math.imul(d,bt)|0;var At=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(U,G),i=Math.imul(U,V),i=i+Math.imul(z,G)|0,o=Math.imul(z,V),n=n+Math.imul(C,X)|0,i=i+Math.imul(C,Y)|0,i=i+Math.imul(N,X)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(P,Z)|0,i=i+Math.imul(P,J)|0,i=i+Math.imul(T,Z)|0,o=o+Math.imul(T,J)|0,n=n+Math.imul(B,Q)|0,i=i+Math.imul(B,tt)|0,i=i+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,n=n+Math.imul(k,rt)|0,i=i+Math.imul(k,nt)|0,i=i+Math.imul(x,rt)|0,o=o+Math.imul(x,nt)|0,n=n+Math.imul(S,ot)|0,i=i+Math.imul(S,at)|0,i=i+Math.imul(E,ot)|0,o=o+Math.imul(E,at)|0,n=n+Math.imul(w,st)|0,i=i+Math.imul(w,ut)|0,i=i+Math.imul(_,st)|0,o=o+Math.imul(_,ut)|0,n=n+Math.imul(y,ct)|0,i=i+Math.imul(y,dt)|0,i=i+Math.imul(m,ct)|0,o=o+Math.imul(m,dt)|0,n=n+Math.imul(p,pt)|0,i=i+Math.imul(p,bt)|0,i=i+Math.imul(b,pt)|0,o=o+Math.imul(b,bt)|0;var kt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(U,X),i=Math.imul(U,Y),i=i+Math.imul(z,X)|0,o=Math.imul(z,Y),n=n+Math.imul(C,Z)|0,i=i+Math.imul(C,J)|0,i=i+Math.imul(N,Z)|0,o=o+Math.imul(N,J)|0,n=n+Math.imul(P,Q)|0,i=i+Math.imul(P,tt)|0,i=i+Math.imul(T,Q)|0,o=o+Math.imul(T,tt)|0,n=n+Math.imul(B,rt)|0,i=i+Math.imul(B,nt)|0,i=i+Math.imul(O,rt)|0,o=o+Math.imul(O,nt)|0,n=n+Math.imul(k,ot)|0,i=i+Math.imul(k,at)|0,i=i+Math.imul(x,ot)|0,o=o+Math.imul(x,at)|0,n=n+Math.imul(S,st)|0,i=i+Math.imul(S,ut)|0,i=i+Math.imul(E,st)|0,o=o+Math.imul(E,ut)|0,n=n+Math.imul(w,ct)|0,i=i+Math.imul(w,dt)|0,i=i+Math.imul(_,ct)|0,o=o+Math.imul(_,dt)|0,n=n+Math.imul(y,pt)|0,i=i+Math.imul(y,bt)|0,i=i+Math.imul(m,pt)|0,o=o+Math.imul(m,bt)|0;var xt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(U,Z),i=Math.imul(U,J),i=i+Math.imul(z,Z)|0,o=Math.imul(z,J),n=n+Math.imul(C,Q)|0,i=i+Math.imul(C,tt)|0,i=i+Math.imul(N,Q)|0,o=o+Math.imul(N,tt)|0,n=n+Math.imul(P,rt)|0,i=i+Math.imul(P,nt)|0,i=i+Math.imul(T,rt)|0,o=o+Math.imul(T,nt)|0,n=n+Math.imul(B,ot)|0,i=i+Math.imul(B,at)|0,i=i+Math.imul(O,ot)|0,o=o+Math.imul(O,at)|0,n=n+Math.imul(k,st)|0,i=i+Math.imul(k,ut)|0,i=i+Math.imul(x,st)|0,o=o+Math.imul(x,ut)|0,n=n+Math.imul(S,ct)|0,i=i+Math.imul(S,dt)|0,i=i+Math.imul(E,ct)|0,o=o+Math.imul(E,dt)|0,n=n+Math.imul(w,pt)|0,i=i+Math.imul(w,bt)|0,i=i+Math.imul(_,pt)|0,o=o+Math.imul(_,bt)|0;var It=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(U,Q),i=Math.imul(U,tt),i=i+Math.imul(z,Q)|0,o=Math.imul(z,tt),n=n+Math.imul(C,rt)|0,i=i+Math.imul(C,nt)|0,i=i+Math.imul(N,rt)|0,o=o+Math.imul(N,nt)|0,n=n+Math.imul(P,ot)|0,i=i+Math.imul(P,at)|0,i=i+Math.imul(T,ot)|0,o=o+Math.imul(T,at)|0,n=n+Math.imul(B,st)|0,i=i+Math.imul(B,ut)|0,i=i+Math.imul(O,st)|0,o=o+Math.imul(O,ut)|0,n=n+Math.imul(k,ct)|0,i=i+Math.imul(k,dt)|0,i=i+Math.imul(x,ct)|0,o=o+Math.imul(x,dt)|0,n=n+Math.imul(S,pt)|0,i=i+Math.imul(S,bt)|0,i=i+Math.imul(E,pt)|0,o=o+Math.imul(E,bt)|0;var Bt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(U,rt),i=Math.imul(U,nt),i=i+Math.imul(z,rt)|0,o=Math.imul(z,nt),n=n+Math.imul(C,ot)|0,i=i+Math.imul(C,at)|0,i=i+Math.imul(N,ot)|0,o=o+Math.imul(N,at)|0,n=n+Math.imul(P,st)|0,i=i+Math.imul(P,ut)|0,i=i+Math.imul(T,st)|0,o=o+Math.imul(T,ut)|0,n=n+Math.imul(B,ct)|0,i=i+Math.imul(B,dt)|0,i=i+Math.imul(O,ct)|0,o=o+Math.imul(O,dt)|0,n=n+Math.imul(k,pt)|0,i=i+Math.imul(k,bt)|0,i=i+Math.imul(x,pt)|0,o=o+Math.imul(x,bt)|0;var Ot=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(U,ot),i=Math.imul(U,at),i=i+Math.imul(z,ot)|0,o=Math.imul(z,at),n=n+Math.imul(C,st)|0,i=i+Math.imul(C,ut)|0,i=i+Math.imul(N,st)|0,o=o+Math.imul(N,ut)|0,n=n+Math.imul(P,ct)|0,i=i+Math.imul(P,dt)|0,i=i+Math.imul(T,ct)|0,o=o+Math.imul(T,dt)|0,n=n+Math.imul(B,pt)|0,i=i+Math.imul(B,bt)|0,i=i+Math.imul(O,pt)|0,o=o+Math.imul(O,bt)|0;var Rt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(U,st),i=Math.imul(U,ut),i=i+Math.imul(z,st)|0,o=Math.imul(z,ut),n=n+Math.imul(C,ct)|0,i=i+Math.imul(C,dt)|0,i=i+Math.imul(N,ct)|0,o=o+Math.imul(N,dt)|0,n=n+Math.imul(P,pt)|0,i=i+Math.imul(P,bt)|0,i=i+Math.imul(T,pt)|0,o=o+Math.imul(T,bt)|0;var Pt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(U,ct),i=Math.imul(U,dt),i=i+Math.imul(z,ct)|0,o=Math.imul(z,dt),n=n+Math.imul(C,pt)|0,i=i+Math.imul(C,bt)|0,i=i+Math.imul(N,pt)|0,o=o+Math.imul(N,bt)|0;var Tt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(U,pt),i=Math.imul(U,bt),i=i+Math.imul(z,pt)|0,o=Math.imul(z,bt);var jt=(u+n|0)+((8191&i)<<13)|0;return u=(o+(i>>>13)|0)+(jt>>>26)|0,jt&=67108863,s[0]=vt,s[1]=yt,s[2]=mt,s[3]=gt,s[4]=wt,s[5]=_t,s[6]=Mt,s[7]=St,s[8]=Et,s[9]=At,s[10]=kt,s[11]=xt,s[12]=It,s[13]=Bt,s[14]=Ot,s[15]=Rt,s[16]=Pt,s[17]=Tt,s[18]=jt,0!==u&&(s[19]=u,r.length++),r};Math.imul||(E=u),o.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?E(this,t,e):n<63?u(this,t,e):n<1024?h(this,t,e):c(this,t,e)},d.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},d.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},d.prototype.permute=function(t,e,r,n,i,o){for(var a=0;a<o;a++)n[a]=e[t[a]],i[a]=r[t[a]]},d.prototype.transform=function(t,e,r,n,i,o){this.permute(o,t,e,r,n,i);for(var a=1;a<i;a<<=1)for(var f=a<<1,s=Math.cos(2*Math.PI/f),u=Math.sin(2*Math.PI/f),h=0;h<i;h+=f)for(var c=s,d=u,l=0;l<a;l++){var p=r[h+l],b=n[h+l],v=r[h+l+a],y=n[h+l+a],m=c*v-d*y;y=c*y+d*v,v=m,r[h+l]=p+v,n[h+l]=b+y,r[h+l+a]=p-v,n[h+l+a]=b-y,l!==f&&(m=s*c-u*d,d=s*d+u*c,c=m)}},d.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},d.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},d.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},d.prototype.convert13b=function(t,e,r,i){for(var o=0,a=0;a<e;a++)o+=0|t[a],r[2*a]=8191&o,o>>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*e;a<i;++a)r[a]=0;n(0===o),n(0===(o&-8192))},d.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},d.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),o=this.stub(n),a=new Array(n),f=new Array(n),s=new Array(n),u=new Array(n),h=new Array(n),c=new Array(n),d=r.words;d.length=n,this.convert13b(t.words,t.length,a,n),this.convert13b(e.words,e.length,u,n),this.transform(a,o,f,s,n,i),this.transform(u,o,h,c,n,i);for(var l=0;l<n;l++){var p=f[l]*h[l]-s[l]*c[l];s[l]=f[l]*c[l]+s[l]*h[l],f[l]=p}return this.conjugate(f,s,n),this.transform(f,s,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},o.prototype.mul=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},o.prototype.mulf=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),c(this,t,e)},o.prototype.imul=function(t){return this.clone().mulTo(t,this)},o.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,o=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=s(t);if(0===e.length)return new o(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(e=0;e<this.length;e++){var f=this.words[e]&o,s=(0|this.words[e])-f<<r;this.words[e]=s|a,a=f>>>26-r}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},o.prototype.iushrn=function(t,e,r){n("number"==typeof t&&t>=0);var i;i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),f=67108863^67108863>>>o<<o,s=r;if(i-=a,i=Math.max(0,i),s){for(var u=0;u<a;u++)s.words[u]=this.words[u];s.length=a}if(0===a);else if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;u>=0&&(0!==h||u>=i);u--){var c=0|this.words[u];this.words[u]=h<<26-o|c>>>o,h=c&f}return s&&0!==h&&(s.words[s.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return!1;var o=this.words[r];return!!(o&i)},o.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},o.prototype.maskn=function(t){return this.clone().imaskn(t)},o.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},o.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},o.prototype.addn=function(t){return this.clone().iaddn(t)},o.prototype.subn=function(t){return this.clone().isubn(t)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(t,e,r){var i,o=t.length+r;this._expand(o);var a,f=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+f;var s=(0|t.words[i])*e;a-=67108863&s,f=(a>>26)-(s/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)a=(0|this.words[i+r])+f,f=a>>26,this.words[i+r]=67108863&a;if(0===f)return this.strip();for(n(f===-1),f=0,i=0;i<this.length;i++)a=-(0|this.words[i])+f,f=a>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=this.length-t.length,n=this.clone(),i=t,a=0|i.words[i.length-1],f=this._countBits(a);r=26-f,0!==r&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==e){s=new o(null),s.length=u+1,s.words=new Array(s.length);for(var h=0;h<s.length;h++)s.words[h]=0}var c=n.clone()._ishlnsubmul(i,1,u);0===c.negative&&(n=c,s&&(s.words[u]=1));for(var d=u-1;d>=0;d--){var l=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(l=Math.min(l/a|0,67108863),n._ishlnsubmul(i,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);s&&(s.words[d]=l)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(t,e,r){if(n(!t.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var i,a,f;return 0!==this.negative&&0===t.negative?(f=this.neg().divmod(t,e),"mod"!==e&&(i=f.div.neg()),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(f=this.divmod(t.neg(),e),"mod"!==e&&(i=f.div.neg()),{div:i,mod:f.mod}):0!==(this.negative&t.negative)?(f=this.neg().divmod(t.neg(),e),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:f.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e)},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=new o(0),s=new o(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var h=r.clone(),c=e.clone();!e.isZero();){for(var d=0,l=1;0===(e.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(h),a.isub(c)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0===(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(f.isOdd()||s.isOdd())&&(f.iadd(h),s.isub(c)),f.iushrn(1),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(f),a.isub(s)):(r.isub(e),f.isub(i),s.isub(a))}return{a:f,b:s,gcd:r.iushln(u)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var s=0,u=1;0===(e.words[0]&u)&&s<26;++s,u<<=1);if(s>0)for(e.iushrn(s);s-- >0;)i.isOdd()&&i.iadd(f),i.iushrn(1);for(var h=0,c=1;0===(r.words[0]&c)&&h<26;++h,c<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(a)):(r.isub(e),a.isub(i))}var d;return d=0===e.cmpn(1)?i:a,d.cmpn(0)<0&&d.iadd(t),d},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var o=i,a=r;0!==o&&a<this.length;a++){var f=0|this.words[a];f+=o,o=f>>>26,f&=67108863,this.words[a]=f}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;this.strip();var r;if(this.length>1)r=1;else{e&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r},o.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},o.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return this.cmpn(t)===-1},o.prototype.lt=function(t){return this.cmp(t)===-1},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new m(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var A={k256:null,p224:null,p192:null,p25519:null};l.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},l.prototype.ireduce=function(t){var e,r=t;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength();while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},l.prototype.split=function(t,e){t.iushrn(this.n,0,e)},l.prototype.imulK=function(t){return t.imul(this.k)},i(p,l),p.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,i=10;i<t.length;i++){var a=0|t.words[i];t.words[i-10]=(a&r)<<4|o>>>22,o=a}o>>>=22,t.words[i-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},p.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,l),i(v,l),i(y,l),y.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function t(e){if(A[e])return A[e];var t;if("k256"===e)t=new p;else if("p224"===e)t=new b;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new y}return A[e]=t,t},m.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},m.prototype._verify2=function(t,e){n(0===(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},m.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},m.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},m.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},m.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);
|
||
return r.cmp(this.m)>=0&&r.isub(this.m),r},m.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},m.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},m.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},m.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},m.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},m.prototype.isqr=function(t){return this.imul(t,t.clone())},m.prototype.sqr=function(t){return this.mul(t,t)},m.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2===1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var f=new o(1).toRed(this),s=f.redNeg(),u=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new o(2*h*h).toRed(this);0!==this.pow(h,u).cmp(s);)h.redIAdd(s);for(var c=this.pow(h,i),d=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),p=a;0!==l.cmp(f);){for(var b=l,v=0;0!==b.cmp(f);v++)b=b.redSqr();n(v<p);var y=this.pow(c,new o(1).iushln(p-v-1));d=d.redMul(y),c=y.redSqr(),l=l.redMul(c),p=v}return d},m.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},m.prototype.pow=function(t,e){if(e.isZero())return new o(1);if(0===e.cmpn(1))return t.clone();var r=4,n=new Array(1<<r);n[0]=new o(1).toRed(this),n[1]=t;for(var i=2;i<n.length;i++)n[i]=this.mul(n[i-1],t);var a=n[0],f=0,s=0,u=e.bitLength()%26;for(0===u&&(u=26),i=e.length-1;i>=0;i--){for(var h=e.words[i],c=u-1;c>=0;c--){var d=h>>c&1;a!==n[0]&&(a=this.sqr(a)),0!==d||0!==f?(f<<=1,f|=d,s++,(s===r||0===i&&0===c)&&(a=this.mul(a,n[f]),s=0,f=0)):s=0}u=26}return a},m.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},m.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new g(t)},i(g,m),g.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},g.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},g.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},g.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},g.prototype.invm=function(t){var e=this.imod(t._invmp(this.m).mul(this.r2));return e._forceRed(this)}}("undefined"==typeof t||t,this)}).call(e,r(92)(t))},function(t,e,r){"use strict";var n=e;n.version=r(465).version,n.utils=r(521),n.rand=r(522),n.hmacDRBG=r(519),n.curve=r(99),n.curves=r(512),n.ec=r(513),n.eddsa=r(516)},function(t,e,r){var n=r(66),i=r(37),o=r(17),a=r(29),f=r(12),s=r(174),u=Object.getOwnPropertyDescriptor;e.f=r(8)?u:function(t,e){if(t=o(t),e=a(e,!0),s)try{return u(t,e)}catch(t){}if(f(t,e))return i(!n.f.call(t,e),t[e])}},function(t,e,r){var n=r(12),i=r(11),o=r(133)("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},function(t,e,r){"use strict";var n=e;n.version=r(467).version,n.utils=r(558),n.rand=r(559),n.hmacDRBG=r(556),n.curve=r(104),n.curves=r(549),n.ec=r(550),n.eddsa=r(553)},function(t,e){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,r){var n=r(5);t.exports=function(t,e){return!!t&&n(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e){function r(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(t){if(h===setTimeout)return setTimeout(t,0);if((h===r||!h)&&setTimeout)return h=setTimeout,setTimeout(t,0);try{return h(t,0)}catch(e){try{return h.call(null,t,0)}catch(e){return h.call(this,t,0)}}}function o(t){if(c===clearTimeout)return clearTimeout(t);if((c===n||!c)&&clearTimeout)return c=clearTimeout,clearTimeout(t);try{return c(t)}catch(e){try{return c.call(null,t)}catch(e){return c.call(this,t)}}}function a(){b&&l&&(b=!1,l.length?p=l.concat(p):v=-1,p.length&&f())}function f(){if(!b){var t=i(a);b=!0;for(var e=p.length;e;){for(l=p,p=[];++v<e;)l&&l[v].run();v=-1,e=p.length}l=null,b=!1,o(t)}}function s(t,e){this.fun=t,this.array=e}function u(){}var h,c,d=t.exports={};!function(){try{h="function"==typeof setTimeout?setTimeout:r}catch(t){h=r}try{c="function"==typeof clearTimeout?clearTimeout:n}catch(t){c=n}}();var l,p=[],b=!1,v=-1;d.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];p.push(new s(t,e)),1!==p.length||b||i(f)},s.prototype.run=function(){this.fun.apply(null,this.array)},d.title="browser",d.browser=!0,d.env={},d.argv=[],d.version="",d.versions={},d.on=u,d.addListener=u,d.once=u,d.off=u,d.removeListener=u,d.removeAllListeners=u,d.emit=u,d.binding=function(t){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(t){throw new Error("process.chdir is not supported")},d.umask=function(){return 0}},function(t,e,r){var n=r(33),i=r(65),o=r(11),a=r(10),f=r(283);t.exports=function(t,e){var r=1==t,s=2==t,u=3==t,h=4==t,c=6==t,d=5==t||c,l=e||f;return function(e,f,p){for(var b,v,y=o(e),m=i(y),g=n(f,p,3),w=a(m.length),_=0,M=r?l(e,w):s?l(e,0):void 0;w>_;_++)if((d||_ in m)&&(b=m[_],v=g(b,_,y),t))if(r)M[_]=v;else if(v)switch(t){case 3:return!0;case 5:return b;case 6:return _;case 2:M.push(b)}else if(h)return!1;return c?-1:u||h?h:M}}},function(t,e,r){var n=r(0),i=r(32),o=r(5);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],a={};a[t]=e(r),n(n.S+n.F*o(function(){r(1)}),"Object",a)}},function(t,e,r){var n=r(6);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},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<i;o++){var a=t.charCodeAt(o)-48;n<<=4,n|=a>=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<o;a++){var f=t.charCodeAt(a)-48;i*=n,i+=f>=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<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>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<n;u++){for(var h=s>>>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<r.length-1;o++){var a=i;i=0;for(var f=67108863&n,s=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=s;u++){var h=o-u,c=0|t.words[h],d=0|e.words[u],l=c*d,p=67108863&l;a=a+(l/67108864|0)|0,p=p+f|0,f=67108863&p,a=a+(p>>>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<this.length;i++)this.words[i]=0;var o,a,f=0;if("be"===r)for(i=t.length-1,o=0;i>=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);else if("le"===r)for(i=0,o=0;i<t.length;i+=3)a=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>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<this.length;r++)this.words[r]=0;var n,i,o=0;for(r=t.length-6,n=0;r>=e;r-=6)i=a(t,r,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==e&&(i=a(t,e,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=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;h<s;h+=n)u=f(t,h,h+n,e),this.imuln(i),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==a){var c=1;for(u=f(t,h,t.length,e),h=0;h<a;h++)c*=e;this.imuln(c),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},o.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},o.prototype.clone=function(){var t=new o(null);return this.copy(t),t},o.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&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?"<BN-R: ":"<BN: ")+this.toString(16)+">"};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<this.length;a++){var f=this.words[a],s=(16777215&(f<<i|o)).toString(16);o=f>>>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<o;f++)u[f]=0}else{for(f=0;f<o-i;f++)u[f]=0;for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[o-f-1]=a}return u},Math.clz32?o.prototype._countBits=function(t){return 32-Math.clz32(t)}:o.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0===(8191&e)&&(r+=13,e>>>=13),0===(127&e)&&(r+=7,e>>>=7),0===(15&e)&&(r+=4,e>>>=4),0===(3&e)&&(r+=2,e>>>=2),0===(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},o.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},o.prototype.ior=function(t){return n(0===(this.negative|t.negative)),this.iuor(t)},o.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},o.prototype.iand=function(t){return n(0===(this.negative|t.negative)),this.iuand(t)},o.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},o.prototype.ixor=function(t){return n(0===(this.negative|t.negative)),this.iuxor(t)},o.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),e?this.words[r]=this.words[r]|1<<i:this.words[r]=this.words[r]&~(1<<i),this.strip()},o.prototype.iadd=function(t){var e;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();var r,n;this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o<n.length;o++)e=(0|r.words[o])+(0|n.words[o])+i,this.words[o]=67108863&e,i=e>>>26;for(;0!==i&&o<r.length;o++)e=(0|r.words[o])+i,this.words[o]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},o.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=t):(n=t,i=this);for(var o=0,a=0;a<i.length;a++)e=(0|n.words[a])-(0|i.words[a])+o,o=e>>26,this.words[a]=67108863&e;for(;0!==o&&a<n.length;a++)e=(0|n.words[a])+o,o=e>>26,this.words[a]=67108863&e;if(0===o&&a<n.length&&n!==this)for(;a<n.length;a++)this.words[a]=n.words[a];return this.length=Math.max(this.length,a),n!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(t){return this.clone().isub(t)};var E=function(t,e,r){var n,i,o,a=t.words,f=e.words,s=r.words,u=0,h=0|a[0],c=8191&h,d=h>>>13,l=0|a[1],p=8191&l,b=l>>>13,v=0|a[2],y=8191&v,m=v>>>13,g=0|a[3],w=8191&g,_=g>>>13,M=0|a[4],S=8191&M,E=M>>>13,A=0|a[5],k=8191&A,x=A>>>13,I=0|a[6],B=8191&I,O=I>>>13,R=0|a[7],P=8191&R,T=R>>>13,j=0|a[8],C=8191&j,N=j>>>13,L=0|a[9],U=8191&L,z=L>>>13,D=0|f[0],q=8191&D,F=D>>>13,K=0|f[1],G=8191&K,V=K>>>13,H=0|f[2],X=8191&H,Y=H>>>13,W=0|f[3],Z=8191&W,J=W>>>13,$=0|f[4],Q=8191&$,tt=$>>>13,et=0|f[5],rt=8191&et,nt=et>>>13,it=0|f[6],ot=8191&it,at=it>>>13,ft=0|f[7],st=8191&ft,ut=ft>>>13,ht=0|f[8],ct=8191&ht,dt=ht>>>13,lt=0|f[9],pt=8191<,bt=lt>>>13;r.negative=t.negative^e.negative,r.length=19,n=Math.imul(c,q),i=Math.imul(c,F),i=i+Math.imul(d,q)|0,o=Math.imul(d,F);var vt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(p,q),i=Math.imul(p,F),i=i+Math.imul(b,q)|0,o=Math.imul(b,F),n=n+Math.imul(c,G)|0,i=i+Math.imul(c,V)|0,i=i+Math.imul(d,G)|0,o=o+Math.imul(d,V)|0;var yt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,q),i=Math.imul(y,F),i=i+Math.imul(m,q)|0,o=Math.imul(m,F),n=n+Math.imul(p,G)|0,i=i+Math.imul(p,V)|0,i=i+Math.imul(b,G)|0,o=o+Math.imul(b,V)|0,n=n+Math.imul(c,X)|0,i=i+Math.imul(c,Y)|0,i=i+Math.imul(d,X)|0,o=o+Math.imul(d,Y)|0;var mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(w,q),i=Math.imul(w,F),i=i+Math.imul(_,q)|0,o=Math.imul(_,F),n=n+Math.imul(y,G)|0,i=i+Math.imul(y,V)|0,i=i+Math.imul(m,G)|0,o=o+Math.imul(m,V)|0,n=n+Math.imul(p,X)|0,i=i+Math.imul(p,Y)|0,i=i+Math.imul(b,X)|0,o=o+Math.imul(b,Y)|0,n=n+Math.imul(c,Z)|0,i=i+Math.imul(c,J)|0,i=i+Math.imul(d,Z)|0,o=o+Math.imul(d,J)|0;var gt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(S,q),i=Math.imul(S,F),i=i+Math.imul(E,q)|0,o=Math.imul(E,F),n=n+Math.imul(w,G)|0,i=i+Math.imul(w,V)|0,i=i+Math.imul(_,G)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,X)|0,i=i+Math.imul(y,Y)|0,i=i+Math.imul(m,X)|0,o=o+Math.imul(m,Y)|0,n=n+Math.imul(p,Z)|0,i=i+Math.imul(p,J)|0,i=i+Math.imul(b,Z)|0,o=o+Math.imul(b,J)|0,n=n+Math.imul(c,Q)|0,i=i+Math.imul(c,tt)|0,i=i+Math.imul(d,Q)|0,o=o+Math.imul(d,tt)|0;var wt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,q),i=Math.imul(k,F),i=i+Math.imul(x,q)|0,o=Math.imul(x,F),n=n+Math.imul(S,G)|0,i=i+Math.imul(S,V)|0,i=i+Math.imul(E,G)|0,o=o+Math.imul(E,V)|0,n=n+Math.imul(w,X)|0,i=i+Math.imul(w,Y)|0,i=i+Math.imul(_,X)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,Z)|0,i=i+Math.imul(y,J)|0,i=i+Math.imul(m,Z)|0,o=o+Math.imul(m,J)|0,n=n+Math.imul(p,Q)|0,i=i+Math.imul(p,tt)|0,i=i+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,n=n+Math.imul(c,rt)|0,i=i+Math.imul(c,nt)|0,i=i+Math.imul(d,rt)|0,o=o+Math.imul(d,nt)|0;var _t=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(B,q),i=Math.imul(B,F),i=i+Math.imul(O,q)|0,o=Math.imul(O,F),n=n+Math.imul(k,G)|0,i=i+Math.imul(k,V)|0,i=i+Math.imul(x,G)|0,o=o+Math.imul(x,V)|0,n=n+Math.imul(S,X)|0,i=i+Math.imul(S,Y)|0,i=i+Math.imul(E,X)|0,o=o+Math.imul(E,Y)|0,n=n+Math.imul(w,Z)|0,i=i+Math.imul(w,J)|0,i=i+Math.imul(_,Z)|0,o=o+Math.imul(_,J)|0,n=n+Math.imul(y,Q)|0,i=i+Math.imul(y,tt)|0,i=i+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0,n=n+Math.imul(p,rt)|0,i=i+Math.imul(p,nt)|0,i=i+Math.imul(b,rt)|0,o=o+Math.imul(b,nt)|0,n=n+Math.imul(c,ot)|0,i=i+Math.imul(c,at)|0,i=i+Math.imul(d,ot)|0,o=o+Math.imul(d,at)|0;var Mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,q),i=Math.imul(P,F),i=i+Math.imul(T,q)|0,o=Math.imul(T,F),n=n+Math.imul(B,G)|0,i=i+Math.imul(B,V)|0,i=i+Math.imul(O,G)|0,o=o+Math.imul(O,V)|0,n=n+Math.imul(k,X)|0,i=i+Math.imul(k,Y)|0,i=i+Math.imul(x,X)|0,o=o+Math.imul(x,Y)|0,n=n+Math.imul(S,Z)|0,i=i+Math.imul(S,J)|0,i=i+Math.imul(E,Z)|0,o=o+Math.imul(E,J)|0,n=n+Math.imul(w,Q)|0,i=i+Math.imul(w,tt)|0,i=i+Math.imul(_,Q)|0,o=o+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=i+Math.imul(y,nt)|0,i=i+Math.imul(m,rt)|0,o=o+Math.imul(m,nt)|0,n=n+Math.imul(p,ot)|0,i=i+Math.imul(p,at)|0,i=i+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0,n=n+Math.imul(c,st)|0,i=i+Math.imul(c,ut)|0,i=i+Math.imul(d,st)|0,o=o+Math.imul(d,ut)|0;var St=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(C,q),i=Math.imul(C,F),i=i+Math.imul(N,q)|0,o=Math.imul(N,F),n=n+Math.imul(P,G)|0,i=i+Math.imul(P,V)|0,i=i+Math.imul(T,G)|0,o=o+Math.imul(T,V)|0,n=n+Math.imul(B,X)|0,i=i+Math.imul(B,Y)|0,i=i+Math.imul(O,X)|0,o=o+Math.imul(O,Y)|0,n=n+Math.imul(k,Z)|0,i=i+Math.imul(k,J)|0,i=i+Math.imul(x,Z)|0,o=o+Math.imul(x,J)|0,n=n+Math.imul(S,Q)|0,i=i+Math.imul(S,tt)|0,i=i+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,n=n+Math.imul(w,rt)|0,i=i+Math.imul(w,nt)|0,i=i+Math.imul(_,rt)|0,o=o+Math.imul(_,nt)|0,n=n+Math.imul(y,ot)|0,i=i+Math.imul(y,at)|0,i=i+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0,n=n+Math.imul(p,st)|0,i=i+Math.imul(p,ut)|0,i=i+Math.imul(b,st)|0,o=o+Math.imul(b,ut)|0,n=n+Math.imul(c,ct)|0,i=i+Math.imul(c,dt)|0,i=i+Math.imul(d,ct)|0,o=o+Math.imul(d,dt)|0;var Et=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(U,q),i=Math.imul(U,F),i=i+Math.imul(z,q)|0,o=Math.imul(z,F),n=n+Math.imul(C,G)|0,i=i+Math.imul(C,V)|0,i=i+Math.imul(N,G)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,X)|0,i=i+Math.imul(P,Y)|0,i=i+Math.imul(T,X)|0,o=o+Math.imul(T,Y)|0,n=n+Math.imul(B,Z)|0,i=i+Math.imul(B,J)|0,i=i+Math.imul(O,Z)|0,o=o+Math.imul(O,J)|0,n=n+Math.imul(k,Q)|0,i=i+Math.imul(k,tt)|0,i=i+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,n=n+Math.imul(S,rt)|0,i=i+Math.imul(S,nt)|0,i=i+Math.imul(E,rt)|0,o=o+Math.imul(E,nt)|0,n=n+Math.imul(w,ot)|0,i=i+Math.imul(w,at)|0,i=i+Math.imul(_,ot)|0,o=o+Math.imul(_,at)|0,n=n+Math.imul(y,st)|0,i=i+Math.imul(y,ut)|0,i=i+Math.imul(m,st)|0,o=o+Math.imul(m,ut)|0,n=n+Math.imul(p,ct)|0,i=i+Math.imul(p,dt)|0,i=i+Math.imul(b,ct)|0,o=o+Math.imul(b,dt)|0,n=n+Math.imul(c,pt)|0,i=i+Math.imul(c,bt)|0,i=i+Math.imul(d,pt)|0,o=o+Math.imul(d,bt)|0;var At=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(U,G),i=Math.imul(U,V),i=i+Math.imul(z,G)|0,o=Math.imul(z,V),n=n+Math.imul(C,X)|0,i=i+Math.imul(C,Y)|0,i=i+Math.imul(N,X)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(P,Z)|0,i=i+Math.imul(P,J)|0,i=i+Math.imul(T,Z)|0,o=o+Math.imul(T,J)|0,n=n+Math.imul(B,Q)|0,i=i+Math.imul(B,tt)|0,i=i+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,n=n+Math.imul(k,rt)|0,i=i+Math.imul(k,nt)|0,i=i+Math.imul(x,rt)|0,o=o+Math.imul(x,nt)|0,n=n+Math.imul(S,ot)|0,i=i+Math.imul(S,at)|0,i=i+Math.imul(E,ot)|0,o=o+Math.imul(E,at)|0,n=n+Math.imul(w,st)|0,i=i+Math.imul(w,ut)|0,i=i+Math.imul(_,st)|0,o=o+Math.imul(_,ut)|0,n=n+Math.imul(y,ct)|0,i=i+Math.imul(y,dt)|0,i=i+Math.imul(m,ct)|0,o=o+Math.imul(m,dt)|0,n=n+Math.imul(p,pt)|0,i=i+Math.imul(p,bt)|0,i=i+Math.imul(b,pt)|0,o=o+Math.imul(b,bt)|0;var kt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(U,X),i=Math.imul(U,Y),i=i+Math.imul(z,X)|0,o=Math.imul(z,Y),n=n+Math.imul(C,Z)|0,i=i+Math.imul(C,J)|0,i=i+Math.imul(N,Z)|0,o=o+Math.imul(N,J)|0,n=n+Math.imul(P,Q)|0,i=i+Math.imul(P,tt)|0,i=i+Math.imul(T,Q)|0,o=o+Math.imul(T,tt)|0,n=n+Math.imul(B,rt)|0,i=i+Math.imul(B,nt)|0,i=i+Math.imul(O,rt)|0,o=o+Math.imul(O,nt)|0,n=n+Math.imul(k,ot)|0,i=i+Math.imul(k,at)|0,i=i+Math.imul(x,ot)|0,o=o+Math.imul(x,at)|0,n=n+Math.imul(S,st)|0,i=i+Math.imul(S,ut)|0,i=i+Math.imul(E,st)|0,o=o+Math.imul(E,ut)|0,n=n+Math.imul(w,ct)|0,i=i+Math.imul(w,dt)|0,i=i+Math.imul(_,ct)|0,o=o+Math.imul(_,dt)|0,n=n+Math.imul(y,pt)|0,i=i+Math.imul(y,bt)|0,i=i+Math.imul(m,pt)|0,o=o+Math.imul(m,bt)|0;var xt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(U,Z),i=Math.imul(U,J),i=i+Math.imul(z,Z)|0,o=Math.imul(z,J),n=n+Math.imul(C,Q)|0,i=i+Math.imul(C,tt)|0,i=i+Math.imul(N,Q)|0,o=o+Math.imul(N,tt)|0,n=n+Math.imul(P,rt)|0,i=i+Math.imul(P,nt)|0,i=i+Math.imul(T,rt)|0,o=o+Math.imul(T,nt)|0,n=n+Math.imul(B,ot)|0,i=i+Math.imul(B,at)|0,i=i+Math.imul(O,ot)|0,o=o+Math.imul(O,at)|0,n=n+Math.imul(k,st)|0,i=i+Math.imul(k,ut)|0,i=i+Math.imul(x,st)|0,o=o+Math.imul(x,ut)|0,n=n+Math.imul(S,ct)|0,i=i+Math.imul(S,dt)|0,i=i+Math.imul(E,ct)|0,o=o+Math.imul(E,dt)|0,n=n+Math.imul(w,pt)|0,i=i+Math.imul(w,bt)|0,i=i+Math.imul(_,pt)|0,o=o+Math.imul(_,bt)|0;var It=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(U,Q),i=Math.imul(U,tt),i=i+Math.imul(z,Q)|0,o=Math.imul(z,tt),n=n+Math.imul(C,rt)|0,i=i+Math.imul(C,nt)|0,i=i+Math.imul(N,rt)|0,o=o+Math.imul(N,nt)|0,n=n+Math.imul(P,ot)|0,i=i+Math.imul(P,at)|0,i=i+Math.imul(T,ot)|0,o=o+Math.imul(T,at)|0,n=n+Math.imul(B,st)|0,i=i+Math.imul(B,ut)|0,i=i+Math.imul(O,st)|0,o=o+Math.imul(O,ut)|0,n=n+Math.imul(k,ct)|0,i=i+Math.imul(k,dt)|0,i=i+Math.imul(x,ct)|0,o=o+Math.imul(x,dt)|0,n=n+Math.imul(S,pt)|0,i=i+Math.imul(S,bt)|0,i=i+Math.imul(E,pt)|0,o=o+Math.imul(E,bt)|0;var Bt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(U,rt),i=Math.imul(U,nt),i=i+Math.imul(z,rt)|0,o=Math.imul(z,nt),n=n+Math.imul(C,ot)|0,i=i+Math.imul(C,at)|0,i=i+Math.imul(N,ot)|0,o=o+Math.imul(N,at)|0,n=n+Math.imul(P,st)|0,i=i+Math.imul(P,ut)|0,i=i+Math.imul(T,st)|0,o=o+Math.imul(T,ut)|0,n=n+Math.imul(B,ct)|0,i=i+Math.imul(B,dt)|0,i=i+Math.imul(O,ct)|0,o=o+Math.imul(O,dt)|0,n=n+Math.imul(k,pt)|0,i=i+Math.imul(k,bt)|0,i=i+Math.imul(x,pt)|0,o=o+Math.imul(x,bt)|0;var Ot=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(U,ot),i=Math.imul(U,at),i=i+Math.imul(z,ot)|0,o=Math.imul(z,at),n=n+Math.imul(C,st)|0,i=i+Math.imul(C,ut)|0,i=i+Math.imul(N,st)|0,o=o+Math.imul(N,ut)|0,n=n+Math.imul(P,ct)|0,i=i+Math.imul(P,dt)|0,i=i+Math.imul(T,ct)|0,o=o+Math.imul(T,dt)|0,n=n+Math.imul(B,pt)|0,i=i+Math.imul(B,bt)|0,i=i+Math.imul(O,pt)|0,o=o+Math.imul(O,bt)|0;var Rt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(U,st),i=Math.imul(U,ut),i=i+Math.imul(z,st)|0,o=Math.imul(z,ut),n=n+Math.imul(C,ct)|0,i=i+Math.imul(C,dt)|0,i=i+Math.imul(N,ct)|0,o=o+Math.imul(N,dt)|0,n=n+Math.imul(P,pt)|0,i=i+Math.imul(P,bt)|0,i=i+Math.imul(T,pt)|0,o=o+Math.imul(T,bt)|0;var Pt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(U,ct),i=Math.imul(U,dt),i=i+Math.imul(z,ct)|0,o=Math.imul(z,dt),n=n+Math.imul(C,pt)|0,i=i+Math.imul(C,bt)|0,i=i+Math.imul(N,pt)|0,o=o+Math.imul(N,bt)|0;var Tt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(U,pt),i=Math.imul(U,bt),i=i+Math.imul(z,pt)|0,o=Math.imul(z,bt);var jt=(u+n|0)+((8191&i)<<13)|0;return u=(o+(i>>>13)|0)+(jt>>>26)|0,jt&=67108863,s[0]=vt,s[1]=yt,s[2]=mt,s[3]=gt,s[4]=wt,s[5]=_t,s[6]=Mt,s[7]=St,s[8]=Et,s[9]=At,s[10]=kt,s[11]=xt,s[12]=It,s[13]=Bt,s[14]=Ot,s[15]=Rt,s[16]=Pt,s[17]=Tt,s[18]=jt,0!==u&&(s[19]=u,r.length++),r};Math.imul||(E=u),o.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?E(this,t,e):n<63?u(this,t,e):n<1024?h(this,t,e):c(this,t,e)},d.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},d.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},d.prototype.permute=function(t,e,r,n,i,o){for(var a=0;a<o;a++)n[a]=e[t[a]],i[a]=r[t[a]]},d.prototype.transform=function(t,e,r,n,i,o){this.permute(o,t,e,r,n,i);for(var a=1;a<i;a<<=1)for(var f=a<<1,s=Math.cos(2*Math.PI/f),u=Math.sin(2*Math.PI/f),h=0;h<i;h+=f)for(var c=s,d=u,l=0;l<a;l++){var p=r[h+l],b=n[h+l],v=r[h+l+a],y=n[h+l+a],m=c*v-d*y;y=c*y+d*v,v=m,r[h+l]=p+v,n[h+l]=b+y,r[h+l+a]=p-v,n[h+l+a]=b-y,l!==f&&(m=s*c-u*d,d=s*d+u*c,c=m)}},d.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},d.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},d.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},d.prototype.convert13b=function(t,e,r,i){for(var o=0,a=0;a<e;a++)o+=0|t[a],r[2*a]=8191&o,o>>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*e;a<i;++a)r[a]=0;n(0===o),n(0===(o&-8192))},d.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},d.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),o=this.stub(n),a=new Array(n),f=new Array(n),s=new Array(n),u=new Array(n),h=new Array(n),c=new Array(n),d=r.words;d.length=n,this.convert13b(t.words,t.length,a,n),
|
||
this.convert13b(e.words,e.length,u,n),this.transform(a,o,f,s,n,i),this.transform(u,o,h,c,n,i);for(var l=0;l<n;l++){var p=f[l]*h[l]-s[l]*c[l];s[l]=f[l]*c[l]+s[l]*h[l],f[l]=p}return this.conjugate(f,s,n),this.transform(f,s,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},o.prototype.mul=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},o.prototype.mulf=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),c(this,t,e)},o.prototype.imul=function(t){return this.clone().mulTo(t,this)},o.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,o=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=s(t);if(0===e.length)return new o(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(e=0;e<this.length;e++){var f=this.words[e]&o,s=(0|this.words[e])-f<<r;this.words[e]=s|a,a=f>>>26-r}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},o.prototype.iushrn=function(t,e,r){n("number"==typeof t&&t>=0);var i;i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),f=67108863^67108863>>>o<<o,s=r;if(i-=a,i=Math.max(0,i),s){for(var u=0;u<a;u++)s.words[u]=this.words[u];s.length=a}if(0===a);else if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;u>=0&&(0!==h||u>=i);u--){var c=0|this.words[u];this.words[u]=h<<26-o|c>>>o,h=c&f}return s&&0!==h&&(s.words[s.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return!1;var o=this.words[r];return!!(o&i)},o.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},o.prototype.maskn=function(t){return this.clone().imaskn(t)},o.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},o.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},o.prototype.addn=function(t){return this.clone().iaddn(t)},o.prototype.subn=function(t){return this.clone().isubn(t)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(t,e,r){var i,o=t.length+r;this._expand(o);var a,f=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+f;var s=(0|t.words[i])*e;a-=67108863&s,f=(a>>26)-(s/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)a=(0|this.words[i+r])+f,f=a>>26,this.words[i+r]=67108863&a;if(0===f)return this.strip();for(n(f===-1),f=0,i=0;i<this.length;i++)a=-(0|this.words[i])+f,f=a>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=this.length-t.length,n=this.clone(),i=t,a=0|i.words[i.length-1],f=this._countBits(a);r=26-f,0!==r&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==e){s=new o(null),s.length=u+1,s.words=new Array(s.length);for(var h=0;h<s.length;h++)s.words[h]=0}var c=n.clone()._ishlnsubmul(i,1,u);0===c.negative&&(n=c,s&&(s.words[u]=1));for(var d=u-1;d>=0;d--){var l=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(l=Math.min(l/a|0,67108863),n._ishlnsubmul(i,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);s&&(s.words[d]=l)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(t,e,r){if(n(!t.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var i,a,f;return 0!==this.negative&&0===t.negative?(f=this.neg().divmod(t,e),"mod"!==e&&(i=f.div.neg()),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(f=this.divmod(t.neg(),e),"mod"!==e&&(i=f.div.neg()),{div:i,mod:f.mod}):0!==(this.negative&t.negative)?(f=this.neg().divmod(t.neg(),e),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:f.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e)},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=new o(0),s=new o(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var h=r.clone(),c=e.clone();!e.isZero();){for(var d=0,l=1;0===(e.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(h),a.isub(c)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0===(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(f.isOdd()||s.isOdd())&&(f.iadd(h),s.isub(c)),f.iushrn(1),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(f),a.isub(s)):(r.isub(e),f.isub(i),s.isub(a))}return{a:f,b:s,gcd:r.iushln(u)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var s=0,u=1;0===(e.words[0]&u)&&s<26;++s,u<<=1);if(s>0)for(e.iushrn(s);s-- >0;)i.isOdd()&&i.iadd(f),i.iushrn(1);for(var h=0,c=1;0===(r.words[0]&c)&&h<26;++h,c<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(a)):(r.isub(e),a.isub(i))}var d;return d=0===e.cmpn(1)?i:a,d.cmpn(0)<0&&d.iadd(t),d},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var o=i,a=r;0!==o&&a<this.length;a++){var f=0|this.words[a];f+=o,o=f>>>26,f&=67108863,this.words[a]=f}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;this.strip();var r;if(this.length>1)r=1;else{e&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r},o.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},o.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return this.cmpn(t)===-1},o.prototype.lt=function(t){return this.cmp(t)===-1},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new m(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var A={k256:null,p224:null,p192:null,p25519:null};l.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},l.prototype.ireduce=function(t){var e,r=t;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength();while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},l.prototype.split=function(t,e){t.iushrn(this.n,0,e)},l.prototype.imulK=function(t){return t.imul(this.k)},i(p,l),p.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,i=10;i<t.length;i++){var a=0|t.words[i];t.words[i-10]=(a&r)<<4|o>>>22,o=a}o>>>=22,t.words[i-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},p.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,l),i(v,l),i(y,l),y.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function t(e){if(A[e])return A[e];var t;if("k256"===e)t=new p;else if("p224"===e)t=new b;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new y}return A[e]=t,t},m.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},m.prototype._verify2=function(t,e){n(0===(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},m.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},m.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},m.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},m.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},m.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},m.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},m.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},m.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},m.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},m.prototype.isqr=function(t){return this.imul(t,t.clone())},m.prototype.sqr=function(t){return this.mul(t,t)},m.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2===1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var f=new o(1).toRed(this),s=f.redNeg(),u=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new o(2*h*h).toRed(this);0!==this.pow(h,u).cmp(s);)h.redIAdd(s);for(var c=this.pow(h,i),d=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),p=a;0!==l.cmp(f);){for(var b=l,v=0;0!==b.cmp(f);v++)b=b.redSqr();n(v<p);var y=this.pow(c,new o(1).iushln(p-v-1));d=d.redMul(y),c=y.redSqr(),l=l.redMul(c),p=v}return d},m.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},m.prototype.pow=function(t,e){if(e.isZero())return new o(1);if(0===e.cmpn(1))return t.clone();var r=4,n=new Array(1<<r);n[0]=new o(1).toRed(this),n[1]=t;for(var i=2;i<n.length;i++)n[i]=this.mul(n[i-1],t);var a=n[0],f=0,s=0,u=e.bitLength()%26;for(0===u&&(u=26),i=e.length-1;i>=0;i--){for(var h=e.words[i],c=u-1;c>=0;c--){var d=h>>c&1;a!==n[0]&&(a=this.sqr(a)),0!==d||0!==f?(f<<=1,f|=d,s++,(s===r||0===i&&0===c)&&(a=this.mul(a,n[f]),s=0,f=0)):s=0}u=26}return a},m.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},m.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new g(t)},i(g,m),g.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},g.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},g.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},g.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},g.prototype.invm=function(t){var e=this.imod(t._invmp(this.m).mul(this.r2));return e._forceRed(this)}}("undefined"==typeof t||t,this)}).call(e,r(92)(t))},function(t,e,r){function n(){i.call(this)}t.exports=n;var i=r(110).EventEmitter,o=r(603);o(n,i),n.Readable=r(600),n.Writable=r(602),n.Duplex=r(595),n.Transform=r(601),n.PassThrough=r(599),n.Stream=n,n.prototype.pipe=function(t,e){function r(e){t.writable&&!1===t.write(e)&&u.pause&&u.pause()}function n(){u.readable&&u.resume&&u.resume()}function o(){h||(h=!0,t.end())}function a(){h||(h=!0,"function"==typeof t.destroy&&t.destroy())}function f(t){if(s(),0===i.listenerCount(this,"error"))throw t}function s(){u.removeListener("data",r),t.removeListener("drain",n),u.removeListener("end",o),u.removeListener("close",a),u.removeListener("error",f),t.removeListener("error",f),u.removeListener("end",s),u.removeListener("close",s),t.removeListener("close",s)}var u=this;u.on("data",r),t.on("drain",n),t._isStdio||e&&e.end===!1||(u.on("end",o),u.on("close",a));var h=!1;return u.on("error",f),t.on("error",f),u.on("end",s),u.on("close",s),t.on("close",s),t.emit("pipe",u),t}},function(t,e){var r=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},function(t,e,r){var n=r(13);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e,r){var n=r(190),i=r(0),o=r(87)("metadata"),a=o.store||(o.store=new(r(193))),f=function(t,e,r){var i=a.get(t);if(!i){if(!r)return;a.set(t,i=new n)}var o=i.get(e);if(!o){if(!r)return;i.set(e,o=new n)}return o},s=function(t,e,r){var n=f(e,r,!1);return void 0!==n&&n.has(t)},u=function(t,e,r){var n=f(e,r,!1);return void 0===n?void 0:n.get(t)},h=function(t,e,r,n){f(r,n,!0).set(t,e)},c=function(t,e){var r=f(t,e,!1),n=[];return r&&r.forEach(function(t,e){n.push(e)}),n},d=function(t){return void 0===t||"symbol"==typeof t?t:String(t)},l=function(t){i(i.S,"Reflect",t)};t.exports={store:a,map:f,has:s,get:u,set:h,keys:c,key:d,exp:l}},function(t,e,r){"use strict";if(r(8)){var n=r(41),i=r(4),o=r(5),a=r(0),f=r(88),s=r(140),u=r(33),h=r(40),c=r(37),d=r(14),l=r(45),p=r(38),b=r(10),v=r(47),y=r(29),m=r(12),g=r(187),w=r(64),_=r(6),M=r(11),S=r(125),E=r(42),A=r(21),k=r(43).f,x=r(142),I=r(48),B=r(7),O=r(27),R=r(78),P=r(134),T=r(143),j=r(56),C=r(84),N=r(46),L=r(118),U=r(167),z=r(9),D=r(20),q=z.f,F=D.f,K=i.RangeError,G=i.TypeError,V=i.Uint8Array,H="ArrayBuffer",X="Shared"+H,Y="BYTES_PER_ELEMENT",W="prototype",Z=Array[W],J=s.ArrayBuffer,$=s.DataView,Q=O(0),tt=O(2),et=O(3),rt=O(4),nt=O(5),it=O(6),ot=R(!0),at=R(!1),ft=T.values,st=T.keys,ut=T.entries,ht=Z.lastIndexOf,ct=Z.reduce,dt=Z.reduceRight,lt=Z.join,pt=Z.sort,bt=Z.slice,vt=Z.toString,yt=Z.toLocaleString,mt=B("iterator"),gt=B("toStringTag"),wt=I("typed_constructor"),_t=I("def_constructor"),Mt=f.CONSTR,St=f.TYPED,Et=f.VIEW,At="Wrong length!",kt=O(1,function(t,e){return Pt(P(t,t[_t]),e)}),xt=o(function(){return 1===new V(new Uint16Array([1]).buffer)[0]}),It=!!V&&!!V[W].set&&o(function(){new V(1).set({})}),Bt=function(t,e){if(void 0===t)throw G(At);var r=+t,n=b(t);if(e&&!g(r,n))throw K(At);return n},Ot=function(t,e){var r=p(t);if(r<0||r%e)throw K("Wrong offset!");return r},Rt=function(t){if(_(t)&&St in t)return t;throw G(t+" is not a typed array!")},Pt=function(t,e){if(!(_(t)&&wt in t))throw G("It is not a typed array constructor!");return new t(e)},Tt=function(t,e){return jt(P(t,t[_t]),e)},jt=function(t,e){for(var r=0,n=e.length,i=Pt(t,n);n>r;)i[r]=e[r++];return i},Ct=function(t,e,r){q(t,e,{get:function(){return this._d[r]}})},Nt=function(t){var e,r,n,i,o,a,f=M(t),s=arguments.length,h=s>1?arguments[1]:void 0,c=void 0!==h,d=x(f);if(void 0!=d&&!S(d)){for(a=d.call(f),n=[],e=0;!(o=a.next()).done;e++)n.push(o.value);f=n}for(c&&s>2&&(h=u(h,arguments[2],2)),e=0,r=b(f.length),i=Pt(this,r);r>e;e++)i[e]=c?h(f[e],e):f[e];return i},Lt=function(){for(var t=0,e=arguments.length,r=Pt(this,e);e>t;)r[t]=arguments[t++];return r},Ut=!!V&&o(function(){yt.call(new V(1))}),zt=function(){return yt.apply(Ut?bt.call(Rt(this)):Rt(this),arguments)},Dt={copyWithin:function(t,e){return U.call(Rt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return rt(Rt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return L.apply(Rt(this),arguments)},filter:function(t){return Tt(this,tt(Rt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return nt(Rt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return it(Rt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){Q(Rt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return at(Rt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return ot(Rt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return lt.apply(Rt(this),arguments)},lastIndexOf:function(t){return ht.apply(Rt(this),arguments)},map:function(t){return kt(Rt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ct.apply(Rt(this),arguments)},reduceRight:function(t){return dt.apply(Rt(this),arguments)},reverse:function(){for(var t,e=this,r=Rt(e).length,n=Math.floor(r/2),i=0;i<n;)t=e[i],e[i++]=e[--r],e[r]=t;return e},some:function(t){return et(Rt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return pt.call(Rt(this),t)},subarray:function(t,e){var r=Rt(this),n=r.length,i=v(t,n);return new(P(r,r[_t]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,b((void 0===e?n:v(e,n))-i))}},qt=function(t,e){return Tt(this,bt.call(Rt(this),t,e))},Ft=function(t){Rt(this);var e=Ot(arguments[1],1),r=this.length,n=M(t),i=b(n.length),o=0;if(i+e>r)throw K(At);for(;o<i;)this[e+o]=n[o++]},Kt={entries:function(){return ut.call(Rt(this))},keys:function(){return st.call(Rt(this))},values:function(){return ft.call(Rt(this))}},Gt=function(t,e){return _(t)&&t[St]&&"symbol"!=typeof e&&e in t&&String(+e)==String(e)},Vt=function(t,e){return Gt(t,e=y(e,!0))?c(2,t[e]):F(t,e)},Ht=function(t,e,r){return!(Gt(t,e=y(e,!0))&&_(r)&&m(r,"value"))||m(r,"get")||m(r,"set")||r.configurable||m(r,"writable")&&!r.writable||m(r,"enumerable")&&!r.enumerable?q(t,e,r):(t[e]=r.value,t)};Mt||(D.f=Vt,z.f=Ht),a(a.S+a.F*!Mt,"Object",{getOwnPropertyDescriptor:Vt,defineProperty:Ht}),o(function(){vt.call({})})&&(vt=yt=function(){return lt.call(this)});var Xt=l({},Dt);l(Xt,Kt),d(Xt,mt,Kt.values),l(Xt,{slice:qt,set:Ft,constructor:function(){},toString:vt,toLocaleString:zt}),Ct(Xt,"buffer","b"),Ct(Xt,"byteOffset","o"),Ct(Xt,"byteLength","l"),Ct(Xt,"length","e"),q(Xt,gt,{get:function(){return this[St]}}),t.exports=function(t,e,r,s){s=!!s;var u=t+(s?"Clamped":"")+"Array",c="Uint8Array"!=u,l="get"+t,p="set"+t,v=i[u],y=v||{},m=v&&A(v),g=!v||!f.ABV,M={},S=v&&v[W],x=function(t,r){var n=t._d;return n.v[l](r*e+n.o,xt)},I=function(t,r,n){var i=t._d;s&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[p](r*e+i.o,n,xt)},B=function(t,e){q(t,e,{get:function(){return x(this,e)},set:function(t){return I(this,e,t)},enumerable:!0})};g?(v=r(function(t,r,n,i){h(t,v,u,"_d");var o,a,f,s,c=0,l=0;if(_(r)){if(!(r instanceof J||(s=w(r))==H||s==X))return St in r?jt(v,r):Nt.call(v,r);o=r,l=Ot(n,e);var p=r.byteLength;if(void 0===i){if(p%e)throw K(At);if(a=p-l,a<0)throw K(At)}else if(a=b(i)*e,a+l>p)throw K(At);f=a/e}else f=Bt(r,!0),a=f*e,o=new J(a);for(d(t,"_d",{b:o,o:l,l:a,e:f,v:new $(o)});c<f;)B(t,c++)}),S=v[W]=E(Xt),d(S,"constructor",v)):C(function(t){new v(null),new v(t)},!0)||(v=r(function(t,r,n,i){h(t,v,u);var o;return _(r)?r instanceof J||(o=w(r))==H||o==X?void 0!==i?new y(r,Ot(n,e),i):void 0!==n?new y(r,Ot(n,e)):new y(r):St in r?jt(v,r):Nt.call(v,r):new y(Bt(r,c))}),Q(m!==Function.prototype?k(y).concat(k(m)):k(y),function(t){t in v||d(v,t,y[t])}),v[W]=S,n||(S.constructor=v));var O=S[mt],R=!!O&&("values"==O.name||void 0==O.name),P=Kt.values;d(v,wt,!0),d(S,St,u),d(S,Et,!0),d(S,_t,v),(s?new v(1)[gt]==u:gt in S)||q(S,gt,{get:function(){return u}}),M[u]=v,a(a.G+a.W+a.F*(v!=y),M),a(a.S,u,{BYTES_PER_ELEMENT:e,from:Nt,of:Lt}),Y in S||d(S,Y,e),a(a.P,u,Dt),N(u),a(a.P+a.F*It,u,{set:Ft}),a(a.P+a.F*!R,u,Kt),a(a.P+a.F*(S.toString!=vt),u,{toString:vt}),a(a.P+a.F*o(function(){new v(1).slice()}),u,{slice:qt}),a(a.P+a.F*(o(function(){return[1,2].toLocaleString()!=new v([1,2]).toLocaleString()})||!o(function(){S.toLocaleString.call([1,2])})),u,{toLocaleString:zt}),j[u]=R?O:P,n||R||d(S,mt,P)}}else t.exports=function(){}},function(t,e,r){var n=r(48)("meta"),i=r(6),o=r(12),a=r(9).f,f=0,s=Object.isExtensible||function(){return!0},u=!r(5)(function(){return s(Object.preventExtensions({}))}),h=function(t){a(t,n,{value:{i:"O"+ ++f,w:{}}})},c=function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,n)){if(!s(t))return"F";if(!e)return"E";h(t)}return t[n].i},d=function(t,e){if(!o(t,n)){if(!s(t))return!0;if(!e)return!1;h(t)}return t[n].w},l=function(t){return u&&p.NEED&&s(t)&&!o(t,n)&&h(t),t},p=t.exports={KEY:n,NEED:!1,fastKey:c,getWeak:d,onFreeze:l}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var r=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:r)(t)}},function(t,e){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e){t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,e){t.exports=!1},function(t,e,r){var n=r(3),i=r(180),o=r(121),a=r(133)("IE_PROTO"),f=function(){},s="prototype",u=function(){var t,e=r(120)("iframe"),n=o.length,i="<",a=">";for(e.style.display="none",r(123).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(i+"script"+a+"document.F=Object"+i+"/script"+a),t.close(),u=t.F;n--;)delete u[s][o[n]];return u()};t.exports=Object.create||function(t,e){var r;return null!==t?(f[s]=n(t),r=new f,f[s]=null,r[a]=t):r=u(),void 0===e?r:i(r,e)}},function(t,e,r){var n=r(182),i=r(121).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},function(t,e,r){var n=r(182),i=r(121);t.exports=Object.keys||function(t){return n(t,i)}},function(t,e,r){var n=r(15);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},function(t,e,r){"use strict";var n=r(4),i=r(9),o=r(8),a=r(7)("species");t.exports=function(t){var e=n[t];o&&e&&!e[a]&&i.f(e,a,{configurable:!0,get:function(){return this}})}},function(t,e,r){var n=r(38),i=Math.max,o=Math.min;t.exports=function(t,e){return t=n(t),t<0?i(t+e,0):o(t,e)}},function(t,e){var r=0,n=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+n).toString(36))}},function(t,e,r){var n=e;n.utils=r(527),n.common=r(523),n.sha=r(526),n.ripemd=r(525),n.hmac=r(524),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},function(t,e,r){var n=e;n.utils=r(564),n.common=r(560),n.sha=r(563),n.ripemd=r(562),n.hmac=r(561),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},function(t,e,r){"use strict";function n(t){return this instanceof n?(u.call(this,t),h.call(this,t),t&&t.readable===!1&&(this.readable=!1),t&&t.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,t&&t.allowHalfOpen===!1&&(this.allowHalfOpen=!1),void this.once("end",i)):new n(t)}function i(){this.allowHalfOpen||this._writableState.ended||f(o,this)}function o(t){t.end()}var a=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};t.exports=n;var f=r(157),s=r(73);s.inherits=r(74);var u=r(250),h=r(155);s.inherits(n,u);for(var c=a(h.prototype),d=0;d<c.length;d++){var l=c[d];n.prototype[l]||(n.prototype[l]=h.prototype[l])}},function(t,e,r){function n(t){if(t&&!s(t))throw new Error("Unknown encoding: "+t)}function i(t){return t.toString(this.encoding)}function o(t){this.charReceived=t.length%2,this.charLength=this.charReceived?2:0}function a(t){this.charReceived=t.length%3,this.charLength=this.charReceived?3:0}var f=r(1).Buffer,s=f.isEncoding||function(t){switch(t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},u=e.StringDecoder=function(t){switch(this.encoding=(t||"utf8").toLowerCase().replace(/[-_]/,""),n(t),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=o;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=a;break;default:return void(this.write=i)}this.charBuffer=new f(6),this.charReceived=0,this.charLength=0};u.prototype.write=function(t){for(var e="";this.charLength;){var r=t.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived<this.charLength)return"";t=t.slice(r,t.length),e=this.charBuffer.slice(0,this.charLength).toString(this.encoding);var n=e.charCodeAt(e.length-1);if(!(n>=55296&&n<=56319)){if(this.charReceived=this.charLength=0,0===t.length)return e;break}this.charLength+=this.surrogateSize,e=""}this.detectIncompleteChar(t);var i=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,i),i-=this.charReceived),e+=t.toString(this.encoding,0,i);var i=e.length-1,n=e.charCodeAt(i);if(n>=55296&&n<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,i)}return e},u.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var r=t[t.length-e];if(1==e&&r>>5==6){this.charLength=2;break}if(e<=2&&r>>4==14){this.charLength=3;break}if(e<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=e},u.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var r=this.charReceived,n=this.charBuffer,i=this.encoding;e+=n.slice(0,r).toString(i)}return e}},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
||
return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(62),f=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){var n=r(7)("unscopables"),i=Array.prototype;void 0==i[n]&&r(14)(i,n,{}),t.exports=function(t){i[n][t]=!0}},function(t,e,r){var n=r(33),i=r(176),o=r(125),a=r(3),f=r(10),s=r(142),u={},h={},e=t.exports=function(t,e,r,c,d){var l,p,b,v,y=d?function(){return t}:s(t),m=n(r,c,e?2:1),g=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(o(y)){for(l=f(t.length);l>g;g++)if(v=e?m(a(p=t[g])[0],p[1]):m(t[g]),v===u||v===h)return v}else for(b=y.call(t);!(p=b.next()).done;)if(v=i(b,m,p.value,e),v===u||v===h)return v};e.BREAK=u,e.RETURN=h},function(t,e){t.exports={}},function(t,e,r){var n=r(9).f,i=r(12),o=r(7)("toStringTag");t.exports=function(t,e,r){t&&!i(t=r?t:t.prototype,o)&&n(t,o,{configurable:!0,value:e})}},function(t,e,r){var n=r(0),i=r(24),o=r(5),a=r(138),f="["+a+"]",s="
",u=RegExp("^"+f+f+"*"),h=RegExp(f+f+"*$"),c=function(t,e,r){var i={},f=o(function(){return!!a[t]()||s[t]()!=s}),u=i[t]=f?e(d):a[t];r&&(i[r]=u),n(n.P+n.F*f,"String",i)},d=c.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(h,"")),t};t.exports=c},function(t,e,r){"use strict";(function(e){function n(t){u.call(this,"digest"),this._hash=t,this.buffers=[]}function i(t){u.call(this,"digest"),this._hash=t}var o=r(2),a=r(105),f=r(567),s=r(568),u=r(566);o(n,u),n.prototype._update=function(t){this.buffers.push(t)},n.prototype._final=function(){var t=e.concat(this.buffers),r=this._hash(t);return this.buffers=null,r},o(i,u),i.prototype._update=function(t){this._hash.update(t)},i.prototype._final=function(){return this._hash.digest()},t.exports=function(t){return t=t.toLowerCase(),"md5"===t?new n(a):"rmd160"===t||"ripemd160"===t?new n(f):new i(s(t))}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function r(t,r){this._block=new e(t),this._finalSize=r,this._blockSize=t,this._len=0,this._s=0}r.prototype.update=function(t,r){"string"==typeof t&&(r=r||"utf8",t=new e(t,r));for(var n=this._len+=t.length,i=this._s||0,o=0,a=this._block;i<n;){for(var f=Math.min(t.length,o+this._blockSize-i%this._blockSize),s=f-o,u=0;u<s;u++)a[i%this._blockSize+u]=t[u+o];i+=s,o+=s,i%this._blockSize===0&&this._update(a)}return this._s=i,this},r.prototype.digest=function(t){var e=8*this._len;this._block[this._len%this._blockSize]=128,this._block.fill(0,this._len%this._blockSize+1),e%(8*this._blockSize)>=8*this._finalSize&&(this._update(this._block),this._block.fill(0)),this._block.writeInt32BE(e,this._blockSize-4);var r=this._update(this._block)||this._hash();return t?r.toString(t):r},r.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=r}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e,r,n){function i(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}function o(t,i){if(t>65536)throw new Error("requested too many random bytes");var o=new e.Uint8Array(t);t>0&&a.getRandomValues(o);var f=new r(o.buffer);return"function"==typeof i?n.nextTick(function(){i(null,f)}):f}var a=e.crypto||e.msCrypto;a&&a.getRandomValues?t.exports=o:t.exports=i}).call(e,r(39),r(1).Buffer,r(26))},function(t,e){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var o=function(t){function e(t){r(this,e);var i=n(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return Object.defineProperty(i,"message",{configurable:!0,enumerable:!1,value:void 0!==t?String(t):""}),Object.defineProperty(i,"name",{configurable:!0,enumerable:!1,value:i.constructor.name}),Error.captureStackTrace&&Error.captureStackTrace(i,i.constructor),i}return i(e,t),e}(Error);t.exports=o},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(115),a=r(75),f=r(90),s=r(91),u=r(201),h=r(116),c=r(159),d=r(113),l=/^cf:([1-9a-f][0-9a-f]{0,3}|0):[a-zA-Z0-9_-]*$/,p=function(){function t(){n(this,t)}return i(t,[{key:"getTypeId",value:function(){return this.constructor.TYPE_ID}},{key:"getBitmask",value:function(){return this.constructor.FEATURE_BITMASK}},{key:"getCondition",value:function(){var t=new a;return t.setTypeId(this.getTypeId()),t.setBitmask(this.getBitmask()),t.setHash(this.generateHash()),t.setMaxFulfillmentLength(this.calculateMaxFulfillmentLength()),t}},{key:"getConditionUri",value:function(){return this.getCondition().serializeUri()}},{key:"getConditionBinary",value:function(){return this.getCondition().serializeBinary()}},{key:"generateHash",value:function(){throw new Error("This method should be implemented by a subclass")}},{key:"calculateMaxFulfillmentLength",value:function(){var t=new f;return this.writePayload(t),t.getSize()}},{key:"serializeUri",value:function(){return"cf:"+this.getTypeId().toString(16)+":"+h.encode(this.serializePayload())}},{key:"serializeBinary",value:function(){var t=new s;return t.writeUInt16(this.getTypeId()),t.writeVarOctetString(this.serializePayload()),t.getBuffer()}},{key:"serializePayload",value:function(){var t=new s;return this.writePayload(t),t.getBuffer()}},{key:"validate",value:function(){throw new Error("Not implemented")}}],[{key:"fromUri",value:function(e){if(e instanceof t)return e;if("string"!=typeof e)throw new Error("Serialized fulfillment must be a string");var r=e.split(":");if("cf"!==r[0])throw new c('Serialized fulfillment must start with "cf:"');if(!t.REGEX.exec(e))throw new d("Invalid fulfillment format");var n=parseInt(r[1],16),i=h.decode(r[2]),a=o.getClassFromTypeId(n),f=new a;return f.parsePayload(u.from(i),i.length),f}},{key:"fromBinary",value:function(t){t=u.from(t);var e=o.getClassFromTypeId(t.readUInt16()),r=new e,n=t.readLengthPrefix();return r.parsePayload(t,n),r}}]),t}();p.REGEX=l,t.exports=p},function(t,e,r){var n=r(23),i=r(7)("toStringTag"),o="Arguments"==n(function(){return arguments}()),a=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,r,f;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=a(e=Object(t),i))?r:o?n(e):"Object"==(f=n(e))&&"function"==typeof e.callee?"Arguments":f}},function(t,e,r){var n=r(23);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,r){(function(e){t.exports=function(t,r){for(var n=Math.min(t.length,r.length),i=new e(n),o=0;o<n;++o)i[o]=t[o]^r[o];return i}}).call(e,r(1).Buffer)},function(t,e,r){var n=e;n.Reporter=r(532).Reporter,n.DecoderBuffer=r(214).DecoderBuffer,n.EncoderBuffer=r(214).EncoderBuffer,n.Node=r(531)},function(t,e,r){(function(e){t.exports=function(t,r){for(var n=Math.min(t.length,r.length),i=new e(n),o=0;o<n;++o)i[o]=t[o]^r[o];return i}}).call(e,r(1).Buffer)},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<i;o++){var a=t.charCodeAt(o)-48;n<<=4,n|=a>=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<o;a++){var f=t.charCodeAt(a)-48;i*=n,i+=f>=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<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>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<n;u++){for(var h=s>>>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<r.length-1;o++){var a=i;i=0;for(var f=67108863&n,s=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=s;u++){var h=o-u,c=0|t.words[h],d=0|e.words[u],l=c*d,p=67108863&l;a=a+(l/67108864|0)|0,p=p+f|0,f=67108863&p,a=a+(p>>>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<this.length;i++)this.words[i]=0;var o,a,f=0;if("be"===r)for(i=t.length-1,o=0;i>=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);else if("le"===r)for(i=0,o=0;i<t.length;i+=3)a=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>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<this.length;r++)this.words[r]=0;var n,i,o=0;for(r=t.length-6,n=0;r>=e;r-=6)i=a(t,r,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==e&&(i=a(t,e,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=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;h<s;h+=n)u=f(t,h,h+n,e),this.imuln(i),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==a){var c=1;for(u=f(t,h,t.length,e),h=0;h<a;h++)c*=e;this.imuln(c),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},o.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},o.prototype.clone=function(){var t=new o(null);return this.copy(t),t},o.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&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?"<BN-R: ":"<BN: ")+this.toString(16)+">"};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<this.length;a++){var f=this.words[a],s=(16777215&(f<<i|o)).toString(16);o=f>>>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<o;f++)u[f]=0}else{for(f=0;f<o-i;f++)u[f]=0;for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[o-f-1]=a}return u},Math.clz32?o.prototype._countBits=function(t){return 32-Math.clz32(t)}:o.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0===(8191&e)&&(r+=13,e>>>=13),0===(127&e)&&(r+=7,e>>>=7),0===(15&e)&&(r+=4,e>>>=4),0===(3&e)&&(r+=2,e>>>=2),0===(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},o.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},o.prototype.ior=function(t){return n(0===(this.negative|t.negative)),this.iuor(t)},o.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},o.prototype.iand=function(t){return n(0===(this.negative|t.negative)),this.iuand(t)},o.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},o.prototype.ixor=function(t){return n(0===(this.negative|t.negative)),this.iuxor(t)},o.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),e?this.words[r]=this.words[r]|1<<i:this.words[r]=this.words[r]&~(1<<i),this.strip()},o.prototype.iadd=function(t){var e;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();var r,n;this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o<n.length;o++)e=(0|r.words[o])+(0|n.words[o])+i,this.words[o]=67108863&e,i=e>>>26;for(;0!==i&&o<r.length;o++)e=(0|r.words[o])+i,this.words[o]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},o.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=t):(n=t,i=this);for(var o=0,a=0;a<i.length;a++)e=(0|n.words[a])-(0|i.words[a])+o,o=e>>26,this.words[a]=67108863&e;for(;0!==o&&a<n.length;a++)e=(0|n.words[a])+o,o=e>>26,this.words[a]=67108863&e;if(0===o&&a<n.length&&n!==this)for(;a<n.length;a++)this.words[a]=n.words[a];return this.length=Math.max(this.length,a),n!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(t){return this.clone().isub(t)};var E=function(t,e,r){var n,i,o,a=t.words,f=e.words,s=r.words,u=0,h=0|a[0],c=8191&h,d=h>>>13,l=0|a[1],p=8191&l,b=l>>>13,v=0|a[2],y=8191&v,m=v>>>13,g=0|a[3],w=8191&g,_=g>>>13,M=0|a[4],S=8191&M,E=M>>>13,A=0|a[5],k=8191&A,x=A>>>13,I=0|a[6],B=8191&I,O=I>>>13,R=0|a[7],P=8191&R,T=R>>>13,j=0|a[8],C=8191&j,N=j>>>13,L=0|a[9],U=8191&L,z=L>>>13,D=0|f[0],q=8191&D,F=D>>>13,K=0|f[1],G=8191&K,V=K>>>13,H=0|f[2],X=8191&H,Y=H>>>13,W=0|f[3],Z=8191&W,J=W>>>13,$=0|f[4],Q=8191&$,tt=$>>>13,et=0|f[5],rt=8191&et,nt=et>>>13,it=0|f[6],ot=8191&it,at=it>>>13,ft=0|f[7],st=8191&ft,ut=ft>>>13,ht=0|f[8],ct=8191&ht,dt=ht>>>13,lt=0|f[9],pt=8191<,bt=lt>>>13;r.negative=t.negative^e.negative,r.length=19,n=Math.imul(c,q),i=Math.imul(c,F),i=i+Math.imul(d,q)|0,o=Math.imul(d,F);var vt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(p,q),i=Math.imul(p,F),i=i+Math.imul(b,q)|0,o=Math.imul(b,F),n=n+Math.imul(c,G)|0,i=i+Math.imul(c,V)|0,i=i+Math.imul(d,G)|0,o=o+Math.imul(d,V)|0;var yt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,q),i=Math.imul(y,F),i=i+Math.imul(m,q)|0,o=Math.imul(m,F),n=n+Math.imul(p,G)|0,i=i+Math.imul(p,V)|0,i=i+Math.imul(b,G)|0,o=o+Math.imul(b,V)|0,n=n+Math.imul(c,X)|0,i=i+Math.imul(c,Y)|0,i=i+Math.imul(d,X)|0,o=o+Math.imul(d,Y)|0;var mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(w,q),i=Math.imul(w,F),i=i+Math.imul(_,q)|0,o=Math.imul(_,F),n=n+Math.imul(y,G)|0,i=i+Math.imul(y,V)|0,i=i+Math.imul(m,G)|0,o=o+Math.imul(m,V)|0,n=n+Math.imul(p,X)|0,i=i+Math.imul(p,Y)|0,i=i+Math.imul(b,X)|0,o=o+Math.imul(b,Y)|0,n=n+Math.imul(c,Z)|0,i=i+Math.imul(c,J)|0,i=i+Math.imul(d,Z)|0,o=o+Math.imul(d,J)|0;var gt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(S,q),i=Math.imul(S,F),i=i+Math.imul(E,q)|0,o=Math.imul(E,F),n=n+Math.imul(w,G)|0,i=i+Math.imul(w,V)|0,i=i+Math.imul(_,G)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,X)|0,i=i+Math.imul(y,Y)|0,i=i+Math.imul(m,X)|0,o=o+Math.imul(m,Y)|0,n=n+Math.imul(p,Z)|0,i=i+Math.imul(p,J)|0,i=i+Math.imul(b,Z)|0,o=o+Math.imul(b,J)|0,n=n+Math.imul(c,Q)|0,i=i+Math.imul(c,tt)|0,i=i+Math.imul(d,Q)|0,o=o+Math.imul(d,tt)|0;var wt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,q),i=Math.imul(k,F),i=i+Math.imul(x,q)|0,o=Math.imul(x,F),n=n+Math.imul(S,G)|0,i=i+Math.imul(S,V)|0,i=i+Math.imul(E,G)|0,o=o+Math.imul(E,V)|0,n=n+Math.imul(w,X)|0,i=i+Math.imul(w,Y)|0,i=i+Math.imul(_,X)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,Z)|0,i=i+Math.imul(y,J)|0,i=i+Math.imul(m,Z)|0,o=o+Math.imul(m,J)|0,n=n+Math.imul(p,Q)|0,i=i+Math.imul(p,tt)|0,i=i+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,n=n+Math.imul(c,rt)|0,i=i+Math.imul(c,nt)|0,i=i+Math.imul(d,rt)|0,o=o+Math.imul(d,nt)|0;var _t=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(B,q),i=Math.imul(B,F),i=i+Math.imul(O,q)|0,o=Math.imul(O,F),n=n+Math.imul(k,G)|0,i=i+Math.imul(k,V)|0,i=i+Math.imul(x,G)|0,o=o+Math.imul(x,V)|0,n=n+Math.imul(S,X)|0,i=i+Math.imul(S,Y)|0,i=i+Math.imul(E,X)|0,o=o+Math.imul(E,Y)|0,n=n+Math.imul(w,Z)|0,i=i+Math.imul(w,J)|0,i=i+Math.imul(_,Z)|0,o=o+Math.imul(_,J)|0,n=n+Math.imul(y,Q)|0,i=i+Math.imul(y,tt)|0,i=i+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0,n=n+Math.imul(p,rt)|0,i=i+Math.imul(p,nt)|0,i=i+Math.imul(b,rt)|0,o=o+Math.imul(b,nt)|0,n=n+Math.imul(c,ot)|0,i=i+Math.imul(c,at)|0,i=i+Math.imul(d,ot)|0,o=o+Math.imul(d,at)|0;var Mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,q),i=Math.imul(P,F),i=i+Math.imul(T,q)|0,o=Math.imul(T,F),n=n+Math.imul(B,G)|0,i=i+Math.imul(B,V)|0,i=i+Math.imul(O,G)|0,o=o+Math.imul(O,V)|0,n=n+Math.imul(k,X)|0,i=i+Math.imul(k,Y)|0,i=i+Math.imul(x,X)|0,o=o+Math.imul(x,Y)|0,n=n+Math.imul(S,Z)|0,i=i+Math.imul(S,J)|0,i=i+Math.imul(E,Z)|0,o=o+Math.imul(E,J)|0,n=n+Math.imul(w,Q)|0,i=i+Math.imul(w,tt)|0,i=i+Math.imul(_,Q)|0,o=o+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=i+Math.imul(y,nt)|0,i=i+Math.imul(m,rt)|0,o=o+Math.imul(m,nt)|0,n=n+Math.imul(p,ot)|0,i=i+Math.imul(p,at)|0,i=i+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0,n=n+Math.imul(c,st)|0,i=i+Math.imul(c,ut)|0,i=i+Math.imul(d,st)|0,o=o+Math.imul(d,ut)|0;var St=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(C,q),i=Math.imul(C,F),i=i+Math.imul(N,q)|0,o=Math.imul(N,F),n=n+Math.imul(P,G)|0,i=i+Math.imul(P,V)|0,i=i+Math.imul(T,G)|0,o=o+Math.imul(T,V)|0,n=n+Math.imul(B,X)|0,i=i+Math.imul(B,Y)|0,i=i+Math.imul(O,X)|0,o=o+Math.imul(O,Y)|0,n=n+Math.imul(k,Z)|0,i=i+Math.imul(k,J)|0,i=i+Math.imul(x,Z)|0,o=o+Math.imul(x,J)|0,n=n+Math.imul(S,Q)|0,i=i+Math.imul(S,tt)|0,i=i+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,n=n+Math.imul(w,rt)|0,i=i+Math.imul(w,nt)|0,i=i+Math.imul(_,rt)|0,o=o+Math.imul(_,nt)|0,n=n+Math.imul(y,ot)|0,i=i+Math.imul(y,at)|0,i=i+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0,n=n+Math.imul(p,st)|0,i=i+Math.imul(p,ut)|0,i=i+Math.imul(b,st)|0,o=o+Math.imul(b,ut)|0,n=n+Math.imul(c,ct)|0,i=i+Math.imul(c,dt)|0,i=i+Math.imul(d,ct)|0,o=o+Math.imul(d,dt)|0;var Et=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(U,q),i=Math.imul(U,F),i=i+Math.imul(z,q)|0,o=Math.imul(z,F),n=n+Math.imul(C,G)|0,i=i+Math.imul(C,V)|0,i=i+Math.imul(N,G)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,X)|0,i=i+Math.imul(P,Y)|0,i=i+Math.imul(T,X)|0,o=o+Math.imul(T,Y)|0,n=n+Math.imul(B,Z)|0,i=i+Math.imul(B,J)|0,i=i+Math.imul(O,Z)|0,o=o+Math.imul(O,J)|0,n=n+Math.imul(k,Q)|0,i=i+Math.imul(k,tt)|0,i=i+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,n=n+Math.imul(S,rt)|0,i=i+Math.imul(S,nt)|0,i=i+Math.imul(E,rt)|0,o=o+Math.imul(E,nt)|0,n=n+Math.imul(w,ot)|0,i=i+Math.imul(w,at)|0,i=i+Math.imul(_,ot)|0,o=o+Math.imul(_,at)|0,n=n+Math.imul(y,st)|0,i=i+Math.imul(y,ut)|0,i=i+Math.imul(m,st)|0,o=o+Math.imul(m,ut)|0,n=n+Math.imul(p,ct)|0,i=i+Math.imul(p,dt)|0,i=i+Math.imul(b,ct)|0,o=o+Math.imul(b,dt)|0,n=n+Math.imul(c,pt)|0,i=i+Math.imul(c,bt)|0,i=i+Math.imul(d,pt)|0,o=o+Math.imul(d,bt)|0;var At=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(U,G),i=Math.imul(U,V),i=i+Math.imul(z,G)|0,o=Math.imul(z,V),n=n+Math.imul(C,X)|0,i=i+Math.imul(C,Y)|0,i=i+Math.imul(N,X)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(P,Z)|0,i=i+Math.imul(P,J)|0,i=i+Math.imul(T,Z)|0,o=o+Math.imul(T,J)|0,n=n+Math.imul(B,Q)|0,i=i+Math.imul(B,tt)|0,i=i+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,n=n+Math.imul(k,rt)|0,i=i+Math.imul(k,nt)|0,i=i+Math.imul(x,rt)|0,o=o+Math.imul(x,nt)|0,n=n+Math.imul(S,ot)|0,i=i+Math.imul(S,at)|0,i=i+Math.imul(E,ot)|0,o=o+Math.imul(E,at)|0,n=n+Math.imul(w,st)|0,i=i+Math.imul(w,ut)|0,i=i+Math.imul(_,st)|0,o=o+Math.imul(_,ut)|0,n=n+Math.imul(y,ct)|0,i=i+Math.imul(y,dt)|0,i=i+Math.imul(m,ct)|0,o=o+Math.imul(m,dt)|0,n=n+Math.imul(p,pt)|0,i=i+Math.imul(p,bt)|0,i=i+Math.imul(b,pt)|0,o=o+Math.imul(b,bt)|0;var kt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(U,X),i=Math.imul(U,Y),i=i+Math.imul(z,X)|0,o=Math.imul(z,Y),n=n+Math.imul(C,Z)|0,i=i+Math.imul(C,J)|0,i=i+Math.imul(N,Z)|0,o=o+Math.imul(N,J)|0,n=n+Math.imul(P,Q)|0,i=i+Math.imul(P,tt)|0,i=i+Math.imul(T,Q)|0,o=o+Math.imul(T,tt)|0,n=n+Math.imul(B,rt)|0,i=i+Math.imul(B,nt)|0,i=i+Math.imul(O,rt)|0,o=o+Math.imul(O,nt)|0,n=n+Math.imul(k,ot)|0,i=i+Math.imul(k,at)|0,i=i+Math.imul(x,ot)|0,o=o+Math.imul(x,at)|0,n=n+Math.imul(S,st)|0,i=i+Math.imul(S,ut)|0,i=i+Math.imul(E,st)|0,o=o+Math.imul(E,ut)|0,n=n+Math.imul(w,ct)|0,i=i+Math.imul(w,dt)|0,i=i+Math.imul(_,ct)|0,o=o+Math.imul(_,dt)|0,n=n+Math.imul(y,pt)|0,i=i+Math.imul(y,bt)|0,i=i+Math.imul(m,pt)|0,o=o+Math.imul(m,bt)|0;var xt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(U,Z),i=Math.imul(U,J),i=i+Math.imul(z,Z)|0,o=Math.imul(z,J),n=n+Math.imul(C,Q)|0,i=i+Math.imul(C,tt)|0,i=i+Math.imul(N,Q)|0,o=o+Math.imul(N,tt)|0,n=n+Math.imul(P,rt)|0,i=i+Math.imul(P,nt)|0,i=i+Math.imul(T,rt)|0,o=o+Math.imul(T,nt)|0,n=n+Math.imul(B,ot)|0,i=i+Math.imul(B,at)|0,i=i+Math.imul(O,ot)|0,o=o+Math.imul(O,at)|0,n=n+Math.imul(k,st)|0,i=i+Math.imul(k,ut)|0,i=i+Math.imul(x,st)|0,o=o+Math.imul(x,ut)|0,n=n+Math.imul(S,ct)|0,i=i+Math.imul(S,dt)|0,i=i+Math.imul(E,ct)|0,o=o+Math.imul(E,dt)|0,n=n+Math.imul(w,pt)|0,i=i+Math.imul(w,bt)|0,i=i+Math.imul(_,pt)|0,o=o+Math.imul(_,bt)|0;var It=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(U,Q),i=Math.imul(U,tt),i=i+Math.imul(z,Q)|0,o=Math.imul(z,tt),n=n+Math.imul(C,rt)|0,i=i+Math.imul(C,nt)|0,i=i+Math.imul(N,rt)|0,o=o+Math.imul(N,nt)|0,n=n+Math.imul(P,ot)|0,i=i+Math.imul(P,at)|0,i=i+Math.imul(T,ot)|0,o=o+Math.imul(T,at)|0,n=n+Math.imul(B,st)|0,i=i+Math.imul(B,ut)|0,i=i+Math.imul(O,st)|0,o=o+Math.imul(O,ut)|0,n=n+Math.imul(k,ct)|0,i=i+Math.imul(k,dt)|0,i=i+Math.imul(x,ct)|0,o=o+Math.imul(x,dt)|0,n=n+Math.imul(S,pt)|0,i=i+Math.imul(S,bt)|0,i=i+Math.imul(E,pt)|0,o=o+Math.imul(E,bt)|0;var Bt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(U,rt),i=Math.imul(U,nt),i=i+Math.imul(z,rt)|0,o=Math.imul(z,nt),n=n+Math.imul(C,ot)|0,i=i+Math.imul(C,at)|0,i=i+Math.imul(N,ot)|0,o=o+Math.imul(N,at)|0,n=n+Math.imul(P,st)|0,i=i+Math.imul(P,ut)|0,i=i+Math.imul(T,st)|0,o=o+Math.imul(T,ut)|0,n=n+Math.imul(B,ct)|0,i=i+Math.imul(B,dt)|0,i=i+Math.imul(O,ct)|0,o=o+Math.imul(O,dt)|0,n=n+Math.imul(k,pt)|0,i=i+Math.imul(k,bt)|0,i=i+Math.imul(x,pt)|0,o=o+Math.imul(x,bt)|0;var Ot=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(U,ot),i=Math.imul(U,at),i=i+Math.imul(z,ot)|0,o=Math.imul(z,at),n=n+Math.imul(C,st)|0,i=i+Math.imul(C,ut)|0,i=i+Math.imul(N,st)|0,o=o+Math.imul(N,ut)|0,n=n+Math.imul(P,ct)|0,i=i+Math.imul(P,dt)|0,i=i+Math.imul(T,ct)|0,o=o+Math.imul(T,dt)|0,n=n+Math.imul(B,pt)|0,i=i+Math.imul(B,bt)|0,i=i+Math.imul(O,pt)|0,o=o+Math.imul(O,bt)|0;var Rt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(U,st),i=Math.imul(U,ut),i=i+Math.imul(z,st)|0,o=Math.imul(z,ut),n=n+Math.imul(C,ct)|0,i=i+Math.imul(C,dt)|0,i=i+Math.imul(N,ct)|0,o=o+Math.imul(N,dt)|0,n=n+Math.imul(P,pt)|0,i=i+Math.imul(P,bt)|0,i=i+Math.imul(T,pt)|0,o=o+Math.imul(T,bt)|0;var Pt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(U,ct),i=Math.imul(U,dt),i=i+Math.imul(z,ct)|0,o=Math.imul(z,dt),n=n+Math.imul(C,pt)|0,i=i+Math.imul(C,bt)|0,i=i+Math.imul(N,pt)|0,o=o+Math.imul(N,bt)|0;var Tt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(U,pt),i=Math.imul(U,bt),i=i+Math.imul(z,pt)|0,o=Math.imul(z,bt);var jt=(u+n|0)+((8191&i)<<13)|0;return u=(o+(i>>>13)|0)+(jt>>>26)|0,jt&=67108863,s[0]=vt,s[1]=yt,s[2]=mt,s[3]=gt,s[4]=wt,s[5]=_t,s[6]=Mt,s[7]=St,s[8]=Et,s[9]=At,s[10]=kt,s[11]=xt,s[12]=It,s[13]=Bt,s[14]=Ot,s[15]=Rt,s[16]=Pt,s[17]=Tt,s[18]=jt,0!==u&&(s[19]=u,r.length++),r};Math.imul||(E=u),o.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?E(this,t,e):n<63?u(this,t,e):n<1024?h(this,t,e):c(this,t,e)},d.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},d.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},
|
||
d.prototype.permute=function(t,e,r,n,i,o){for(var a=0;a<o;a++)n[a]=e[t[a]],i[a]=r[t[a]]},d.prototype.transform=function(t,e,r,n,i,o){this.permute(o,t,e,r,n,i);for(var a=1;a<i;a<<=1)for(var f=a<<1,s=Math.cos(2*Math.PI/f),u=Math.sin(2*Math.PI/f),h=0;h<i;h+=f)for(var c=s,d=u,l=0;l<a;l++){var p=r[h+l],b=n[h+l],v=r[h+l+a],y=n[h+l+a],m=c*v-d*y;y=c*y+d*v,v=m,r[h+l]=p+v,n[h+l]=b+y,r[h+l+a]=p-v,n[h+l+a]=b-y,l!==f&&(m=s*c-u*d,d=s*d+u*c,c=m)}},d.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},d.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},d.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},d.prototype.convert13b=function(t,e,r,i){for(var o=0,a=0;a<e;a++)o+=0|t[a],r[2*a]=8191&o,o>>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*e;a<i;++a)r[a]=0;n(0===o),n(0===(o&-8192))},d.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},d.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),o=this.stub(n),a=new Array(n),f=new Array(n),s=new Array(n),u=new Array(n),h=new Array(n),c=new Array(n),d=r.words;d.length=n,this.convert13b(t.words,t.length,a,n),this.convert13b(e.words,e.length,u,n),this.transform(a,o,f,s,n,i),this.transform(u,o,h,c,n,i);for(var l=0;l<n;l++){var p=f[l]*h[l]-s[l]*c[l];s[l]=f[l]*c[l]+s[l]*h[l],f[l]=p}return this.conjugate(f,s,n),this.transform(f,s,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},o.prototype.mul=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},o.prototype.mulf=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),c(this,t,e)},o.prototype.imul=function(t){return this.clone().mulTo(t,this)},o.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,o=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=s(t);if(0===e.length)return new o(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(e=0;e<this.length;e++){var f=this.words[e]&o,s=(0|this.words[e])-f<<r;this.words[e]=s|a,a=f>>>26-r}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},o.prototype.iushrn=function(t,e,r){n("number"==typeof t&&t>=0);var i;i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),f=67108863^67108863>>>o<<o,s=r;if(i-=a,i=Math.max(0,i),s){for(var u=0;u<a;u++)s.words[u]=this.words[u];s.length=a}if(0===a);else if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;u>=0&&(0!==h||u>=i);u--){var c=0|this.words[u];this.words[u]=h<<26-o|c>>>o,h=c&f}return s&&0!==h&&(s.words[s.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return!1;var o=this.words[r];return!!(o&i)},o.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},o.prototype.maskn=function(t){return this.clone().imaskn(t)},o.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},o.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},o.prototype.addn=function(t){return this.clone().iaddn(t)},o.prototype.subn=function(t){return this.clone().isubn(t)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(t,e,r){var i,o=t.length+r;this._expand(o);var a,f=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+f;var s=(0|t.words[i])*e;a-=67108863&s,f=(a>>26)-(s/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)a=(0|this.words[i+r])+f,f=a>>26,this.words[i+r]=67108863&a;if(0===f)return this.strip();for(n(f===-1),f=0,i=0;i<this.length;i++)a=-(0|this.words[i])+f,f=a>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=this.length-t.length,n=this.clone(),i=t,a=0|i.words[i.length-1],f=this._countBits(a);r=26-f,0!==r&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==e){s=new o(null),s.length=u+1,s.words=new Array(s.length);for(var h=0;h<s.length;h++)s.words[h]=0}var c=n.clone()._ishlnsubmul(i,1,u);0===c.negative&&(n=c,s&&(s.words[u]=1));for(var d=u-1;d>=0;d--){var l=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(l=Math.min(l/a|0,67108863),n._ishlnsubmul(i,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);s&&(s.words[d]=l)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(t,e,r){if(n(!t.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var i,a,f;return 0!==this.negative&&0===t.negative?(f=this.neg().divmod(t,e),"mod"!==e&&(i=f.div.neg()),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(f=this.divmod(t.neg(),e),"mod"!==e&&(i=f.div.neg()),{div:i,mod:f.mod}):0!==(this.negative&t.negative)?(f=this.neg().divmod(t.neg(),e),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:f.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e)},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=new o(0),s=new o(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var h=r.clone(),c=e.clone();!e.isZero();){for(var d=0,l=1;0===(e.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(h),a.isub(c)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0===(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(f.isOdd()||s.isOdd())&&(f.iadd(h),s.isub(c)),f.iushrn(1),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(f),a.isub(s)):(r.isub(e),f.isub(i),s.isub(a))}return{a:f,b:s,gcd:r.iushln(u)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var s=0,u=1;0===(e.words[0]&u)&&s<26;++s,u<<=1);if(s>0)for(e.iushrn(s);s-- >0;)i.isOdd()&&i.iadd(f),i.iushrn(1);for(var h=0,c=1;0===(r.words[0]&c)&&h<26;++h,c<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(a)):(r.isub(e),a.isub(i))}var d;return d=0===e.cmpn(1)?i:a,d.cmpn(0)<0&&d.iadd(t),d},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var o=i,a=r;0!==o&&a<this.length;a++){var f=0|this.words[a];f+=o,o=f>>>26,f&=67108863,this.words[a]=f}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;this.strip();var r;if(this.length>1)r=1;else{e&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r},o.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},o.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return this.cmpn(t)===-1},o.prototype.lt=function(t){return this.cmp(t)===-1},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new m(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var A={k256:null,p224:null,p192:null,p25519:null};l.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},l.prototype.ireduce=function(t){var e,r=t;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength();while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},l.prototype.split=function(t,e){t.iushrn(this.n,0,e)},l.prototype.imulK=function(t){return t.imul(this.k)},i(p,l),p.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,i=10;i<t.length;i++){var a=0|t.words[i];t.words[i-10]=(a&r)<<4|o>>>22,o=a}o>>>=22,t.words[i-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},p.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,l),i(v,l),i(y,l),y.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function t(e){if(A[e])return A[e];var t;if("k256"===e)t=new p;else if("p224"===e)t=new b;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new y}return A[e]=t,t},m.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},m.prototype._verify2=function(t,e){n(0===(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},m.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},m.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},m.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},m.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},m.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},m.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},m.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},m.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},m.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},m.prototype.isqr=function(t){return this.imul(t,t.clone())},m.prototype.sqr=function(t){return this.mul(t,t)},m.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2===1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var f=new o(1).toRed(this),s=f.redNeg(),u=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new o(2*h*h).toRed(this);0!==this.pow(h,u).cmp(s);)h.redIAdd(s);for(var c=this.pow(h,i),d=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),p=a;0!==l.cmp(f);){for(var b=l,v=0;0!==b.cmp(f);v++)b=b.redSqr();n(v<p);var y=this.pow(c,new o(1).iushln(p-v-1));d=d.redMul(y),c=y.redSqr(),l=l.redMul(c),p=v}return d},m.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},m.prototype.pow=function(t,e){if(e.isZero())return new o(1);if(0===e.cmpn(1))return t.clone();var r=4,n=new Array(1<<r);n[0]=new o(1).toRed(this),n[1]=t;for(var i=2;i<n.length;i++)n[i]=this.mul(n[i-1],t);var a=n[0],f=0,s=0,u=e.bitLength()%26;for(0===u&&(u=26),i=e.length-1;i>=0;i--){for(var h=e.words[i],c=u-1;c>=0;c--){var d=h>>c&1;a!==n[0]&&(a=this.sqr(a)),0!==d||0!==f?(f<<=1,f|=d,s++,(s===r||0===i&&0===c)&&(a=this.mul(a,n[f]),s=0,f=0)):s=0}u=26}return a},m.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},m.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new g(t)},i(g,m),g.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},g.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},g.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},g.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},g.prototype.invm=function(t){var e=this.imod(t._invmp(this.m).mul(this.r2));return e._forceRed(this)}}("undefined"==typeof t||t,this)}).call(e,r(92)(t))},function(t,e,r){var n=e;n.Reporter=r(582).Reporter,n.DecoderBuffer=r(234).DecoderBuffer,n.EncoderBuffer=r(234).EncoderBuffer,n.Node=r(581)},function(t,e,r){(function(e){t.exports=function(t,r){for(var n=Math.min(t.length,r.length),i=new e(n),o=0;o<n;++o)i[o]=t[o]^r[o];return i}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(t){return Array.isArray?Array.isArray(t):"[object Array]"===v(t)}function n(t){return"boolean"==typeof t}function i(t){return null===t}function o(t){return null==t}function a(t){return"number"==typeof t}function f(t){return"string"==typeof t}function s(t){return"symbol"==typeof t}function u(t){return void 0===t}function h(t){return"[object RegExp]"===v(t)}function c(t){return"object"==typeof t&&null!==t}function d(t){return"[object Date]"===v(t)}function l(t){return"[object Error]"===v(t)||t instanceof Error}function p(t){return"function"==typeof t}function b(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||"undefined"==typeof t}function v(t){return Object.prototype.toString.call(t)}e.isArray=r,e.isBoolean=n,e.isNull=i,e.isNullOrUndefined=o,e.isNumber=a,e.isString=f,e.isSymbol=s,e.isUndefined=u,e.isRegExp=h,e.isObject=c,e.isDate=d,e.isError=l,e.isFunction=p,e.isPrimitive=b,e.isBuffer=t.isBuffer}).call(e,r(1).Buffer)},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,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(115),a=r(159),f=r(113),s=r(53),u=r(116),h=r(201),c=r(91),d=r(162),l=/^cc:([1-9a-f][0-9a-f]{0,3}|0):[1-9a-f][0-9a-f]{0,15}:[a-zA-Z0-9_-]{0,86}:([1-9][0-9]{0,17}|0)$/,p=/^cc:([1-9a-f][0-9a-f]{0,3}|0):[1-9a-f][0-9a-f]{0,7}:[a-zA-Z0-9_-]{0,86}:([1-9][0-9]{0,17}|0)$/,b=function(){function t(){n(this,t)}return i(t,[{key:"getTypeId",value:function(){return this.type}},{key:"setTypeId",value:function(t){this.type=t}},{key:"getBitmask",value:function(){return this.bitmask}},{key:"setBitmask",value:function(t){this.bitmask=t}},{key:"getHash",value:function(){if(!this.hash)throw new s("Hash not set");return this.hash}},{key:"setHash",value:function(t){if(!e.isBuffer(t))throw new TypeError("Hash must be a Buffer");this.hash=t}},{key:"getMaxFulfillmentLength",value:function(){if("number"!=typeof this.maxFulfillmentLength)throw new s("Maximum fulfillment length not set");return this.maxFulfillmentLength}},{key:"setMaxFulfillmentLength",value:function(t){if(!d(t))throw new TypeError("Fulfillment length must be an integer");if(t<0)throw new TypeError("Fulfillment length must be positive or zero");this.maxFulfillmentLength=t}},{key:"serializeUri",value:function(){return"cc:"+this.getTypeId().toString(16)+":"+this.getBitmask().toString(16)+":"+u.encode(this.getHash())+":"+this.getMaxFulfillmentLength()}},{key:"serializeBinary",value:function(){var t=new c;return t.writeUInt16(this.getTypeId()),t.writeVarUInt(this.getBitmask()),t.writeVarOctetString(this.getHash()),t.writeVarUInt(this.getMaxFulfillmentLength()),t.getBuffer()}},{key:"parseBinary",value:function(t){this.setTypeId(t.readUInt16()),this.setBitmask(t.readVarUInt()),this.setHash(t.readVarOctetString()),this.setMaxFulfillmentLength(t.readVarUInt())}},{key:"validate",value:function(){if(o.getClassFromTypeId(this.getTypeId()),this.getBitmask()>t.MAX_SAFE_BITMASK)throw new Error("Bitmask too large to be safely represented");if(this.getBitmask()&~t.SUPPORTED_BITMASK)throw new Error("Condition requested unsupported feature suites");if(this.getMaxFulfillmentLength()>t.MAX_FULFILLMENT_LENGTH)throw new Error("Condition requested too large of a max fulfillment size");return!0}}],[{key:"fromUri",value:function(e){if(e instanceof t)return e;if("string"!=typeof e)throw new Error("Serialized condition must be a string");var r=e.split(":");if("cc"!==r[0])throw new a('Serialized condition must start with "cc:"');if(!t.REGEX_STRICT.exec(e))throw new f("Invalid condition format");var n=new t;return n.setTypeId(parseInt(r[1],16)),n.setBitmask(parseInt(r[2],16)),n.setHash(u.decode(r[3])),n.setMaxFulfillmentLength(parseInt(r[4],10)),n}},{key:"fromBinary",value:function(e){e=h.from(e);var r=new t;return r.parseBinary(e),r}}]),t}();b.MAX_SAFE_BITMASK=4294967295,b.SUPPORTED_BITMASK=63,b.MAX_FULFILLMENT_LENGTH=65535,b.REGEX=l,b.REGEX_STRICT=p,t.exports=b}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=r(63),s=r(114),u=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),a(e,[{key:"generateHash",value:function(){var t=new s("sha256");return this.writeHashPayload(t),t.getDigest()}}]),e}(f);t.exports=u},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,r){var n=r(17),i=r(10),o=r(47);t.exports=function(t){return function(e,r,a){var f,s=n(e),u=i(s.length),h=o(a,u);if(t&&r!=r){for(;u>h;)if(f=s[h++],f!=f)return!0}else for(;u>h;h++)if((t||h in s)&&s[h]===r)return t||h||0;return!t&&-1}}},function(t,e,r){"use strict";var n=r(4),i=r(0),o=r(15),a=r(45),f=r(36),s=r(55),u=r(40),h=r(6),c=r(5),d=r(84),l=r(57),p=r(124);t.exports=function(t,e,r,b,v,y){var m=n[t],g=m,w=v?"set":"add",_=g&&g.prototype,M={},S=function(t){var e=_[t];o(_,t,"delete"==t?function(t){return!(y&&!h(t))&&e.call(this,0===t?0:t)}:"has"==t?function(t){return!(y&&!h(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return y&&!h(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,r){return e.call(this,0===t?0:t,r),this})};if("function"==typeof g&&(y||_.forEach&&!c(function(){(new g).entries().next()}))){var E=new g,A=E[w](y?{}:-0,1)!=E,k=c(function(){E.has(1)}),x=d(function(t){new g(t)}),I=!y&&c(function(){for(var t=new g,e=5;e--;)t[w](e,e);return!t.has(-0)});x||(g=e(function(e,r){u(e,g,t);var n=p(new m,e,g);return void 0!=r&&s(r,v,n[w],n),n}),g.prototype=_,_.constructor=g),(k||I)&&(S("delete"),S("has"),v&&S("get")),(I||A)&&S(w),y&&_.clear&&delete _.clear}else g=b.getConstructor(e,t,v,w),a(g.prototype,r),f.NEED=!0;return l(g,t),M[t]=g,i(i.G+i.W+i.F*(g!=m),M),y||b.setStrong(g,t,v),g}},function(t,e,r){"use strict";var n=r(14),i=r(15),o=r(5),a=r(24),f=r(7);t.exports=function(t,e,r){var s=f(t),u=r(a,s,""[t]),h=u[0],c=u[1];o(function(){var e={};return e[s]=function(){return 7},7!=""[t](e)})&&(i(String.prototype,t,h),n(RegExp.prototype,s,2==e?function(t,e){return c.call(t,this,e)}:function(t){return c.call(t,this)}))}},function(t,e,r){"use strict";var n=r(3);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e){t.exports=function(t,e,r){var n=void 0===r;switch(e.length){case 0:return n?t():t.call(r);case 1:return n?t(e[0]):t.call(r,e[0]);case 2:return n?t(e[0],e[1]):t.call(r,e[0],e[1]);case 3:return n?t(e[0],e[1],e[2]):t.call(r,e[0],e[1],e[2]);case 4:return n?t(e[0],e[1],e[2],e[3]):t.call(r,e[0],e[1],e[2],e[3])}return t.apply(r,e)}},function(t,e,r){var n=r(6),i=r(23),o=r(7)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},function(t,e,r){var n=r(7)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],a=o[n]();a.next=function(){return{done:r=!0}},o[n]=function(){return a},t(o)}catch(t){}return r}},function(t,e,r){t.exports=r(41)||!r(5)(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete r(4)[t]})},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,r){var n=r(4),i="__core-js_shared__",o=n[i]||(n[i]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,e,r){for(var n,i=r(4),o=r(14),a=r(48),f=a("typed_array"),s=a("view"),u=!(!i.ArrayBuffer||!i.DataView),h=u,c=0,d=9,l="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");c<d;)(n=i[l[c++]])?(o(n.prototype,f,!0),o(n.prototype,s,!0)):h=!1;t.exports={ABV:u,CONSTR:h,TYPED:f,VIEW:s}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,r){"use strict";t.exports=r(472)},function(t,e,r){"use strict";t.exports=r(474)},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,configurable:!1,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,configurable:!1,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,r){"use strict";e.randomBytes=e.rng=e.pseudoRandomBytes=e.prng=r(61),e.createHash=e.Hash=r(59),e.createHmac=e.Hmac=r(149);var n=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(Object.keys(r(211)));e.getHashes=function(){return n};var i=r(151);e.pbkdf2=i.pbkdf2,e.pbkdf2Sync=i.pbkdf2Sync;var o=r(493);["Cipher","createCipher","Cipheriv","createCipheriv","Decipher","createDecipher","Decipheriv","createDecipheriv","getCiphers","listCiphers"].forEach(function(t){e[t]=o[t]});var a=r(573);["DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman"].forEach(function(t){e[t]=a[t]});var f=r(506);["createSign","Sign","createVerify","Verify"].forEach(function(t){e[t]=f[t]}),e.createECDH=r(544);var s=r(577);["publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt"].forEach(function(t){e[t]=s[t]}),["createCredentials"].forEach(function(t){e[t]=function(){throw new Error(["sorry, "+t+" is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join("\n"))}})},function(t,e,r){(function(t){function r(t){var e,r;return e=t>f||t<0?(r=Math.abs(t)%f,t<0?f-r:r):t}function n(t){for(var e=0;e<t.length;t++)t[e]=0;return!1}function i(){this.SBOX=[],this.INV_SBOX=[],this.SUB_MIX=[[],[],[],[]],this.INV_SUB_MIX=[[],[],[],[]],this.init(),this.RCON=[0,1,2,4,8,16,32,64,128,27,54]}function o(t){for(var e=t.length/4,r=new Array(e),n=-1;++n<e;)r[n]=t.readUInt32BE(4*n);return r}function a(t){this._key=o(t),this._doReset()}var f=Math.pow(2,32);i.prototype.init=function(){var t,e,r,n,i,o,a,f,s,u;for(t=function(){var t,r;for(r=[],e=t=0;t<256;e=++t)e<128?r.push(e<<1):r.push(e<<1^283);return r}(),i=0,s=0,e=u=0;u<256;e=++u)r=s^s<<1^s<<2^s<<3^s<<4,r=r>>>8^255&r^99,this.SBOX[i]=r,this.INV_SBOX[r]=i,o=t[i],a=t[o],f=t[a],n=257*t[r]^16843008*r,this.SUB_MIX[0][i]=n<<24|n>>>8,this.SUB_MIX[1][i]=n<<16|n>>>16,this.SUB_MIX[2][i]=n<<8|n>>>24,this.SUB_MIX[3][i]=n,n=16843009*f^65537*a^257*o^16843008*i,this.INV_SUB_MIX[0][r]=n<<24|n>>>8,this.INV_SUB_MIX[1][r]=n<<16|n>>>16,this.INV_SUB_MIX[2][r]=n<<8|n>>>24,this.INV_SUB_MIX[3][r]=n,0===i?i=s=1:(i=o^t[t[t[f^o]]],s^=t[t[s]]);return!0};var s=new i;a.blockSize=16,a.prototype.blockSize=a.blockSize,a.keySize=32,a.prototype.keySize=a.keySize,a.prototype._doReset=function(){var t,e,r,n,i,o;for(r=this._key,e=r.length,this._nRounds=e+6,i=4*(this._nRounds+1),this._keySchedule=[],n=0;n<i;n++)this._keySchedule[n]=n<e?r[n]:(o=this._keySchedule[n-1],n%e===0?(o=o<<8|o>>>24,o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o],o^=s.RCON[n/e|0]<<24):e>6&&n%e===4?o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o]:void 0,this._keySchedule[n-e]^o);for(this._invKeySchedule=[],t=0;t<i;t++)n=i-t,o=this._keySchedule[n-(t%4?0:4)],this._invKeySchedule[t]=t<4||n<=4?o:s.INV_SUB_MIX[0][s.SBOX[o>>>24]]^s.INV_SUB_MIX[1][s.SBOX[o>>>16&255]]^s.INV_SUB_MIX[2][s.SBOX[o>>>8&255]]^s.INV_SUB_MIX[3][s.SBOX[255&o]];
|
||
return!0},a.prototype.encryptBlock=function(e){e=o(new t(e));var r=this._doCryptBlock(e,this._keySchedule,s.SUB_MIX,s.SBOX),n=new t(16);return n.writeUInt32BE(r[0],0),n.writeUInt32BE(r[1],4),n.writeUInt32BE(r[2],8),n.writeUInt32BE(r[3],12),n},a.prototype.decryptBlock=function(e){e=o(new t(e));var r=[e[3],e[1]];e[1]=r[0],e[3]=r[1];var n=this._doCryptBlock(e,this._invKeySchedule,s.INV_SUB_MIX,s.INV_SBOX),i=new t(16);return i.writeUInt32BE(n[0],0),i.writeUInt32BE(n[3],4),i.writeUInt32BE(n[2],8),i.writeUInt32BE(n[1],12),i},a.prototype.scrub=function(){n(this._keySchedule),n(this._invKeySchedule),n(this._key)},a.prototype._doCryptBlock=function(t,e,n,i){var o,a,f,s,u,h,c,d,l;a=t[0]^e[0],f=t[1]^e[1],s=t[2]^e[2],u=t[3]^e[3],o=4;for(var p=1;p<this._nRounds;p++)h=n[0][a>>>24]^n[1][f>>>16&255]^n[2][s>>>8&255]^n[3][255&u]^e[o++],c=n[0][f>>>24]^n[1][s>>>16&255]^n[2][u>>>8&255]^n[3][255&a]^e[o++],d=n[0][s>>>24]^n[1][u>>>16&255]^n[2][a>>>8&255]^n[3][255&f]^e[o++],l=n[0][u>>>24]^n[1][a>>>16&255]^n[2][f>>>8&255]^n[3][255&s]^e[o++],a=h,f=c,s=d,u=l;return h=(i[a>>>24]<<24|i[f>>>16&255]<<16|i[s>>>8&255]<<8|i[255&u])^e[o++],c=(i[f>>>24]<<24|i[s>>>16&255]<<16|i[u>>>8&255]<<8|i[255&a])^e[o++],d=(i[s>>>24]<<24|i[u>>>16&255]<<16|i[a>>>8&255]<<8|i[255&f])^e[o++],l=(i[u>>>24]<<24|i[a>>>16&255]<<16|i[f>>>8&255]<<8|i[255&s])^e[o++],[r(h),r(c),r(d),r(l)]},e.AES=a}).call(e,r(1).Buffer)},function(t,e){e["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},e["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},e["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},e["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},e["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},e["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},e.aes128=e["aes-128-cbc"],e.aes192=e["aes-192-cbc"],e.aes256=e["aes-256-cbc"],e["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},e["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},e["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},e["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},e["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},e["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},e["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},e["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},e["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},e["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},e["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},e["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},e["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},e["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},e["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},e["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},e["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},e["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},function(t,e,r){(function(t){function n(t){for(var e,r=t.length;r--;){if(e=t.readUInt8(r),255!==e){e++,t.writeUInt8(e,r);break}t.writeUInt8(0,r)}}function i(t){var e=t._cipher.encryptBlock(t._prev);return n(t._prev),e}var o=r(67);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,i(e)]);var n=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),o(r,n)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=r(31).Transform,o=r(2),a=r(52).StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(t,r,n){"string"==typeof t&&(t=new e(t,r));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},n.prototype._flush=function(t){var e;try{this.push(this._final())}catch(t){e=t}finally{t(e)}},n.prototype._finalOrDigest=function(t){var r=this._final()||new e("");return t&&(r=this._toString(r,t,!0)),r},n.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new a(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n}}).call(e,r(1).Buffer)},function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=r,r.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}},function(t,e,r){"use strict";var n=e;n.base=r(508),n.short=r(511),n.mont=r(510),n.edwards=r(509)},function(t,e,r){var n=e;n.bignum=r(18),n.define=r(530).define,n.base=r(68),n.constants=r(215),n.decoders=r(534),n.encoders=r(536)},function(t,e,r){(function(t){function r(t){var e,r;return e=t>f||t<0?(r=Math.abs(t)%f,t<0?f-r:r):t}function n(t){for(var e=0;e<t.length;t++)t[e]=0;return!1}function i(){this.SBOX=[],this.INV_SBOX=[],this.SUB_MIX=[[],[],[],[]],this.INV_SUB_MIX=[[],[],[],[]],this.init(),this.RCON=[0,1,2,4,8,16,32,64,128,27,54]}function o(t){for(var e=t.length/4,r=new Array(e),n=-1;++n<e;)r[n]=t.readUInt32BE(4*n);return r}function a(t){this._key=o(t),this._doReset()}var f=Math.pow(2,32);i.prototype.init=function(){var t,e,r,n,i,o,a,f,s,u;for(t=function(){var t,r;for(r=[],e=t=0;t<256;e=++t)e<128?r.push(e<<1):r.push(e<<1^283);return r}(),i=0,s=0,e=u=0;u<256;e=++u)r=s^s<<1^s<<2^s<<3^s<<4,r=r>>>8^255&r^99,this.SBOX[i]=r,this.INV_SBOX[r]=i,o=t[i],a=t[o],f=t[a],n=257*t[r]^16843008*r,this.SUB_MIX[0][i]=n<<24|n>>>8,this.SUB_MIX[1][i]=n<<16|n>>>16,this.SUB_MIX[2][i]=n<<8|n>>>24,this.SUB_MIX[3][i]=n,n=16843009*f^65537*a^257*o^16843008*i,this.INV_SUB_MIX[0][r]=n<<24|n>>>8,this.INV_SUB_MIX[1][r]=n<<16|n>>>16,this.INV_SUB_MIX[2][r]=n<<8|n>>>24,this.INV_SUB_MIX[3][r]=n,0===i?i=s=1:(i=o^t[t[t[f^o]]],s^=t[t[s]]);return!0};var s=new i;a.blockSize=16,a.prototype.blockSize=a.blockSize,a.keySize=32,a.prototype.keySize=a.keySize,a.prototype._doReset=function(){var t,e,r,n,i,o;for(r=this._key,e=r.length,this._nRounds=e+6,i=4*(this._nRounds+1),this._keySchedule=[],n=0;n<i;n++)this._keySchedule[n]=n<e?r[n]:(o=this._keySchedule[n-1],n%e===0?(o=o<<8|o>>>24,o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o],o^=s.RCON[n/e|0]<<24):e>6&&n%e===4?o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o]:void 0,this._keySchedule[n-e]^o);for(this._invKeySchedule=[],t=0;t<i;t++)n=i-t,o=this._keySchedule[n-(t%4?0:4)],this._invKeySchedule[t]=t<4||n<=4?o:s.INV_SUB_MIX[0][s.SBOX[o>>>24]]^s.INV_SUB_MIX[1][s.SBOX[o>>>16&255]]^s.INV_SUB_MIX[2][s.SBOX[o>>>8&255]]^s.INV_SUB_MIX[3][s.SBOX[255&o]];return!0},a.prototype.encryptBlock=function(e){e=o(new t(e));var r=this._doCryptBlock(e,this._keySchedule,s.SUB_MIX,s.SBOX),n=new t(16);return n.writeUInt32BE(r[0],0),n.writeUInt32BE(r[1],4),n.writeUInt32BE(r[2],8),n.writeUInt32BE(r[3],12),n},a.prototype.decryptBlock=function(e){e=o(new t(e));var r=[e[3],e[1]];e[1]=r[0],e[3]=r[1];var n=this._doCryptBlock(e,this._invKeySchedule,s.INV_SUB_MIX,s.INV_SBOX),i=new t(16);return i.writeUInt32BE(n[0],0),i.writeUInt32BE(n[3],4),i.writeUInt32BE(n[2],8),i.writeUInt32BE(n[1],12),i},a.prototype.scrub=function(){n(this._keySchedule),n(this._invKeySchedule),n(this._key)},a.prototype._doCryptBlock=function(t,e,n,i){var o,a,f,s,u,h,c,d,l;a=t[0]^e[0],f=t[1]^e[1],s=t[2]^e[2],u=t[3]^e[3],o=4;for(var p=1;p<this._nRounds;p++)h=n[0][a>>>24]^n[1][f>>>16&255]^n[2][s>>>8&255]^n[3][255&u]^e[o++],c=n[0][f>>>24]^n[1][s>>>16&255]^n[2][u>>>8&255]^n[3][255&a]^e[o++],d=n[0][s>>>24]^n[1][u>>>16&255]^n[2][a>>>8&255]^n[3][255&f]^e[o++],l=n[0][u>>>24]^n[1][a>>>16&255]^n[2][f>>>8&255]^n[3][255&s]^e[o++],a=h,f=c,s=d,u=l;return h=(i[a>>>24]<<24|i[f>>>16&255]<<16|i[s>>>8&255]<<8|i[255&u])^e[o++],c=(i[f>>>24]<<24|i[s>>>16&255]<<16|i[u>>>8&255]<<8|i[255&a])^e[o++],d=(i[s>>>24]<<24|i[u>>>16&255]<<16|i[a>>>8&255]<<8|i[255&f])^e[o++],l=(i[u>>>24]<<24|i[a>>>16&255]<<16|i[f>>>8&255]<<8|i[255&s])^e[o++],[r(h),r(c),r(d),r(l)]},e.AES=a}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(t){for(var e,r=t.length;r--;){if(e=t.readUInt8(r),255!==e){e++,t.writeUInt8(e,r);break}t.writeUInt8(0,r)}}function i(t){var e=t._cipher.encryptBlock(t._prev);return n(t._prev),e}var o=r(69);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,i(e)]);var n=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),o(r,n)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=r(31).Transform,o=r(2),a=r(52).StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(t,r,n){"string"==typeof t&&(t=new e(t,r));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},n.prototype._flush=function(t){var e;try{this.push(this._final())}catch(t){e=t}finally{t(e)}},n.prototype._finalOrDigest=function(t){var r=this._final()||new e("");return t&&(r=this._toString(r,t,!0)),r},n.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new a(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n}}).call(e,r(1).Buffer)},function(t,e,r){"use strict";var n=e;n.base=r(545),n.short=r(548),n.mont=r(547),n.edwards=r(546)},function(t,e,r){"use strict";function n(t,e){t[e>>5]|=128<<e%32,t[(e+64>>>9<<4)+14]=e;for(var r=1732584193,n=-271733879,i=-1732584194,h=271733878,c=0;c<t.length;c+=16){var d=r,l=n,p=i,b=h;r=o(r,n,i,h,t[c+0],7,-680876936),h=o(h,r,n,i,t[c+1],12,-389564586),i=o(i,h,r,n,t[c+2],17,606105819),n=o(n,i,h,r,t[c+3],22,-1044525330),r=o(r,n,i,h,t[c+4],7,-176418897),h=o(h,r,n,i,t[c+5],12,1200080426),i=o(i,h,r,n,t[c+6],17,-1473231341),n=o(n,i,h,r,t[c+7],22,-45705983),r=o(r,n,i,h,t[c+8],7,1770035416),h=o(h,r,n,i,t[c+9],12,-1958414417),i=o(i,h,r,n,t[c+10],17,-42063),n=o(n,i,h,r,t[c+11],22,-1990404162),r=o(r,n,i,h,t[c+12],7,1804603682),h=o(h,r,n,i,t[c+13],12,-40341101),i=o(i,h,r,n,t[c+14],17,-1502002290),n=o(n,i,h,r,t[c+15],22,1236535329),r=a(r,n,i,h,t[c+1],5,-165796510),h=a(h,r,n,i,t[c+6],9,-1069501632),i=a(i,h,r,n,t[c+11],14,643717713),n=a(n,i,h,r,t[c+0],20,-373897302),r=a(r,n,i,h,t[c+5],5,-701558691),h=a(h,r,n,i,t[c+10],9,38016083),i=a(i,h,r,n,t[c+15],14,-660478335),n=a(n,i,h,r,t[c+4],20,-405537848),r=a(r,n,i,h,t[c+9],5,568446438),h=a(h,r,n,i,t[c+14],9,-1019803690),i=a(i,h,r,n,t[c+3],14,-187363961),n=a(n,i,h,r,t[c+8],20,1163531501),r=a(r,n,i,h,t[c+13],5,-1444681467),h=a(h,r,n,i,t[c+2],9,-51403784),i=a(i,h,r,n,t[c+7],14,1735328473),n=a(n,i,h,r,t[c+12],20,-1926607734),r=f(r,n,i,h,t[c+5],4,-378558),h=f(h,r,n,i,t[c+8],11,-2022574463),i=f(i,h,r,n,t[c+11],16,1839030562),n=f(n,i,h,r,t[c+14],23,-35309556),r=f(r,n,i,h,t[c+1],4,-1530992060),h=f(h,r,n,i,t[c+4],11,1272893353),i=f(i,h,r,n,t[c+7],16,-155497632),n=f(n,i,h,r,t[c+10],23,-1094730640),r=f(r,n,i,h,t[c+13],4,681279174),h=f(h,r,n,i,t[c+0],11,-358537222),i=f(i,h,r,n,t[c+3],16,-722521979),n=f(n,i,h,r,t[c+6],23,76029189),r=f(r,n,i,h,t[c+9],4,-640364487),h=f(h,r,n,i,t[c+12],11,-421815835),i=f(i,h,r,n,t[c+15],16,530742520),n=f(n,i,h,r,t[c+2],23,-995338651),r=s(r,n,i,h,t[c+0],6,-198630844),h=s(h,r,n,i,t[c+7],10,1126891415),i=s(i,h,r,n,t[c+14],15,-1416354905),n=s(n,i,h,r,t[c+5],21,-57434055),r=s(r,n,i,h,t[c+12],6,1700485571),h=s(h,r,n,i,t[c+3],10,-1894986606),i=s(i,h,r,n,t[c+10],15,-1051523),n=s(n,i,h,r,t[c+1],21,-2054922799),r=s(r,n,i,h,t[c+8],6,1873313359),h=s(h,r,n,i,t[c+15],10,-30611744),i=s(i,h,r,n,t[c+6],15,-1560198380),n=s(n,i,h,r,t[c+13],21,1309151649),r=s(r,n,i,h,t[c+4],6,-145523070),h=s(h,r,n,i,t[c+11],10,-1120210379),i=s(i,h,r,n,t[c+2],15,718787259),n=s(n,i,h,r,t[c+9],21,-343485551),r=u(r,d),n=u(n,l),i=u(i,p),h=u(h,b)}return Array(r,n,i,h)}function i(t,e,r,n,i,o){return u(h(u(u(e,t),u(n,o)),i),r)}function o(t,e,r,n,o,a,f){return i(e&r|~e&n,t,e,o,a,f)}function a(t,e,r,n,o,a,f){return i(e&n|r&~n,t,e,o,a,f)}function f(t,e,r,n,o,a,f){return i(e^r^n,t,e,o,a,f)}function s(t,e,r,n,o,a,f){return i(r^(e|~n),t,e,o,a,f)}function u(t,e){var r=(65535&t)+(65535&e),n=(t>>16)+(e>>16)+(r>>16);return n<<16|65535&r}function h(t,e){return t<<e|t>>>32-e}var c=r(565);t.exports=function(t){return c.hash(t,n,16)}},function(t,e,r){var n=e;n.bignum=r(70),n.define=r(580).define,n.base=r(71),n.constants=r(235),n.decoders=r(584),n.encoders=r(586)},function(t,e,r){(function(t){function r(t){var e,r;return e=t>f||t<0?(r=Math.abs(t)%f,t<0?f-r:r):t}function n(t){for(var e=0;e<t.length;t++)t[e]=0;return!1}function i(){this.SBOX=[],this.INV_SBOX=[],this.SUB_MIX=[[],[],[],[]],this.INV_SUB_MIX=[[],[],[],[]],this.init(),this.RCON=[0,1,2,4,8,16,32,64,128,27,54]}function o(t){for(var e=t.length/4,r=new Array(e),n=-1;++n<e;)r[n]=t.readUInt32BE(4*n);return r}function a(t){this._key=o(t),this._doReset()}var f=Math.pow(2,32);i.prototype.init=function(){var t,e,r,n,i,o,a,f,s,u;for(t=function(){var t,r;for(r=[],e=t=0;t<256;e=++t)e<128?r.push(e<<1):r.push(e<<1^283);return r}(),i=0,s=0,e=u=0;u<256;e=++u)r=s^s<<1^s<<2^s<<3^s<<4,r=r>>>8^255&r^99,this.SBOX[i]=r,this.INV_SBOX[r]=i,o=t[i],a=t[o],f=t[a],n=257*t[r]^16843008*r,this.SUB_MIX[0][i]=n<<24|n>>>8,this.SUB_MIX[1][i]=n<<16|n>>>16,this.SUB_MIX[2][i]=n<<8|n>>>24,this.SUB_MIX[3][i]=n,n=16843009*f^65537*a^257*o^16843008*i,this.INV_SUB_MIX[0][r]=n<<24|n>>>8,this.INV_SUB_MIX[1][r]=n<<16|n>>>16,this.INV_SUB_MIX[2][r]=n<<8|n>>>24,this.INV_SUB_MIX[3][r]=n,0===i?i=s=1:(i=o^t[t[t[f^o]]],s^=t[t[s]]);return!0};var s=new i;a.blockSize=16,a.prototype.blockSize=a.blockSize,a.keySize=32,a.prototype.keySize=a.keySize,a.prototype._doReset=function(){var t,e,r,n,i,o;for(r=this._key,e=r.length,this._nRounds=e+6,i=4*(this._nRounds+1),this._keySchedule=[],n=0;n<i;n++)this._keySchedule[n]=n<e?r[n]:(o=this._keySchedule[n-1],n%e===0?(o=o<<8|o>>>24,o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o],o^=s.RCON[n/e|0]<<24):e>6&&n%e===4?o=s.SBOX[o>>>24]<<24|s.SBOX[o>>>16&255]<<16|s.SBOX[o>>>8&255]<<8|s.SBOX[255&o]:void 0,this._keySchedule[n-e]^o);for(this._invKeySchedule=[],t=0;t<i;t++)n=i-t,o=this._keySchedule[n-(t%4?0:4)],this._invKeySchedule[t]=t<4||n<=4?o:s.INV_SUB_MIX[0][s.SBOX[o>>>24]]^s.INV_SUB_MIX[1][s.SBOX[o>>>16&255]]^s.INV_SUB_MIX[2][s.SBOX[o>>>8&255]]^s.INV_SUB_MIX[3][s.SBOX[255&o]];return!0},a.prototype.encryptBlock=function(e){e=o(new t(e));var r=this._doCryptBlock(e,this._keySchedule,s.SUB_MIX,s.SBOX),n=new t(16);return n.writeUInt32BE(r[0],0),n.writeUInt32BE(r[1],4),n.writeUInt32BE(r[2],8),n.writeUInt32BE(r[3],12),n},a.prototype.decryptBlock=function(e){e=o(new t(e));var r=[e[3],e[1]];e[1]=r[0],e[3]=r[1];var n=this._doCryptBlock(e,this._invKeySchedule,s.INV_SUB_MIX,s.INV_SBOX),i=new t(16);return i.writeUInt32BE(n[0],0),i.writeUInt32BE(n[3],4),i.writeUInt32BE(n[2],8),i.writeUInt32BE(n[1],12),i},a.prototype.scrub=function(){n(this._keySchedule),n(this._invKeySchedule),n(this._key)},a.prototype._doCryptBlock=function(t,e,n,i){var o,a,f,s,u,h,c,d,l;a=t[0]^e[0],f=t[1]^e[1],s=t[2]^e[2],u=t[3]^e[3],o=4;for(var p=1;p<this._nRounds;p++)h=n[0][a>>>24]^n[1][f>>>16&255]^n[2][s>>>8&255]^n[3][255&u]^e[o++],c=n[0][f>>>24]^n[1][s>>>16&255]^n[2][u>>>8&255]^n[3][255&a]^e[o++],d=n[0][s>>>24]^n[1][u>>>16&255]^n[2][a>>>8&255]^n[3][255&f]^e[o++],l=n[0][u>>>24]^n[1][a>>>16&255]^n[2][f>>>8&255]^n[3][255&s]^e[o++],a=h,f=c,s=d,u=l;return h=(i[a>>>24]<<24|i[f>>>16&255]<<16|i[s>>>8&255]<<8|i[255&u])^e[o++],c=(i[f>>>24]<<24|i[s>>>16&255]<<16|i[u>>>8&255]<<8|i[255&a])^e[o++],d=(i[s>>>24]<<24|i[u>>>16&255]<<16|i[a>>>8&255]<<8|i[255&f])^e[o++],l=(i[u>>>24]<<24|i[a>>>16&255]<<16|i[f>>>8&255]<<8|i[255&s])^e[o++],[r(h),r(c),r(d),r(l)]},e.AES=a}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(t){for(var e,r=t.length;r--;){if(e=t.readUInt8(r),255!==e){e++,t.writeUInt8(e,r);break}t.writeUInt8(0,r)}}function i(t){var e=t._cipher.encryptBlock(t._prev);return n(t._prev),e}var o=r(72);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,i(e)]);var n=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),o(r,n)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=r(31).Transform,o=r(2),a=r(52).StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(t,r,n){"string"==typeof t&&(t=new e(t,r));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},n.prototype._flush=function(t){var e;try{this.push(this._final())}catch(t){e=t}finally{t(e)}},n.prototype._finalOrDigest=function(t){var r=this._final()||new e("");return t&&(r=this._toString(r,t,!0)),r},n.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new a(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n}}).call(e,r(1).Buffer)},function(t,e){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(t){return"function"==typeof t}function i(t){return"number"==typeof t}function o(t){return"object"==typeof t&&null!==t}function a(t){return void 0===t}t.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(t){if(!i(t)||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},r.prototype.emit=function(t){var e,r,i,f,s,u;if(this._events||(this._events={}),"error"===t&&(!this._events.error||o(this._events.error)&&!this._events.error.length)){if(e=arguments[1],e instanceof Error)throw e;var h=new Error('Uncaught, unspecified "error" event. ('+e+")");throw h.context=e,h}if(r=this._events[t],a(r))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:f=Array.prototype.slice.call(arguments,1),r.apply(this,f)}else if(o(r))for(f=Array.prototype.slice.call(arguments,1),u=r.slice(),i=u.length,s=0;s<i;s++)u[s].apply(this,f);return!0},r.prototype.addListener=function(t,e){var i;if(!n(e))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",t,n(e.listener)?e.listener:e),this._events[t]?o(this._events[t])?this._events[t].push(e):this._events[t]=[this._events[t],e]:this._events[t]=e,o(this._events[t])&&!this._events[t].warned&&(i=a(this._maxListeners)?r.defaultMaxListeners:this._maxListeners,i&&i>0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace())),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(t,e){function r(){this.removeListener(t,r),i||(i=!0,e.apply(this,arguments))}if(!n(e))throw TypeError("listener must be a function");var i=!1;return r.listener=e,this.on(t,r),this},r.prototype.removeListener=function(t,e){var r,i,a,f;if(!n(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(r=this._events[t],a=r.length,i=-1,r===e||n(r.listener)&&r.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(r)){for(f=a;f-- >0;)if(r[f]===e||r[f].listener&&r[f].listener===e){i=f;break}if(i<0)return this;1===r.length?(r.length=0,delete this._events[t]):r.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},r.prototype.removeAllListeners=function(t){var e,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[t],n(r))this.removeListener(t,r);else if(r)for(;r.length;)this.removeListener(t,r[r.length-1]);return delete this._events[t],this},r.prototype.listeners=function(t){var e;return e=this._events&&this._events[t]?n(this._events[t])?[this._events[t]]:this._events[t].slice():[]},r.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(n(e))return 1;if(e)return e.length}return 0},r.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e){t.exports={newInvalidAsn1Error:function(t){var e=new Error;return e.name="InvalidAsn1Error",e.message=t||"",e}}},function(t,e){t.exports={EOC:0,Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,ObjectDescriptor:7,External:8,Real:9,Enumeration:10,PDV:11,Utf8String:12,RelativeOID:13,Sequence:16,Set:17,NumericString:18,PrintableString:19,T61String:20,VideotexString:21,IA5String:22,UTCTime:23,GeneralizedTime:24,GraphicString:25,VisibleString:26,GeneralString:28,UniversalString:29,CharacterString:30,BMPString:31,Constructor:32,Context:128}},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(62),f=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=r(93),s=r(91),u=function(t){function e(t){n(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return r.hash=f.createHash(t),r}return o(e,t),a(e,[{key:"write",value:function(t){this.hash.update(t)}},{key:"getDigest",value:function(){return this.hash.digest()}}],[{key:"getLength",value:function(t){return f.createHash(t).digest().length}}]),e}(s);t.exports=u},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(261),a=function(){function t(){n(this,t)}return i(t,null,[{key:"getClassFromTypeId",value:function(e){if(e>Number.MAX_SAFE_INTEGER)throw new o("Type "+e+" is not supported");var r=!0,n=!1,i=void 0;try{for(var a,f=t.registeredTypes[Symbol.iterator]();!(r=(a=f.next()).done);r=!0){var s=a.value;if(e===s.typeId)return s.Class}}catch(t){n=!0,i=t}finally{try{!r&&f.return&&f.return()}finally{if(n)throw i}}throw new o("Type "+e+" is not supported")}},{key:"registerType",value:function(e){t.registeredTypes.push({typeId:e.TYPE_ID,Class:e})}}]),t}();a.registeredTypes=[],t.exports=a},function(t,e,r){"use strict";(function(e){function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var n=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),i=function(){function t(){r(this,t)}return n(t,null,[{key:"decode",value:function(t){var r=t.replace(/\-/g,"+").replace(/_/g,"/");return new e(r,"base64")}},{key:"encode",value:function(t){return t.toString("base64").replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}}]),t}();t.exports=i}).call(e,r(1).Buffer)},function(t,e,r){t.exports=!r(164)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){"use strict";var n=r(11),i=r(47),o=r(10);t.exports=function(t){for(var e=n(this),r=o(e.length),a=arguments.length,f=i(a>1?arguments[1]:void 0,r),s=a>2?arguments[2]:void 0,u=void 0===s?r:i(s,r);u>f;)e[f++]=t;return e}},function(t,e,r){"use strict";var n=r(9),i=r(37);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},function(t,e,r){var n=r(6),i=r(4).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,r){var n=r(7)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},function(t,e,r){t.exports=r(4).document&&document.documentElement},function(t,e,r){var n=r(6),i=r(132).set;t.exports=function(t,e,r){var o,a=e.constructor;return a!==r&&"function"==typeof a&&(o=a.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},function(t,e,r){var n=r(56),i=r(7)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},function(t,e,r){var n=r(23);t.exports=Array.isArray||function(t){return"Array"==n(t)}},function(t,e,r){"use strict";var n=r(42),i=r(37),o=r(57),a={};r(14)(a,r(7)("iterator"),function(){return this}),t.exports=function(t,e,r){t.prototype=n(a,{next:i(1,r)}),o(t,e+" Iterator")}},function(t,e,r){"use strict";var n=r(41),i=r(0),o=r(15),a=r(14),f=r(12),s=r(56),u=r(127),h=r(57),c=r(21),d=r(7)("iterator"),l=!([].keys&&"next"in[].keys()),p="@@iterator",b="keys",v="values",y=function(){return this};t.exports=function(t,e,r,m,g,w,_){u(r,e,m);var M,S,E,A=function(t){if(!l&&t in B)return B[t];switch(t){case b:return function(){return new r(this,t)};case v:return function(){return new r(this,t)}}return function(){return new r(this,t)}},k=e+" Iterator",x=g==v,I=!1,B=t.prototype,O=B[d]||B[p]||g&&B[g],R=O||A(g),P=g?x?A("entries"):R:void 0,T="Array"==e?B.entries||O:O;if(T&&(E=c(T.call(new t)),E!==Object.prototype&&(h(E,k,!0),n||f(E,d)||a(E,d,y))),x&&O&&O.name!==v&&(I=!0,R=function(){return O.call(this)}),n&&!_||!l&&!I&&B[d]||a(B,d,R),s[e]=R,s[k]=y,g)if(M={values:x?R:A(v),keys:w?R:A(b),entries:P},_)for(S in M)S in B||o(B,S,M[S]);else i(i.P+i.F*(l||I),e,M);return M}},function(t,e){var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||r(-2e-17)!=-2e-17?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:r},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,r){var n=r(4),i=r(139).set,o=n.MutationObserver||n.WebKitMutationObserver,a=n.process,f=n.Promise,s="process"==r(23)(a);t.exports=function(){var t,e,r,u=function(){var n,i;for(s&&(n=a.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(s)r=function(){a.nextTick(u)};else if(o){var h=!0,c=document.createTextNode("");new o(u).observe(c,{characterData:!0}),r=function(){c.data=h=!h}}else if(f&&f.resolve){var d=f.resolve();r=function(){d.then(u)}}else r=function(){i.call(n,u)};return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},function(t,e,r){var n=r(6),i=r(3),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{n=r(33)(Function.call,r(20).f(Object.prototype,"__proto__").set,2),n(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,r){return o(t,r),e?t.__proto__=r:n(t,r),t}}({},!1):void 0),check:o}},function(t,e,r){var n=r(87)("keys"),i=r(48);t.exports=function(t){return n[t]||(n[t]=i(t))}},function(t,e,r){var n=r(3),i=r(13),o=r(7)("species");t.exports=function(t,e){var r,a=n(t).constructor;return void 0===a||void 0==(r=n(a)[o])?e:i(r)}},function(t,e,r){var n=r(38),i=r(24);t.exports=function(t){return function(e,r){var o,a,f=String(i(e)),s=n(r),u=f.length;return s<0||s>=u?t?"":void 0:(o=f.charCodeAt(s),o<55296||o>56319||s+1===u||(a=f.charCodeAt(s+1))<56320||a>57343?t?f.charAt(s):o:t?f.slice(s,s+2):(o-55296<<10)+(a-56320)+65536)}}},function(t,e,r){var n=r(83),i=r(24);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},function(t,e,r){"use strict";var n=r(38),i=r(24);t.exports=function(t){var e=String(i(this)),r="",o=n(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(r+=e);return r}},function(t,e){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(t,e,r){var n,i,o,a=r(33),f=r(82),s=r(123),u=r(120),h=r(4),c=h.process,d=h.setImmediate,l=h.clearImmediate,p=h.MessageChannel,b=0,v={},y="onreadystatechange",m=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},g=function(t){m.call(t.data)};d&&l||(d=function(t){for(var e=[],r=1;arguments.length>r;)e.push(arguments[r++]);return v[++b]=function(){f("function"==typeof t?t:Function(t),e)},n(b),b},l=function(t){delete v[t]},"process"==r(23)(c)?n=function(t){c.nextTick(a(m,t,1))}:p?(i=new p,o=i.port2,i.port1.onmessage=g,n=a(o.postMessage,o,1)):h.addEventListener&&"function"==typeof postMessage&&!h.importScripts?(n=function(t){h.postMessage(t+"","*")},h.addEventListener("message",g,!1)):n=y in u("script")?function(t){s.appendChild(u("script"))[y]=function(){s.removeChild(this),m.call(t)}}:function(t){setTimeout(a(m,t,1),0)}),t.exports={set:d,clear:l}},function(t,e,r){"use strict";var n=r(4),i=r(8),o=r(41),a=r(88),f=r(14),s=r(45),u=r(5),h=r(40),c=r(38),d=r(10),l=r(43).f,p=r(9).f,b=r(118),v=r(57),y="ArrayBuffer",m="DataView",g="prototype",w="Wrong length!",_="Wrong index!",M=n[y],S=n[m],E=n.Math,A=n.RangeError,k=n.Infinity,x=M,I=E.abs,B=E.pow,O=E.floor,R=E.log,P=E.LN2,T="buffer",j="byteLength",C="byteOffset",N=i?"_b":T,L=i?"_l":j,U=i?"_o":C,z=function(t,e,r){
|
||
var n,i,o,a=Array(r),f=8*r-e-1,s=(1<<f)-1,u=s>>1,h=23===e?B(2,-24)-B(2,-77):0,c=0,d=t<0||0===t&&1/t<0?1:0;for(t=I(t),t!=t||t===k?(i=t!=t?1:0,n=s):(n=O(R(t)/P),t*(o=B(2,-n))<1&&(n--,o*=2),t+=n+u>=1?h/o:h*B(2,1-u),t*o>=2&&(n++,o/=2),n+u>=s?(i=0,n=s):n+u>=1?(i=(t*o-1)*B(2,e),n+=u):(i=t*B(2,u-1)*B(2,e),n=0));e>=8;a[c++]=255&i,i/=256,e-=8);for(n=n<<e|i,f+=e;f>0;a[c++]=255&n,n/=256,f-=8);return a[--c]|=128*d,a},D=function(t,e,r){var n,i=8*r-e-1,o=(1<<i)-1,a=o>>1,f=i-7,s=r-1,u=t[s--],h=127&u;for(u>>=7;f>0;h=256*h+t[s],s--,f-=8);for(n=h&(1<<-f)-1,h>>=-f,f+=e;f>0;n=256*n+t[s],s--,f-=8);if(0===h)h=1-a;else{if(h===o)return n?NaN:u?-k:k;n+=B(2,e),h-=a}return(u?-1:1)*n*B(2,h-e)},q=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},F=function(t){return[255&t]},K=function(t){return[255&t,t>>8&255]},G=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},V=function(t){return z(t,52,8)},H=function(t){return z(t,23,4)},X=function(t,e,r){p(t[g],e,{get:function(){return this[r]}})},Y=function(t,e,r,n){var i=+r,o=c(i);if(i!=o||o<0||o+e>t[L])throw A(_);var a=t[N]._b,f=o+t[U],s=a.slice(f,f+e);return n?s:s.reverse()},W=function(t,e,r,n,i,o){var a=+r,f=c(a);if(a!=f||f<0||f+e>t[L])throw A(_);for(var s=t[N]._b,u=f+t[U],h=n(+i),d=0;d<e;d++)s[u+d]=h[o?d:e-d-1]},Z=function(t,e){h(t,M,y);var r=+e,n=d(r);if(r!=n)throw A(w);return n};if(a.ABV){if(!u(function(){new M})||!u(function(){new M(.5)})){M=function(t){return new x(Z(this,t))};for(var J,$=M[g]=x[g],Q=l(x),tt=0;Q.length>tt;)(J=Q[tt++])in M||f(M,J,x[J]);o||($.constructor=M)}var et=new S(new M(2)),rt=S[g].setInt8;et.setInt8(0,2147483648),et.setInt8(1,2147483649),!et.getInt8(0)&&et.getInt8(1)||s(S[g],{setInt8:function(t,e){rt.call(this,t,e<<24>>24)},setUint8:function(t,e){rt.call(this,t,e<<24>>24)}},!0)}else M=function(t){var e=Z(this,t);this._b=b.call(Array(e),0),this[L]=e},S=function(t,e,r){h(this,S,m),h(t,M,m);var n=t[L],i=c(e);if(i<0||i>n)throw A("Wrong offset!");if(r=void 0===r?n-i:d(r),i+r>n)throw A(w);this[N]=t,this[U]=i,this[L]=r},i&&(X(M,j,"_l"),X(S,T,"_b"),X(S,j,"_l"),X(S,C,"_o")),s(S[g],{getInt8:function(t){return Y(this,1,t)[0]<<24>>24},getUint8:function(t){return Y(this,1,t)[0]},getInt16:function(t){var e=Y(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=Y(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return q(Y(this,4,t,arguments[1]))},getUint32:function(t){return q(Y(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return D(Y(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return D(Y(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){W(this,1,t,F,e)},setUint8:function(t,e){W(this,1,t,F,e)},setInt16:function(t,e){W(this,2,t,K,e,arguments[2])},setUint16:function(t,e){W(this,2,t,K,e,arguments[2])},setInt32:function(t,e){W(this,4,t,G,e,arguments[2])},setUint32:function(t,e){W(this,4,t,G,e,arguments[2])},setFloat32:function(t,e){W(this,4,t,H,e,arguments[2])},setFloat64:function(t,e){W(this,8,t,V,e,arguments[2])}});v(M,y),v(S,m),f(S[g],a.VIEW,!0),e[y]=M,e[m]=S},function(t,e,r){var n=r(4),i=r(32),o=r(41),a=r(189),f=r(9).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||f(e,t,{value:a.f(t)})}},function(t,e,r){var n=r(64),i=r(7)("iterator"),o=r(56);t.exports=r(32).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[n(t)]}},function(t,e,r){"use strict";var n=r(54),i=r(177),o=r(56),a=r(17);t.exports=r(128)(Array,"Array",function(t,e){this._t=a(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):"keys"==e?i(0,r):"values"==e?i(0,t[r]):i(0,[r,t[r]])},"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},function(t,e,r){t.exports=!r(199)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){"use strict";e.utils=r(505),e.Cipher=r(502),e.DES=r(503),e.CBC=r(501),e.EDE=r(504)},function(t,e,r){(function(e){function n(t,r,n,o){e.isBuffer(t)||(t=new e(t,"binary")),r&&!e.isBuffer(r)&&(r=new e(r,"binary")),n/=8,o=o||0;for(var a,f,s=0,u=0,h=new e(n),c=new e(o),d=0,l=[];;){if(d++>0&&l.push(a),l.push(t),r&&l.push(r),a=i(e.concat(l)),l=[],f=0,n>0)for(;;){if(0===n)break;if(f===a.length)break;h[s++]=a[f],n--,f++}if(o>0&&f!==a.length)for(;;){if(0===o)break;if(f===a.length)break;c[u++]=a[f],o--,f++}if(0===n&&0===o)break}for(f=0;f<a.length;f++)a[f]=0;return{key:h,iv:c}}var i=r(105);t.exports=n}).call(e,r(1).Buffer)},function(t,e){e["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},e["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},e["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},e["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},e["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},e["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},e.aes128=e["aes-128-cbc"],e.aes192=e["aes-192-cbc"],e.aes256=e["aes-256-cbc"],e["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},e["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},e["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},e["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},e["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},e["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},e["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},e["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},e["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},e["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},e["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},e["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},e["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},e["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},e["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},e["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},e["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},e["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},function(t,e,r){(function(e){function n(t,r,n,o){e.isBuffer(t)||(t=new e(t,"binary")),r&&!e.isBuffer(r)&&(r=new e(r,"binary")),n/=8,o=o||0;for(var a,f,s=0,u=0,h=new e(n),c=new e(o),d=0,l=[];;){if(d++>0&&l.push(a),l.push(t),r&&l.push(r),a=i(e.concat(l)),l=[],f=0,n>0)for(;;){if(0===n)break;if(f===a.length)break;h[s++]=a[f],n--,f++}if(o>0&&f!==a.length)for(;;){if(0===o)break;if(f===a.length)break;c[u++]=a[f],o--,f++}if(0===n&&0===o)break}for(f=0;f<a.length;f++)a[f]=0;return{key:h,iv:c}}var i=r(105);t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,r){a.call(this),t=t.toLowerCase(),"string"==typeof r&&(r=new e(r));var n="sha512"===t||"sha384"===t?128:64;this._alg=t,this._key=r,r.length>n?r=i(t).update(r).digest():r.length<n&&(r=e.concat([r,f],n));for(var o=this._ipad=new e(n),s=this._opad=new e(n),u=0;u<n;u++)o[u]=54^r[u],s[u]=92^r[u];this._hash=i(t).update(o)}var i=r(59),o=r(2),a=r(31).Transform,f=new e(128);f.fill(0),o(n,a),n.prototype.update=function(t,e){return this._hash.update(t,e),this},n.prototype._transform=function(t,e,r){this._hash.update(t),r()},n.prototype._flush=function(t){this.push(this.digest()),t()},n.prototype.digest=function(t){var e=this._hash.digest();return i(this._alg).update(this._opad).update(e).digest(t)},t.exports=function(t,e){return new n(t,e)}}).call(e,r(1).Buffer)},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<i;o++){var a=t.charCodeAt(o)-48;n<<=4,n|=a>=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<o;a++){var f=t.charCodeAt(a)-48;i*=n,i+=f>=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<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>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<n;u++){for(var h=s>>>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<r.length-1;o++){var a=i;i=0;for(var f=67108863&n,s=Math.min(o,e.length-1),u=Math.max(0,o-t.length+1);u<=s;u++){var h=o-u,c=0|t.words[h],d=0|e.words[u],l=c*d,p=67108863&l;a=a+(l/67108864|0)|0,p=p+f|0,f=67108863&p,a=a+(p>>>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<this.length;i++)this.words[i]=0;var o,a,f=0;if("be"===r)for(i=t.length-1,o=0;i>=0;i-=3)a=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>26-f&67108863,f+=24,f>=26&&(f-=26,o++);else if("le"===r)for(i=0,o=0;i<t.length;i+=3)a=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[o]|=a<<f&67108863,this.words[o+1]=a>>>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<this.length;r++)this.words[r]=0;var n,i,o=0;for(r=t.length-6,n=0;r>=e;r-=6)i=a(t,r,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==e&&(i=a(t,e,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=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;h<s;h+=n)u=f(t,h,h+n,e),this.imuln(i),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==a){var c=1;for(u=f(t,h,t.length,e),h=0;h<a;h++)c*=e;this.imuln(c),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},o.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},o.prototype.clone=function(){var t=new o(null);return this.copy(t),t},o.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&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?"<BN-R: ":"<BN: ")+this.toString(16)+">"};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<this.length;a++){var f=this.words[a],s=(16777215&(f<<i|o)).toString(16);o=f>>>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<o;f++)u[f]=0}else{for(f=0;f<o-i;f++)u[f]=0;for(f=0;!h.isZero();f++)a=h.andln(255),h.iushrn(8),u[o-f-1]=a}return u},Math.clz32?o.prototype._countBits=function(t){return 32-Math.clz32(t)}:o.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},o.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0===(8191&e)&&(r+=13,e>>>=13),0===(127&e)&&(r+=7,e>>>=7),0===(15&e)&&(r+=4,e>>>=4),0===(3&e)&&(r+=2,e>>>=2),0===(1&e)&&r++,r},o.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},o.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},o.prototype.ior=function(t){return n(0===(this.negative|t.negative)),this.iuor(t)},o.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},o.prototype.iand=function(t){return n(0===(this.negative|t.negative)),this.iuand(t)},o.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},o.prototype.ixor=function(t){return n(0===(this.negative|t.negative)),this.iuxor(t)},o.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),e?this.words[r]=this.words[r]|1<<i:this.words[r]=this.words[r]&~(1<<i),this.strip()},o.prototype.iadd=function(t){var e;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();var r,n;this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o<n.length;o++)e=(0|r.words[o])+(0|n.words[o])+i,this.words[o]=67108863&e,i=e>>>26;for(;0!==i&&o<r.length;o++)e=(0|r.words[o])+i,this.words[o]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},o.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=t):(n=t,i=this);for(var o=0,a=0;a<i.length;a++)e=(0|n.words[a])-(0|i.words[a])+o,o=e>>26,this.words[a]=67108863&e;for(;0!==o&&a<n.length;a++)e=(0|n.words[a])+o,o=e>>26,this.words[a]=67108863&e;if(0===o&&a<n.length&&n!==this)for(;a<n.length;a++)this.words[a]=n.words[a];return this.length=Math.max(this.length,a),n!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(t){return this.clone().isub(t)};var E=function(t,e,r){var n,i,o,a=t.words,f=e.words,s=r.words,u=0,h=0|a[0],c=8191&h,d=h>>>13,l=0|a[1],p=8191&l,b=l>>>13,v=0|a[2],y=8191&v,m=v>>>13,g=0|a[3],w=8191&g,_=g>>>13,M=0|a[4],S=8191&M,E=M>>>13,A=0|a[5],k=8191&A,x=A>>>13,I=0|a[6],B=8191&I,O=I>>>13,R=0|a[7],P=8191&R,T=R>>>13,j=0|a[8],C=8191&j,N=j>>>13,L=0|a[9],U=8191&L,z=L>>>13,D=0|f[0],q=8191&D,F=D>>>13,K=0|f[1],G=8191&K,V=K>>>13,H=0|f[2],X=8191&H,Y=H>>>13,W=0|f[3],Z=8191&W,J=W>>>13,$=0|f[4],Q=8191&$,tt=$>>>13,et=0|f[5],rt=8191&et,nt=et>>>13,it=0|f[6],ot=8191&it,at=it>>>13,ft=0|f[7],st=8191&ft,ut=ft>>>13,ht=0|f[8],ct=8191&ht,dt=ht>>>13,lt=0|f[9],pt=8191<,bt=lt>>>13;r.negative=t.negative^e.negative,r.length=19,n=Math.imul(c,q),i=Math.imul(c,F),i=i+Math.imul(d,q)|0,o=Math.imul(d,F);var vt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(p,q),i=Math.imul(p,F),i=i+Math.imul(b,q)|0,o=Math.imul(b,F),n=n+Math.imul(c,G)|0,i=i+Math.imul(c,V)|0,i=i+Math.imul(d,G)|0,o=o+Math.imul(d,V)|0;var yt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(y,q),i=Math.imul(y,F),i=i+Math.imul(m,q)|0,o=Math.imul(m,F),n=n+Math.imul(p,G)|0,i=i+Math.imul(p,V)|0,i=i+Math.imul(b,G)|0,o=o+Math.imul(b,V)|0,n=n+Math.imul(c,X)|0,i=i+Math.imul(c,Y)|0,i=i+Math.imul(d,X)|0,o=o+Math.imul(d,Y)|0;var mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(w,q),i=Math.imul(w,F),i=i+Math.imul(_,q)|0,o=Math.imul(_,F),n=n+Math.imul(y,G)|0,i=i+Math.imul(y,V)|0,i=i+Math.imul(m,G)|0,o=o+Math.imul(m,V)|0,n=n+Math.imul(p,X)|0,i=i+Math.imul(p,Y)|0,i=i+Math.imul(b,X)|0,o=o+Math.imul(b,Y)|0,n=n+Math.imul(c,Z)|0,i=i+Math.imul(c,J)|0,i=i+Math.imul(d,Z)|0,o=o+Math.imul(d,J)|0;var gt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(S,q),i=Math.imul(S,F),i=i+Math.imul(E,q)|0,o=Math.imul(E,F),n=n+Math.imul(w,G)|0,i=i+Math.imul(w,V)|0,i=i+Math.imul(_,G)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(y,X)|0,i=i+Math.imul(y,Y)|0,i=i+Math.imul(m,X)|0,o=o+Math.imul(m,Y)|0,n=n+Math.imul(p,Z)|0,i=i+Math.imul(p,J)|0,i=i+Math.imul(b,Z)|0,o=o+Math.imul(b,J)|0,n=n+Math.imul(c,Q)|0,i=i+Math.imul(c,tt)|0,i=i+Math.imul(d,Q)|0,o=o+Math.imul(d,tt)|0;var wt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(k,q),i=Math.imul(k,F),i=i+Math.imul(x,q)|0,o=Math.imul(x,F),n=n+Math.imul(S,G)|0,i=i+Math.imul(S,V)|0,i=i+Math.imul(E,G)|0,o=o+Math.imul(E,V)|0,n=n+Math.imul(w,X)|0,i=i+Math.imul(w,Y)|0,i=i+Math.imul(_,X)|0,o=o+Math.imul(_,Y)|0,n=n+Math.imul(y,Z)|0,i=i+Math.imul(y,J)|0,i=i+Math.imul(m,Z)|0,o=o+Math.imul(m,J)|0,n=n+Math.imul(p,Q)|0,i=i+Math.imul(p,tt)|0,i=i+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,n=n+Math.imul(c,rt)|0,i=i+Math.imul(c,nt)|0,i=i+Math.imul(d,rt)|0,o=o+Math.imul(d,nt)|0;var _t=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(B,q),i=Math.imul(B,F),i=i+Math.imul(O,q)|0,o=Math.imul(O,F),n=n+Math.imul(k,G)|0,i=i+Math.imul(k,V)|0,i=i+Math.imul(x,G)|0,o=o+Math.imul(x,V)|0,n=n+Math.imul(S,X)|0,i=i+Math.imul(S,Y)|0,i=i+Math.imul(E,X)|0,o=o+Math.imul(E,Y)|0,n=n+Math.imul(w,Z)|0,i=i+Math.imul(w,J)|0,i=i+Math.imul(_,Z)|0,o=o+Math.imul(_,J)|0,n=n+Math.imul(y,Q)|0,i=i+Math.imul(y,tt)|0,i=i+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0,n=n+Math.imul(p,rt)|0,i=i+Math.imul(p,nt)|0,i=i+Math.imul(b,rt)|0,o=o+Math.imul(b,nt)|0,n=n+Math.imul(c,ot)|0,i=i+Math.imul(c,at)|0,i=i+Math.imul(d,ot)|0,o=o+Math.imul(d,at)|0;var Mt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(P,q),i=Math.imul(P,F),i=i+Math.imul(T,q)|0,o=Math.imul(T,F),n=n+Math.imul(B,G)|0,i=i+Math.imul(B,V)|0,i=i+Math.imul(O,G)|0,o=o+Math.imul(O,V)|0,n=n+Math.imul(k,X)|0,i=i+Math.imul(k,Y)|0,i=i+Math.imul(x,X)|0,o=o+Math.imul(x,Y)|0,n=n+Math.imul(S,Z)|0,i=i+Math.imul(S,J)|0,i=i+Math.imul(E,Z)|0,o=o+Math.imul(E,J)|0,n=n+Math.imul(w,Q)|0,i=i+Math.imul(w,tt)|0,i=i+Math.imul(_,Q)|0,o=o+Math.imul(_,tt)|0,n=n+Math.imul(y,rt)|0,i=i+Math.imul(y,nt)|0,i=i+Math.imul(m,rt)|0,o=o+Math.imul(m,nt)|0,n=n+Math.imul(p,ot)|0,i=i+Math.imul(p,at)|0,i=i+Math.imul(b,ot)|0,o=o+Math.imul(b,at)|0,n=n+Math.imul(c,st)|0,i=i+Math.imul(c,ut)|0,i=i+Math.imul(d,st)|0,o=o+Math.imul(d,ut)|0;var St=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(C,q),i=Math.imul(C,F),i=i+Math.imul(N,q)|0,o=Math.imul(N,F),n=n+Math.imul(P,G)|0,i=i+Math.imul(P,V)|0,i=i+Math.imul(T,G)|0,o=o+Math.imul(T,V)|0,n=n+Math.imul(B,X)|0,i=i+Math.imul(B,Y)|0,i=i+Math.imul(O,X)|0,o=o+Math.imul(O,Y)|0,n=n+Math.imul(k,Z)|0,i=i+Math.imul(k,J)|0,i=i+Math.imul(x,Z)|0,o=o+Math.imul(x,J)|0,n=n+Math.imul(S,Q)|0,i=i+Math.imul(S,tt)|0,i=i+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,n=n+Math.imul(w,rt)|0,i=i+Math.imul(w,nt)|0,i=i+Math.imul(_,rt)|0,o=o+Math.imul(_,nt)|0,n=n+Math.imul(y,ot)|0,i=i+Math.imul(y,at)|0,i=i+Math.imul(m,ot)|0,o=o+Math.imul(m,at)|0,n=n+Math.imul(p,st)|0,i=i+Math.imul(p,ut)|0,i=i+Math.imul(b,st)|0,o=o+Math.imul(b,ut)|0,n=n+Math.imul(c,ct)|0,i=i+Math.imul(c,dt)|0,i=i+Math.imul(d,ct)|0,o=o+Math.imul(d,dt)|0;var Et=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(U,q),i=Math.imul(U,F),i=i+Math.imul(z,q)|0,o=Math.imul(z,F),n=n+Math.imul(C,G)|0,i=i+Math.imul(C,V)|0,i=i+Math.imul(N,G)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(P,X)|0,i=i+Math.imul(P,Y)|0,i=i+Math.imul(T,X)|0,o=o+Math.imul(T,Y)|0,n=n+Math.imul(B,Z)|0,i=i+Math.imul(B,J)|0,i=i+Math.imul(O,Z)|0,o=o+Math.imul(O,J)|0,n=n+Math.imul(k,Q)|0,i=i+Math.imul(k,tt)|0,i=i+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,n=n+Math.imul(S,rt)|0,i=i+Math.imul(S,nt)|0,i=i+Math.imul(E,rt)|0,o=o+Math.imul(E,nt)|0,n=n+Math.imul(w,ot)|0,i=i+Math.imul(w,at)|0,i=i+Math.imul(_,ot)|0,o=o+Math.imul(_,at)|0,n=n+Math.imul(y,st)|0,i=i+Math.imul(y,ut)|0,i=i+Math.imul(m,st)|0,o=o+Math.imul(m,ut)|0,n=n+Math.imul(p,ct)|0,i=i+Math.imul(p,dt)|0,i=i+Math.imul(b,ct)|0,o=o+Math.imul(b,dt)|0,n=n+Math.imul(c,pt)|0,i=i+Math.imul(c,bt)|0,i=i+Math.imul(d,pt)|0,o=o+Math.imul(d,bt)|0;var At=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(U,G),i=Math.imul(U,V),i=i+Math.imul(z,G)|0,o=Math.imul(z,V),n=n+Math.imul(C,X)|0,i=i+Math.imul(C,Y)|0,i=i+Math.imul(N,X)|0,o=o+Math.imul(N,Y)|0,n=n+Math.imul(P,Z)|0,i=i+Math.imul(P,J)|0,i=i+Math.imul(T,Z)|0,o=o+Math.imul(T,J)|0,n=n+Math.imul(B,Q)|0,i=i+Math.imul(B,tt)|0,i=i+Math.imul(O,Q)|0,o=o+Math.imul(O,tt)|0,n=n+Math.imul(k,rt)|0,i=i+Math.imul(k,nt)|0,i=i+Math.imul(x,rt)|0,o=o+Math.imul(x,nt)|0,n=n+Math.imul(S,ot)|0,i=i+Math.imul(S,at)|0,i=i+Math.imul(E,ot)|0,o=o+Math.imul(E,at)|0,n=n+Math.imul(w,st)|0,i=i+Math.imul(w,ut)|0,i=i+Math.imul(_,st)|0,o=o+Math.imul(_,ut)|0,n=n+Math.imul(y,ct)|0,i=i+Math.imul(y,dt)|0,i=i+Math.imul(m,ct)|0,o=o+Math.imul(m,dt)|0,n=n+Math.imul(p,pt)|0,i=i+Math.imul(p,bt)|0,i=i+Math.imul(b,pt)|0,o=o+Math.imul(b,bt)|0;var kt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(U,X),i=Math.imul(U,Y),i=i+Math.imul(z,X)|0,o=Math.imul(z,Y),n=n+Math.imul(C,Z)|0,i=i+Math.imul(C,J)|0,i=i+Math.imul(N,Z)|0,o=o+Math.imul(N,J)|0,n=n+Math.imul(P,Q)|0,i=i+Math.imul(P,tt)|0,i=i+Math.imul(T,Q)|0,o=o+Math.imul(T,tt)|0,n=n+Math.imul(B,rt)|0,i=i+Math.imul(B,nt)|0,i=i+Math.imul(O,rt)|0,o=o+Math.imul(O,nt)|0,n=n+Math.imul(k,ot)|0,i=i+Math.imul(k,at)|0,i=i+Math.imul(x,ot)|0,o=o+Math.imul(x,at)|0,n=n+Math.imul(S,st)|0,i=i+Math.imul(S,ut)|0,i=i+Math.imul(E,st)|0,o=o+Math.imul(E,ut)|0,n=n+Math.imul(w,ct)|0,i=i+Math.imul(w,dt)|0,i=i+Math.imul(_,ct)|0,o=o+Math.imul(_,dt)|0,n=n+Math.imul(y,pt)|0,i=i+Math.imul(y,bt)|0,i=i+Math.imul(m,pt)|0,o=o+Math.imul(m,bt)|0;var xt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(U,Z),i=Math.imul(U,J),i=i+Math.imul(z,Z)|0,o=Math.imul(z,J),n=n+Math.imul(C,Q)|0,i=i+Math.imul(C,tt)|0,i=i+Math.imul(N,Q)|0,o=o+Math.imul(N,tt)|0,n=n+Math.imul(P,rt)|0,i=i+Math.imul(P,nt)|0,i=i+Math.imul(T,rt)|0,o=o+Math.imul(T,nt)|0,n=n+Math.imul(B,ot)|0,i=i+Math.imul(B,at)|0,i=i+Math.imul(O,ot)|0,o=o+Math.imul(O,at)|0,n=n+Math.imul(k,st)|0,i=i+Math.imul(k,ut)|0,i=i+Math.imul(x,st)|0,o=o+Math.imul(x,ut)|0,n=n+Math.imul(S,ct)|0,i=i+Math.imul(S,dt)|0,i=i+Math.imul(E,ct)|0,o=o+Math.imul(E,dt)|0,n=n+Math.imul(w,pt)|0,i=i+Math.imul(w,bt)|0,i=i+Math.imul(_,pt)|0,o=o+Math.imul(_,bt)|0;var It=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(U,Q),i=Math.imul(U,tt),i=i+Math.imul(z,Q)|0,o=Math.imul(z,tt),n=n+Math.imul(C,rt)|0,i=i+Math.imul(C,nt)|0,i=i+Math.imul(N,rt)|0,o=o+Math.imul(N,nt)|0,n=n+Math.imul(P,ot)|0,i=i+Math.imul(P,at)|0,i=i+Math.imul(T,ot)|0,o=o+Math.imul(T,at)|0,n=n+Math.imul(B,st)|0,i=i+Math.imul(B,ut)|0,i=i+Math.imul(O,st)|0,o=o+Math.imul(O,ut)|0,n=n+Math.imul(k,ct)|0,i=i+Math.imul(k,dt)|0,i=i+Math.imul(x,ct)|0,o=o+Math.imul(x,dt)|0,n=n+Math.imul(S,pt)|0,i=i+Math.imul(S,bt)|0,i=i+Math.imul(E,pt)|0,o=o+Math.imul(E,bt)|0;var Bt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,n=Math.imul(U,rt),i=Math.imul(U,nt),i=i+Math.imul(z,rt)|0,o=Math.imul(z,nt),n=n+Math.imul(C,ot)|0,i=i+Math.imul(C,at)|0,i=i+Math.imul(N,ot)|0,o=o+Math.imul(N,at)|0,n=n+Math.imul(P,st)|0,i=i+Math.imul(P,ut)|0,i=i+Math.imul(T,st)|0,o=o+Math.imul(T,ut)|0,n=n+Math.imul(B,ct)|0,i=i+Math.imul(B,dt)|0,i=i+Math.imul(O,ct)|0,o=o+Math.imul(O,dt)|0,n=n+Math.imul(k,pt)|0,i=i+Math.imul(k,bt)|0,i=i+Math.imul(x,pt)|0,o=o+Math.imul(x,bt)|0;var Ot=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(U,ot),i=Math.imul(U,at),i=i+Math.imul(z,ot)|0,o=Math.imul(z,at),n=n+Math.imul(C,st)|0,i=i+Math.imul(C,ut)|0,i=i+Math.imul(N,st)|0,o=o+Math.imul(N,ut)|0,n=n+Math.imul(P,ct)|0,i=i+Math.imul(P,dt)|0,i=i+Math.imul(T,ct)|0,o=o+Math.imul(T,dt)|0,n=n+Math.imul(B,pt)|0,i=i+Math.imul(B,bt)|0,i=i+Math.imul(O,pt)|0,o=o+Math.imul(O,bt)|0;var Rt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,n=Math.imul(U,st),i=Math.imul(U,ut),i=i+Math.imul(z,st)|0,o=Math.imul(z,ut),n=n+Math.imul(C,ct)|0,i=i+Math.imul(C,dt)|0,i=i+Math.imul(N,ct)|0,o=o+Math.imul(N,dt)|0,n=n+Math.imul(P,pt)|0,i=i+Math.imul(P,bt)|0,i=i+Math.imul(T,pt)|0,o=o+Math.imul(T,bt)|0;var Pt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(U,ct),i=Math.imul(U,dt),i=i+Math.imul(z,ct)|0,o=Math.imul(z,dt),n=n+Math.imul(C,pt)|0,i=i+Math.imul(C,bt)|0,i=i+Math.imul(N,pt)|0,o=o+Math.imul(N,bt)|0;var Tt=(u+n|0)+((8191&i)<<13)|0;u=(o+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(U,pt),i=Math.imul(U,bt),i=i+Math.imul(z,pt)|0,o=Math.imul(z,bt);var jt=(u+n|0)+((8191&i)<<13)|0;return u=(o+(i>>>13)|0)+(jt>>>26)|0,jt&=67108863,s[0]=vt,s[1]=yt,s[2]=mt,s[3]=gt,s[4]=wt,s[5]=_t,s[6]=Mt,s[7]=St,s[8]=Et,s[9]=At,s[10]=kt,s[11]=xt,s[12]=It,s[13]=Bt,s[14]=Ot,s[15]=Rt,s[16]=Pt,s[17]=Tt,s[18]=jt,0!==u&&(s[19]=u,r.length++),r};Math.imul||(E=u),o.prototype.mulTo=function(t,e){var r,n=this.length+t.length;return r=10===this.length&&10===t.length?E(this,t,e):n<63?u(this,t,e):n<1024?h(this,t,e):c(this,t,e)},d.prototype.makeRBT=function(t){for(var e=new Array(t),r=o.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},d.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},d.prototype.permute=function(t,e,r,n,i,o){for(var a=0;a<o;a++)n[a]=e[t[a]],i[a]=r[t[a]]},d.prototype.transform=function(t,e,r,n,i,o){this.permute(o,t,e,r,n,i);for(var a=1;a<i;a<<=1)for(var f=a<<1,s=Math.cos(2*Math.PI/f),u=Math.sin(2*Math.PI/f),h=0;h<i;h+=f)for(var c=s,d=u,l=0;l<a;l++){var p=r[h+l],b=n[h+l],v=r[h+l+a],y=n[h+l+a],m=c*v-d*y;y=c*y+d*v,v=m,r[h+l]=p+v,n[h+l]=b+y,r[h+l+a]=p-v,n[h+l+a]=b-y,
|
||
l!==f&&(m=s*c-u*d,d=s*d+u*c,c=m)}},d.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},d.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},d.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},d.prototype.convert13b=function(t,e,r,i){for(var o=0,a=0;a<e;a++)o+=0|t[a],r[2*a]=8191&o,o>>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*e;a<i;++a)r[a]=0;n(0===o),n(0===(o&-8192))},d.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},d.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),o=this.stub(n),a=new Array(n),f=new Array(n),s=new Array(n),u=new Array(n),h=new Array(n),c=new Array(n),d=r.words;d.length=n,this.convert13b(t.words,t.length,a,n),this.convert13b(e.words,e.length,u,n),this.transform(a,o,f,s,n,i),this.transform(u,o,h,c,n,i);for(var l=0;l<n;l++){var p=f[l]*h[l]-s[l]*c[l];s[l]=f[l]*c[l]+s[l]*h[l],f[l]=p}return this.conjugate(f,s,n),this.transform(f,s,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},o.prototype.mul=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},o.prototype.mulf=function(t){var e=new o(null);return e.words=new Array(this.length+t.length),c(this,t,e)},o.prototype.imul=function(t){return this.clone().mulTo(t,this)},o.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,o=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=o>>>26,this.words[r]=67108863&o}return 0!==e&&(this.words[r]=e,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var e=s(t);if(0===e.length)return new o(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(e=0;e<this.length;e++){var f=this.words[e]&o,s=(0|this.words[e])-f<<r;this.words[e]=s|a,a=f>>>26-r}a&&(this.words[e]=a,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},o.prototype.iushrn=function(t,e,r){n("number"==typeof t&&t>=0);var i;i=e?(e-e%26)/26:0;var o=t%26,a=Math.min((t-o)/26,this.length),f=67108863^67108863>>>o<<o,s=r;if(i-=a,i=Math.max(0,i),s){for(var u=0;u<a;u++)s.words[u]=this.words[u];s.length=a}if(0===a);else if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;u>=0&&(0!==h||u>=i);u--){var c=0|this.words[u];this.words[u]=h<<26-o|c>>>o,h=c&f}return s&&0!==h&&(s.words[s.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return!1;var o=this.words[r];return!!(o&i)},o.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},o.prototype.maskn=function(t){return this.clone().imaskn(t)},o.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},o.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},o.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},o.prototype.addn=function(t){return this.clone().iaddn(t)},o.prototype.subn=function(t){return this.clone().isubn(t)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(t,e,r){var i,o=t.length+r;this._expand(o);var a,f=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+f;var s=(0|t.words[i])*e;a-=67108863&s,f=(a>>26)-(s/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)a=(0|this.words[i+r])+f,f=a>>26,this.words[i+r]=67108863&a;if(0===f)return this.strip();for(n(f===-1),f=0,i=0;i<this.length;i++)a=-(0|this.words[i])+f,f=a>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,e){var r=this.length-t.length,n=this.clone(),i=t,a=0|i.words[i.length-1],f=this._countBits(a);r=26-f,0!==r&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,u=n.length-i.length;if("mod"!==e){s=new o(null),s.length=u+1,s.words=new Array(s.length);for(var h=0;h<s.length;h++)s.words[h]=0}var c=n.clone()._ishlnsubmul(i,1,u);0===c.negative&&(n=c,s&&(s.words[u]=1));for(var d=u-1;d>=0;d--){var l=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(l=Math.min(l/a|0,67108863),n._ishlnsubmul(i,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);s&&(s.words[d]=l)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(t,e,r){if(n(!t.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var i,a,f;return 0!==this.negative&&0===t.negative?(f=this.neg().divmod(t,e),"mod"!==e&&(i=f.div.neg()),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.iadd(t)),{div:i,mod:a}):0===this.negative&&0!==t.negative?(f=this.divmod(t.neg(),e),"mod"!==e&&(i=f.div.neg()),{div:i,mod:f.mod}):0!==(this.negative&t.negative)?(f=this.neg().divmod(t.neg(),e),"div"!==e&&(a=f.mod.neg(),r&&0!==a.negative&&a.isub(t)),{div:f.div,mod:a}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,e)},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},o.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},o.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=new o(0),s=new o(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var h=r.clone(),c=e.clone();!e.isZero();){for(var d=0,l=1;0===(e.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(e.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(h),a.isub(c)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0===(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(f.isOdd()||s.isOdd())&&(f.iadd(h),s.isub(c)),f.iushrn(1),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(f),a.isub(s)):(r.isub(e),f.isub(i),s.isub(a))}return{a:f,b:s,gcd:r.iushln(u)}},o.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new o(1),a=new o(0),f=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var s=0,u=1;0===(e.words[0]&u)&&s<26;++s,u<<=1);if(s>0)for(e.iushrn(s);s-- >0;)i.isOdd()&&i.iadd(f),i.iushrn(1);for(var h=0,c=1;0===(r.words[0]&c)&&h<26;++h,c<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(a)):(r.isub(e),a.isub(i))}var d;return d=0===e.cmpn(1)?i:a,d.cmpn(0)<0&&d.iadd(t),d},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var o=e;e=r,r=o}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var o=i,a=r;0!==o&&a<this.length;a++){var f=0|this.words[a];f+=o,o=f>>>26,f&=67108863,this.words[a]=f}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;this.strip();var r;if(this.length>1)r=1;else{e&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r},o.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},o.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return this.cmpn(t)===-1},o.prototype.lt=function(t){return this.cmp(t)===-1},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new m(t)},o.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var A={k256:null,p224:null,p192:null,p25519:null};l.prototype._tmp=function(){var t=new o(null);return t.words=new Array(Math.ceil(this.n/13)),t},l.prototype.ireduce=function(t){var e,r=t;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength();while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},l.prototype.split=function(t,e){t.iushrn(this.n,0,e)},l.prototype.imulK=function(t){return t.imul(this.k)},i(p,l),p.prototype.split=function(t,e){for(var r=4194303,n=Math.min(t.length,9),i=0;i<n;i++)e.words[i]=t.words[i];if(e.length=n,t.length<=9)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(e.words[e.length++]=o&r,i=10;i<t.length;i++){var a=0|t.words[i];t.words[i-10]=(a&r)<<4|o>>>22,o=a}o>>>=22,t.words[i-10]=o,0===o&&t.length>10?t.length-=10:t.length-=9},p.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(b,l),i(v,l),i(y,l),y.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},o._prime=function t(e){if(A[e])return A[e];var t;if("k256"===e)t=new p;else if("p224"===e)t=new b;else if("p192"===e)t=new v;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new y}return A[e]=t,t},m.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},m.prototype._verify2=function(t,e){n(0===(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},m.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},m.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},m.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},m.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},m.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},m.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},m.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},m.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},m.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},m.prototype.isqr=function(t){return this.imul(t,t.clone())},m.prototype.sqr=function(t){return this.mul(t,t)},m.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2===1),3===e){var r=this.m.add(new o(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var f=new o(1).toRed(this),s=f.redNeg(),u=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new o(2*h*h).toRed(this);0!==this.pow(h,u).cmp(s);)h.redIAdd(s);for(var c=this.pow(h,i),d=this.pow(t,i.addn(1).iushrn(1)),l=this.pow(t,i),p=a;0!==l.cmp(f);){for(var b=l,v=0;0!==b.cmp(f);v++)b=b.redSqr();n(v<p);var y=this.pow(c,new o(1).iushln(p-v-1));d=d.redMul(y),c=y.redSqr(),l=l.redMul(c),p=v}return d},m.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},m.prototype.pow=function(t,e){if(e.isZero())return new o(1);if(0===e.cmpn(1))return t.clone();var r=4,n=new Array(1<<r);n[0]=new o(1).toRed(this),n[1]=t;for(var i=2;i<n.length;i++)n[i]=this.mul(n[i-1],t);var a=n[0],f=0,s=0,u=e.bitLength()%26;for(0===u&&(u=26),i=e.length-1;i>=0;i--){for(var h=e.words[i],c=u-1;c>=0;c--){var d=h>>c&1;a!==n[0]&&(a=this.sqr(a)),0!==d||0!==f?(f<<=1,f|=d,s++,(s===r||0===i&&0===c)&&(a=this.mul(a,n[f]),s=0,f=0)):s=0}u=26}return a},m.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},m.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},o.mont=function(t){return new g(t)},i(g,m),g.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},g.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},g.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},g.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new o(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},g.prototype.invm=function(t){var e=this.imod(t._invmp(this.m).mul(this.r2));return e._forceRed(this)}}("undefined"==typeof t||t,this)}).call(e,r(92)(t))},function(t,e,r){(function(t,n){var i=r(149),o=r(576);e.pbkdf2=function(t,r,n,i,a,f){if("function"==typeof a&&(f=a,a=void 0),o(n,i),"function"!=typeof f)throw new Error("No callback provided to pbkdf2");setTimeout(function(){f(null,e.pbkdf2Sync(t,r,n,i,a))})};var a;if(t.browser)a="utf-8";else{var f=parseInt(t.version.split(".")[0].slice(1),10);a=f>=6?"utf-8":"binary"}e.pbkdf2Sync=function(t,e,r,f,s){n.isBuffer(t)||(t=new n(t,a)),n.isBuffer(e)||(e=new n(e,a)),o(r,f),s=s||"sha1";var u,h=1,c=new n(f),d=new n(e.length+4);e.copy(d,0,0,e.length);for(var l,p,b=1;b<=h;b++){d.writeUInt32BE(b,e.length);var v=i(s,t).update(d).digest();u||(u=v.length,p=new n(u),h=Math.ceil(f/u),l=f-(h-1)*u),v.copy(p,0,0,u);for(var y=1;y<r;y++){v=i(s,t).update(v).digest();for(var m=0;m<u;m++)p[m]^=v[m]}var g=(b-1)*u,w=b===h?l:u;p.copy(c,g,0,w)}return c}}).call(e,r(26),r(1).Buffer)},function(t,e){e["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},e["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},e["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},e["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},e["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},e["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},e.aes128=e["aes-128-cbc"],e.aes192=e["aes-192-cbc"],e.aes256=e["aes-256-cbc"],e["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},e["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},e["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},e["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},e["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},e["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},e["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},e["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},e["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},e["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},e["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},e["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},e["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},e["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},e["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},e["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},e["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},e["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},function(t,e,r){(function(e){function n(t,r,n,o){e.isBuffer(t)||(t=new e(t,"binary")),r&&!e.isBuffer(r)&&(r=new e(r,"binary")),n/=8,o=o||0;for(var a,f,s=0,u=0,h=new e(n),c=new e(o),d=0,l=[];;){if(d++>0&&l.push(a),l.push(t),r&&l.push(r),a=i(e.concat(l)),l=[],f=0,n>0)for(;;){if(0===n)break;if(f===a.length)break;h[s++]=a[f],n--,f++}if(o>0&&f!==a.length)for(;;){if(0===o)break;if(f===a.length)break;c[u++]=a[f],o--,f++}if(0===n&&0===o)break}for(f=0;f<a.length;f++)a[f]=0;return{key:h,iv:c}}var i=r(105);t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t){this.afterTransform=function(e,r){return i(t,e,r)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function i(t,e,r){var n=t._transformState;n.transforming=!1;var i=n.writecb;if(!i)return t.emit("error",new Error("no writecb in Transform class"));n.writechunk=null,n.writecb=null,null!==r&&void 0!==r&&t.push(r),i(e);var o=t._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&t._read(o.highWaterMark)}function o(t){if(!(this instanceof o))return new o(t);f.call(this,t),this._transformState=new n(this);var e=this;this._readableState.needReadable=!0,this._readableState.sync=!1,t&&("function"==typeof t.transform&&(this._transform=t.transform),"function"==typeof t.flush&&(this._flush=t.flush)),this.once("prefinish",function(){"function"==typeof this._flush?this._flush(function(t){a(e,t)}):a(e)})}function a(t,e){if(e)return t.emit("error",e);var r=t._writableState,n=t._transformState;if(r.length)throw new Error("Calling transform done when ws.length != 0");if(n.transforming)throw new Error("Calling transform done when still transforming");return t.push(null)}t.exports=o;var f=r(51),s=r(73);s.inherits=r(74),s.inherits(o,f),o.prototype.push=function(t,e){return this._transformState.needTransform=!1,f.prototype.push.call(this,t,e)},o.prototype._transform=function(t,e,r){throw new Error("Not implemented")},o.prototype._write=function(t,e,r){var n=this._transformState;if(n.writecb=r,n.writechunk=t,n.writeencoding=e,!n.transforming){var i=this._readableState;(n.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},o.prototype._read=function(t){var e=this._transformState;null!==e.writechunk&&e.writecb&&!e.transforming?(e.transforming=!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform)):e.needTransform=!0}},function(t,e,r){"use strict";(function(e,n){function i(){}function o(t,e,r){this.chunk=t,this.encoding=e,this.callback=r,this.next=null}function a(t,e){R=R||r(51),t=t||{},this.objectMode=!!t.objectMode,e instanceof R&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var n=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:i,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(t){b(e,t)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new S(this)}function f(t){return R=R||r(51),this instanceof f||this instanceof R?(this._writableState=new a(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev)),void x.call(this)):new f(t)}function s(t,e){var r=new Error("write after end");t.emit("error",r),E(e,r)}function u(t,e,r,n){var i=!0,o=!1;return null===r?o=new TypeError("May not write null values to stream"):B.isBuffer(r)||"string"==typeof r||void 0===r||e.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(t.emit("error",o),E(n,o),i=!1),i}function h(t,e,r){return t.objectMode||t.decodeStrings===!1||"string"!=typeof e||(e=O.from(e,r)),e}function c(t,e,r,n,i){r=h(e,r,n),B.isBuffer(r)&&(n="buffer");var a=e.objectMode?1:r.length;e.length+=a;var f=e.length<e.highWaterMark;if(f||(e.needDrain=!0),e.writing||e.corked){var s=e.lastBufferedRequest;e.lastBufferedRequest=new o(r,n,i),s?s.next=e.lastBufferedRequest:e.bufferedRequest=e.lastBufferedRequest,e.bufferedRequestCount+=1}else d(t,e,!1,a,r,n,i);return f}function d(t,e,r,n,i,o,a){e.writelen=n,e.writecb=a,e.writing=!0,e.sync=!0,r?t._writev(i,e.onwrite):t._write(i,o,e.onwrite),e.sync=!1}function l(t,e,r,n,i){--e.pendingcb,r?E(i,n):i(n),t._writableState.errorEmitted=!0,t.emit("error",n)}function p(t){t.writing=!1,t.writecb=null,t.length-=t.writelen,t.writelen=0}function b(t,e){var r=t._writableState,n=r.sync,i=r.writecb;if(p(r),e)l(t,r,n,e,i);else{var o=g(r);o||r.corked||r.bufferProcessing||!r.bufferedRequest||m(t,r),n?A(v,t,r,o,i):v(t,r,o,i)}}function v(t,e,r,n){r||y(t,e),e.pendingcb--,n(),_(t,e)}function y(t,e){0===e.length&&e.needDrain&&(e.needDrain=!1,t.emit("drain"))}function m(t,e){e.bufferProcessing=!0;var r=e.bufferedRequest;if(t._writev&&r&&r.next){var n=e.bufferedRequestCount,i=new Array(n),o=e.corkedRequestsFree;o.entry=r;for(var a=0;r;)i[a]=r,r=r.next,a+=1;d(t,e,!0,e.length,i,"",o.finish),e.pendingcb++,e.lastBufferedRequest=null,o.next?(e.corkedRequestsFree=o.next,o.next=null):e.corkedRequestsFree=new S(e)}else{for(;r;){var f=r.chunk,s=r.encoding,u=r.callback,h=e.objectMode?1:f.length;if(d(t,e,!1,h,f,s,u),r=r.next,e.writing)break}null===r&&(e.lastBufferedRequest=null)}e.bufferedRequestCount=0,e.bufferedRequest=r,e.bufferProcessing=!1}function g(t){return t.ending&&0===t.length&&null===t.bufferedRequest&&!t.finished&&!t.writing}function w(t,e){e.prefinished||(e.prefinished=!0,t.emit("prefinish"))}function _(t,e){var r=g(e);return r&&(0===e.pendingcb?(w(t,e),e.finished=!0,t.emit("finish")):w(t,e)),r}function M(t,e,r){e.ending=!0,_(t,e),r&&(e.finished?E(r):t.once("finish",r)),e.ended=!0,t.writable=!1}function S(t){var e=this;this.next=null,this.entry=null,this.finish=function(r){var n=e.entry;for(e.entry=null;n;){var i=n.callback;t.pendingcb--,i(r),n=n.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}}t.exports=f;var E=r(157),A=!e.browser&&["v0.10","v0.9."].indexOf(e.version.slice(0,5))>-1?n:E;f.WritableState=a;var k=r(73);k.inherits=r(74);var x,I={deprecate:r(598)};!function(){try{x=r(31)}catch(t){}finally{x||(x=r(110).EventEmitter)}}();var B=r(1).Buffer,O=r(156);k.inherits(f,x);var R;a.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(a.prototype,"buffer",{get:I.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(t){}}();var R;f.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},f.prototype.write=function(t,e,r){var n=this._writableState,o=!1;return"function"==typeof e&&(r=e,e=null),B.isBuffer(t)?e="buffer":e||(e=n.defaultEncoding),"function"!=typeof r&&(r=i),n.ended?s(this,r):u(this,n,t,r)&&(n.pendingcb++,o=c(this,n,t,e,r)),o},f.prototype.cork=function(){var t=this._writableState;t.corked++},f.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||m(this,t))},f.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},f.prototype._write=function(t,e,r){r(new Error("not implemented"))},f.prototype._writev=null,f.prototype.end=function(t,e,r){var n=this._writableState;"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!==t&&void 0!==t&&this.write(t,e),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||M(this,n,r)}}).call(e,r(26),r(158).setImmediate)},function(t,e,r){"use strict";(function(t){var n=r(1),i=n.Buffer,o=n.SlowBuffer,a=n.kMaxLength||2147483647;e.alloc=function(t,e,r){if("function"==typeof i.alloc)return i.alloc(t,e,r);if("number"==typeof r)throw new TypeError("encoding must not be number");if("number"!=typeof t)throw new TypeError("size must be a number");if(t>a)throw new RangeError("size is too large");var n=r,o=e;void 0===o&&(n=void 0,o=0);var f=new i(t);if("string"==typeof o)for(var s=new i(o,n),u=s.length,h=-1;++h<t;)f[h]=s[h%u];else f.fill(o);return f},e.allocUnsafe=function(t){if("function"==typeof i.allocUnsafe)return i.allocUnsafe(t);if("number"!=typeof t)throw new TypeError("size must be a number");if(t>a)throw new RangeError("size is too large");return new i(t)},e.from=function(e,r,n){if("function"==typeof i.from&&(!t.Uint8Array||Uint8Array.from!==i.from))return i.from(e,r,n);if("number"==typeof e)throw new TypeError('"value" argument must not be a number');if("string"==typeof e)return new i(e,r);if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer){var o=r;if(1===arguments.length)return new i(e);"undefined"==typeof o&&(o=0);var a=n;if("undefined"==typeof a&&(a=e.byteLength-o),o>=e.byteLength)throw new RangeError("'offset' is out of bounds");if(a>e.byteLength-o)throw new RangeError("'length' is out of bounds");return new i(e.slice(o,o+a))}if(i.isBuffer(e)){var f=new i(e.length);return e.copy(f,0,0,e.length),f}if(e){if(Array.isArray(e)||"undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return new i(e);if("Buffer"===e.type&&Array.isArray(e.data))return new i(e.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")},e.allocUnsafeSlow=function(t){if("function"==typeof i.allocUnsafeSlow)return i.allocUnsafeSlow(t);if("number"!=typeof t)throw new TypeError("size must be a number");if(t>=a)throw new RangeError("size is too large");return new o(t)}}).call(e,r(39))},function(t,e,r){"use strict";(function(e){function r(t,r,n,i){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var o,a,f=arguments.length;switch(f){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,r)});case 3:return e.nextTick(function(){t.call(null,r,n)});case 4:return e.nextTick(function(){t.call(null,r,n,i)});default:for(o=new Array(f-1),a=0;a<o.length;)o[a++]=arguments[a];return e.nextTick(function(){t.apply(null,o)})}}!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports=r:t.exports=e.nextTick;
|
||
}).call(e,r(26))},function(t,e,r){(function(t,n){function i(t,e){this._id=t,this._clearFn=e}var o=r(26).nextTick,a=Function.prototype.apply,f=Array.prototype.slice,s={},u=0;e.setTimeout=function(){return new i(a.call(setTimeout,window,arguments),clearTimeout)},e.setInterval=function(){return new i(a.call(setInterval,window,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(window,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},e.setImmediate="function"==typeof t?t:function(t){var r=u++,n=!(arguments.length<2)&&f.call(arguments,1);return s[r]=!0,o(function(){s[r]&&(n?t.apply(null,n):t.call(null),e.clearImmediate(r))}),r},e.clearImmediate="function"==typeof n?n:function(t){delete s[t]}}).call(e,r(158).setImmediate,r(158).clearImmediate)},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(62),f=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(62),f=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(257).Ber,a=65537,f=function(){function t(){n(this,t)}return i(t,null,[{key:"modulusToPem",value:function(t){if(0===t[0])throw new Error("Modulus may not start with zero");128&t[0]&&(t=e.concat([new e([0]),t]));var r=new o.Writer;return r.startSequence(),r.writeBuffer(t,2),r.writeInt(a),r.endSequence(),"-----BEGIN RSA PUBLIC KEY-----\n"+r.buffer.toString("base64").match(/.{1,64}/g).join("\n")+"\n-----END RSA PUBLIC KEY-----\n"}},{key:"modulusFromPrivateKey",value:function(t){var r=t.replace("-----BEGIN RSA PRIVATE KEY-----","").replace("-----END RSA PRIVATE KEY-----","").replace(/\s+|\n\r|\n|\r$/gm,""),n=new e(r,"base64"),i=new o.Reader(n);i.readSequence(),i.readString(2,!0);var a=i.readString(2,!0);return 0===a[0]?a.slice(1):a}}]),t}();t.exports=f}).call(e,r(1).Buffer)},function(t,e,r){r(281),t.exports=r(163).Number.isInteger},function(t,e){var r=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e,r){var n=r(23);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},function(t,e,r){"use strict";var n=r(11),i=r(47),o=r(10);t.exports=[].copyWithin||function(t,e){var r=n(this),a=o(r.length),f=i(t,a),s=i(e,a),u=arguments.length>2?arguments[2]:void 0,h=Math.min((void 0===u?a:i(u,a))-s,a-f),c=1;for(s<f&&f<s+h&&(c=-1,s+=h-1,f+=h-1);h-- >0;)s in r?r[f]=r[s]:delete r[f],f+=c,s+=c;return r}},function(t,e,r){var n=r(55);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},function(t,e,r){var n=r(13),i=r(11),o=r(65),a=r(10);t.exports=function(t,e,r,f,s){n(e);var u=i(t),h=o(u),c=a(u.length),d=s?c-1:0,l=s?-1:1;if(r<2)for(;;){if(d in h){f=h[d],d+=l;break}if(d+=l,s?d<0:c<=d)throw TypeError("Reduce of empty array with no initial value")}for(;s?d>=0:c>d;d+=l)d in h&&(f=e(f,h[d],d,u));return f}},function(t,e,r){"use strict";var n=r(13),i=r(6),o=r(82),a=[].slice,f={},s=function(t,e,r){if(!(e in f)){for(var n=[],i=0;i<e;i++)n[i]="a["+i+"]";f[e]=Function("F,a","return new F("+n.join(",")+")")}return f[e](t,r)};t.exports=Function.bind||function(t){var e=n(this),r=a.call(arguments,1),f=function(){var n=r.concat(a.call(arguments));return this instanceof f?s(e,n.length,n):o(e,n,t)};return i(e.prototype)&&(f.prototype=e.prototype),f}},function(t,e,r){"use strict";var n=r(9).f,i=r(42),o=r(45),a=r(33),f=r(40),s=r(24),u=r(55),h=r(128),c=r(177),d=r(46),l=r(8),p=r(36).fastKey,b=l?"_s":"size",v=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,h){var c=t(function(t,n){f(t,c,e,"_i"),t._i=i(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=n&&u(n,r,t[h],t)});return o(c.prototype,{clear:function(){for(var t=this,e=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete e[r.i];t._f=t._l=void 0,t[b]=0},delete:function(t){var e=this,r=v(e,t);if(r){var n=r.n,i=r.p;delete e._i[r.i],r.r=!0,i&&(i.n=n),n&&(n.p=i),e._f==r&&(e._f=n),e._l==r&&(e._l=i),e[b]--}return!!r},forEach:function(t){f(this,c,"forEach");for(var e,r=a(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(r(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!v(this,t)}}),l&&n(c.prototype,"size",{get:function(){return s(this[b])}}),c},def:function(t,e,r){var n,i,o=v(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[b]++,"F"!==i&&(t._i[i]=o)),t},getEntry:v,setStrong:function(t,e,r){h(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,r=t._l;r&&r.r;)r=r.p;return t._t&&(t._l=r=r?r.n:t._t._f)?"keys"==e?c(0,r.k):"values"==e?c(0,r.v):c(0,[r.k,r.v]):(t._t=void 0,c(1))},r?"entries":"values",!r,!0),d(e)}}},function(t,e,r){var n=r(64),i=r(168);t.exports=function(t){return function(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},function(t,e,r){"use strict";var n=r(45),i=r(36).getWeak,o=r(3),a=r(6),f=r(40),s=r(55),u=r(27),h=r(12),c=u(5),d=u(6),l=0,p=function(t){return t._l||(t._l=new b)},b=function(){this.a=[]},v=function(t,e){return c(t.a,function(t){return t[0]===e})};b.prototype={get:function(t){var e=v(this,t);if(e)return e[1]},has:function(t){return!!v(this,t)},set:function(t,e){var r=v(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=d(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var u=t(function(t,n){f(t,u,e,"_i"),t._i=l++,t._l=void 0,void 0!=n&&s(n,r,t[o],t)});return n(u.prototype,{delete:function(t){if(!a(t))return!1;var e=i(t);return e===!0?p(this).delete(t):e&&h(e,this._i)&&delete e[this._i]},has:function(t){if(!a(t))return!1;var e=i(t);return e===!0?p(this).has(t):e&&h(e,this._i)}}),u},def:function(t,e,r){var n=i(o(e),!0);return n===!0?p(t).set(e,r):n[t._i]=r,t},ufstore:p}},function(t,e,r){t.exports=!r(8)&&!r(5)(function(){return 7!=Object.defineProperty(r(120)("div"),"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(6),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},function(t,e,r){var n=r(3);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},function(t,e,r){"use strict";var n=r(44),i=r(86),o=r(66),a=r(11),f=r(65),s=Object.assign;t.exports=!s||r(5)(function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach(function(t){e[t]=t}),7!=s({},t)[r]||Object.keys(s({},e)).join("")!=n})?function(t,e){for(var r=a(t),s=arguments.length,u=1,h=i.f,c=o.f;s>u;)for(var d,l=f(arguments[u++]),p=h?n(l).concat(h(l)):n(l),b=p.length,v=0;b>v;)c.call(l,d=p[v++])&&(r[d]=l[d]);return r}:s},function(t,e,r){var n=r(9),i=r(3),o=r(44);t.exports=r(8)?Object.defineProperties:function(t,e){i(t);for(var r,a=o(e),f=a.length,s=0;f>s;)n.f(t,r=a[s++],e[r]);return t}},function(t,e,r){var n=r(17),i=r(43).f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],f=function(t){try{return i(t)}catch(t){return a.slice()}};t.exports.f=function(t){return a&&"[object Window]"==o.call(t)?f(t):i(n(t))}},function(t,e,r){var n=r(12),i=r(17),o=r(78)(!1),a=r(133)("IE_PROTO");t.exports=function(t,e){var r,f=i(t),s=0,u=[];for(r in f)r!=a&&n(f,r)&&u.push(r);for(;e.length>s;)n(f,r=e[s++])&&(~o(u,r)||u.push(r));return u}},function(t,e,r){var n=r(44),i=r(17),o=r(66).f;t.exports=function(t){return function(e){for(var r,a=i(e),f=n(a),s=f.length,u=0,h=[];s>u;)o.call(a,r=f[u++])&&h.push(t?[r,a[r]]:a[r]);return h}}},function(t,e,r){var n=r(43),i=r(86),o=r(3),a=r(4).Reflect;t.exports=a&&a.ownKeys||function(t){var e=n.f(o(t)),r=i.f;return r?e.concat(r(t)):e}},function(t,e,r){var n=r(4).parseFloat,i=r(58).trim;t.exports=1/n(r(138)+"-0")!==-(1/0)?function(t){var e=i(String(t),3),r=n(e);return 0===r&&"-"==e.charAt(0)?-0:r}:n},function(t,e,r){var n=r(4).parseInt,i=r(58).trim,o=r(138),a=/^[\-+]?0[xX]/;t.exports=8!==n(o+"08")||22!==n(o+"0x16")?function(t,e){var r=i(String(t),3);return n(r,e>>>0||(a.test(r)?16:10))}:n},function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},function(t,e,r){var n=r(10),i=r(137),o=r(24);t.exports=function(t,e,r,a){var f=String(o(t)),s=f.length,u=void 0===r?" ":String(r),h=n(e);if(h<=s||""==u)return f;var c=h-s,d=i.call(u,Math.ceil(c/u.length));return d.length>c&&(d=d.slice(0,c)),a?d+f:f+d}},function(t,e,r){e.f=r(7)},function(t,e,r){"use strict";var n=r(171);t.exports=r(79)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=n.getEntry(this,t);return e&&e.v},set:function(t,e){return n.def(this,0===t?0:t,e)}},n,!0)},function(t,e,r){r(8)&&"g"!=/./g.flags&&r(9).f(RegExp.prototype,"flags",{configurable:!0,get:r(81)})},function(t,e,r){"use strict";var n=r(171);t.exports=r(79)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return n.def(this,t=0===t?0:t,t)}},n)},function(t,e,r){"use strict";var n,i=r(27)(0),o=r(15),a=r(36),f=r(179),s=r(173),u=r(6),h=a.getWeak,c=Object.isExtensible,d=s.ufstore,l={},p=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},b={get:function(t){if(u(t)){var e=h(t);return e===!0?d(this).get(t):e?e[this._i]:void 0}},set:function(t,e){return s.def(this,t,e)}},v=t.exports=r(79)("WeakMap",p,b,s,!0,!0);7!=(new v).set((Object.freeze||Object)(l),7).get(l)&&(n=s.getConstructor(p),f(n.prototype,b),a.NEED=!0,i(["delete","has","get","set"],function(t){var e=v.prototype,r=e[t];o(e,t,function(e,i){if(u(e)&&!c(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)})}))},function(t,e){function r(t){throw new Error("Cannot find module '"+t+"'.")}r.keys=function(){return[]},r.resolve=r,t.exports=r,r.id=194},function(t,e){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var o=function(t){function e(t){r(this,e);var i=n(this,Object.getPrototypeOf(e).call(this));return Object.defineProperty(i,"message",{configurable:!0,enumerable:!1,value:void 0!==t?String(t):""}),Object.defineProperty(i,"name",{configurable:!0,enumerable:!1,value:i.constructor.name}),Error.captureStackTrace&&Error.captureStackTrace(i,i.constructor),i}return i(e,t),e}(Error);t.exports=o},function(t,e,r){r(486),t.exports=r(197).Number.isInteger},function(t,e){var r=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},function(t,e,r){var n=r(200),i=r(197),o=r(478),a=r(480),f="prototype",s=function(t,e,r){var u,h,c,d=t&s.F,l=t&s.G,p=t&s.S,b=t&s.P,v=t&s.B,y=t&s.W,m=l?i:i[e]||(i[e]={}),g=m[f],w=l?n:p?n[e]:(n[e]||{})[f];l&&(r=e);for(u in r)h=!d&&w&&void 0!==w[u],h&&u in m||(c=h?w[u]:r[u],m[u]=l&&"function"!=typeof w[u]?r[u]:v&&h?o(c,n):y&&w[u]==c?function(t){var e=function(e,r,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,r)}return new t(e,r,n)}return t.apply(this,arguments)};return e[f]=t[f],e}(c):b&&"function"==typeof c?o(Function.call,c):c,b&&((m.virtual||(m.virtual={}))[u]=c,t&s.R&&g&&!g[u]&&a(g,u,c)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e,r){"use strict";t.exports=r(473)},function(t,e,r){"use strict";(function(e){/*!
|
||
* The buffer module from node.js, for the browser.
|
||
*
|
||
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
|
||
* @license MIT
|
||
*/
|
||
function n(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,i=0,o=Math.min(r,n);i<o;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0}function i(t){return e.Buffer&&"function"==typeof e.Buffer.isBuffer?e.Buffer.isBuffer(t):!(null==t||!t._isBuffer)}function o(t){return Object.prototype.toString.call(t)}function a(t){return!i(t)&&("function"==typeof e.ArrayBuffer&&("function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):!!t&&(t instanceof DataView||!!(t.buffer&&t.buffer instanceof ArrayBuffer))))}function f(t){if(w.isFunction(t)){if(S)return t.name;var e=t.toString(),r=e.match(A);return r&&r[1]}}function s(t,e){return"string"==typeof t?t.length<e?t:t.slice(0,e):t}function u(t){if(S||!w.isFunction(t))return w.inspect(t);var e=f(t),r=e?": "+e:"";return"[Function"+r+"]"}function h(t){return s(u(t.actual),128)+" "+t.operator+" "+s(u(t.expected),128)}function c(t,e,r,n,i){throw new E.AssertionError({message:r,actual:t,expected:e,operator:n,stackStartFunction:i})}function d(t,e){t||c(t,!0,e,"==",E.ok)}function l(t,e,r,f){if(t===e)return!0;if(i(t)&&i(e))return 0===n(t,e);if(w.isDate(t)&&w.isDate(e))return t.getTime()===e.getTime();if(w.isRegExp(t)&&w.isRegExp(e))return t.source===e.source&&t.global===e.global&&t.multiline===e.multiline&&t.lastIndex===e.lastIndex&&t.ignoreCase===e.ignoreCase;if(null!==t&&"object"==typeof t||null!==e&&"object"==typeof e){if(a(t)&&a(e)&&o(t)===o(e)&&!(t instanceof Float32Array||t instanceof Float64Array))return 0===n(new Uint8Array(t.buffer),new Uint8Array(e.buffer));if(i(t)!==i(e))return!1;f=f||{actual:[],expected:[]};var s=f.actual.indexOf(t);return s!==-1&&s===f.expected.indexOf(e)||(f.actual.push(t),f.expected.push(e),b(t,e,r,f))}return r?t===e:t==e}function p(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function b(t,e,r,n){if(null===t||void 0===t||null===e||void 0===e)return!1;if(w.isPrimitive(t)||w.isPrimitive(e))return t===e;if(r&&Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1;var i=p(t),o=p(e);if(i&&!o||!i&&o)return!1;if(i)return t=M.call(t),e=M.call(e),l(t,e,r);var a,f,s=k(t),u=k(e);if(s.length!==u.length)return!1;for(s.sort(),u.sort(),f=s.length-1;f>=0;f--)if(s[f]!==u[f])return!1;for(f=s.length-1;f>=0;f--)if(a=s[f],!l(t[a],e[a],r,n))return!1;return!0}function v(t,e,r){l(t,e,!0)&&c(t,e,r,"notDeepStrictEqual",v)}function y(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&e.call({},t)===!0}function m(t){var e;try{t()}catch(t){e=t}return e}function g(t,e,r,n){var i;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=m(e),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),t&&!i&&c(i,r,"Missing expected exception"+n);var o="string"==typeof n,a=!t&&w.isError(i),f=!t&&i&&!r;if((a&&o&&y(i,r)||f)&&c(i,r,"Got unwanted exception"+n),t&&i&&r&&!y(i,r)||!t&&i)throw i}var w=r(606),_=Object.prototype.hasOwnProperty,M=Array.prototype.slice,S=function(){return"foo"===function(){}.name}(),E=t.exports=d,A=/\s*function\s+([^\(\s]*)\s*/;E.AssertionError=function(t){this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=h(this),this.generatedMessage=!0);var e=t.stackStartFunction||c;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error;if(r.stack){var n=r.stack,i=f(e),o=n.indexOf("\n"+i);if(o>=0){var a=n.indexOf("\n",o+1);n=n.substring(a+1)}this.stack=n}}},w.inherits(E.AssertionError,Error),E.fail=c,E.ok=d,E.equal=function(t,e,r){t!=e&&c(t,e,r,"==",E.equal)},E.notEqual=function(t,e,r){t==e&&c(t,e,r,"!=",E.notEqual)},E.deepEqual=function(t,e,r){l(t,e,!1)||c(t,e,r,"deepEqual",E.deepEqual)},E.deepStrictEqual=function(t,e,r){l(t,e,!0)||c(t,e,r,"deepStrictEqual",E.deepStrictEqual)},E.notDeepEqual=function(t,e,r){l(t,e,!1)&&c(t,e,r,"notDeepEqual",E.notDeepEqual)},E.notDeepStrictEqual=v,E.strictEqual=function(t,e,r){t!==e&&c(t,e,r,"===",E.strictEqual)},E.notStrictEqual=function(t,e,r){t===e&&c(t,e,r,"!==",E.notStrictEqual)},E.throws=function(t,e,r){g(!0,t,e,r)},E.doesNotThrow=function(t,e,r){g(!1,t,e,r)},E.ifError=function(t){if(t)throw t};var k=Object.keys||function(t){var e=[];for(var r in t)_.call(t,r)&&e.push(r);return e}}).call(e,r(39))},function(t,e,r){(function(e){function n(t,r,i,f){if(!(this instanceof n))return new n(t,r,i);a.call(this),this._finID=e.concat([i,new e([0,0,0,1])]),i=e.concat([i,new e([0,0,0,2])]),this._cipher=new o.AES(r),this._prev=new e(i.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,this._alen=0,this._len=0,i.copy(this._prev),this._mode=t;var u=new e(4);u.fill(0),this._ghash=new s(this._cipher.encryptBlock(u)),this._authTag=null,this._called=!1}function i(t,e){var r=0;t.length!==e.length&&r++;for(var n=Math.min(t.length,e.length),i=-1;++i<n;)r+=t[i]^e[i];return r}var o=r(94),a=r(97),f=r(2),s=r(497),u=r(67);f(n,a),t.exports=n,n.prototype._update=function(t){if(!this._called&&this._alen){var r=16-this._alen%16;r<16&&(r=new e(r),r.fill(0),this._ghash.update(r))}this._called=!0;var n=this._mode.encrypt(this,t);return this._decrypt?this._ghash.update(t):this._ghash.update(n),this._len+=t.length,n},n.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var t=u(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt){if(i(t,this._authTag))throw new Error("Unsupported state or unable to authenticate data")}else this._authTag=t;this._cipher.scrub()},n.prototype.getAuthTag=function(){if(!this._decrypt&&e.isBuffer(this._authTag))return this._authTag;throw new Error("Attempting to get auth tag in unsupported state")},n.prototype.setAuthTag=function(t){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=t},n.prototype.setAAD=function(t){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(t),this._alen+=t.length}}).call(e,r(1).Buffer)},function(t,e,r){var n=r(67);e.encrypt=function(t,e){var r=n(e,t._prev);return t._prev=t._cipher.encryptBlock(r),t._prev},e.decrypt=function(t,e){var r=t._prev;t._prev=e;var i=t._cipher.decryptBlock(e);return n(i,r)}},function(t,e,r){(function(t){function n(e,r,n){var o=r.length,a=i(r,e._cache);return e._cache=e._cache.slice(o),e._prev=t.concat([e._prev,n?r:a]),a}var i=r(67);e.encrypt=function(e,r,i){for(var o,a=new t("");r.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=new t("")),!(e._cache.length<=r.length)){a=t.concat([a,n(e,r,i)]);break}o=e._cache.length,a=t.concat([a,n(e,r.slice(0,o),i)]),r=r.slice(o)}return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(t,e,r){for(var i,o,a,f=-1,s=8,u=0;++f<s;)i=t._cipher.encryptBlock(t._prev),o=e&1<<7-f?128:0,a=i[0]^o,u+=(128&a)>>f%8,t._prev=n(t._prev,r?o:a);return u}function n(e,r){var n=e.length,i=-1,o=new t(e.length);for(e=t.concat([e,new t([r])]);++i<n;)o[i]=e[i]<<1|e[i+1]>>7;return o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(e,r,n){var i=e._cipher.encryptBlock(e._prev),o=i[0]^r;return e._prev=t.concat([e._prev.slice(1),new t([n?r:o])]),o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e){e.encrypt=function(t,e){return t._cipher.encryptBlock(e)},e.decrypt=function(t,e){return t._cipher.decryptBlock(e)}},function(t,e,r){(function(t){function n(t){return t._prev=t._cipher.encryptBlock(t._prev),t._prev}var i=r(67);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,n(e)]);var o=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),i(r,o)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r,a,f){return this instanceof n?(o.call(this),this._cipher=new i.AES(r),this._prev=new e(a.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,a.copy(this._prev),void(this._mode=t)):new n(t,r,a)}var i=r(94),o=r(97),a=r(2);a(n,o),t.exports=n,n.prototype._update=function(t){return this._mode.encrypt(this,t,this._decrypt)},n.prototype._final=function(){this._cipher.scrub()}}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(t){e["RSA-SHA224"]=e.sha224WithRSAEncryption={sign:"rsa",hash:"sha224",id:new t("302d300d06096086480165030402040500041c","hex")},e["RSA-SHA256"]=e.sha256WithRSAEncryption={sign:"rsa",hash:"sha256",id:new t("3031300d060960864801650304020105000420","hex")},e["RSA-SHA384"]=e.sha384WithRSAEncryption={sign:"rsa",hash:"sha384",id:new t("3041300d060960864801650304020205000430","hex")},e["RSA-SHA512"]=e.sha512WithRSAEncryption={sign:"rsa",hash:"sha512",id:new t("3051300d060960864801650304020305000440","hex")},e["RSA-SHA1"]={sign:"rsa",hash:"sha1",id:new t("3021300906052b0e03021a05000414","hex")},e["ecdsa-with-SHA1"]={sign:"ecdsa",hash:"sha1",id:new t("","hex")},e.DSA=e["DSA-SHA1"]=e["DSA-SHA"]={sign:"dsa",hash:"sha1",id:new t("","hex")},e["DSA-SHA224"]=e["DSA-WITH-SHA224"]={sign:"dsa",hash:"sha224",id:new t("","hex")},e["DSA-SHA256"]=e["DSA-WITH-SHA256"]={sign:"dsa",hash:"sha256",id:new t("","hex")},e["DSA-SHA384"]=e["DSA-WITH-SHA384"]={sign:"dsa",hash:"sha384",id:new t("","hex")},e["DSA-SHA512"]=e["DSA-WITH-SHA512"]={sign:"dsa",hash:"sha512",id:new t("","hex")},e["DSA-RIPEMD160"]={sign:"dsa",hash:"rmd160",id:new t("","hex")},e["RSA-RIPEMD160"]=e.ripemd160WithRSA={sign:"rsa",hash:"rmd160",id:new t("3021300906052b2403020105000414","hex")},e["RSA-MD5"]=e.md5WithRSAEncryption={sign:"rsa",hash:"md5",id:new t("3020300c06082a864886f70d020505000410","hex")}}).call(e,r(1).Buffer)},function(t,e){"use strict";e["1.3.132.0.10"]="secp256k1",e["1.3.132.0.33"]="p224",e["1.2.840.10045.3.1.1"]="p192",e["1.2.840.10045.3.1.7"]="p256",e["1.3.132.0.34"]="p384",e["1.3.132.0.35"]="p521"},function(t,e,r){(function(e){function n(t){var r;"object"!=typeof t||e.isBuffer(t)||(r=t.passphrase,t=t.key),"string"==typeof t&&(t=new e(t));var n,a,s=f(t,r),u=s.tag,h=s.data;switch(u){case"PUBLIC KEY":switch(a=o.PublicKey.decode(h,"der"),n=a.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return o.RSAPublicKey.decode(a.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return a.subjectPrivateKey=a.subjectPublicKey,{type:"ec",data:a};case"1.2.840.10040.4.1":return a.algorithm.params.pub_key=o.DSAparam.decode(a.subjectPublicKey.data,"der"),{type:"dsa",data:a.algorithm.params};default:throw new Error("unknown key id "+n)}throw new Error("unknown key type "+u);case"ENCRYPTED PRIVATE KEY":h=o.EncryptedPrivateKey.decode(h,"der"),h=i(h,r);case"PRIVATE KEY":switch(a=o.PrivateKey.decode(h,"der"),n=a.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return o.RSAPrivateKey.decode(a.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:a.algorithm.curve,privateKey:o.ECPrivateKey.decode(a.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return a.algorithm.params.priv_key=o.DSAparam.decode(a.subjectPrivateKey,"der"),{type:"dsa",params:a.algorithm.params};default:throw new Error("unknown key id "+n)}throw new Error("unknown key type "+u);case"RSA PUBLIC KEY":return o.RSAPublicKey.decode(h,"der");case"RSA PRIVATE KEY":return o.RSAPrivateKey.decode(h,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:o.DSAPrivateKey.decode(h,"der")};case"EC PRIVATE KEY":return h=o.ECPrivateKey.decode(h,"der"),{curve:h.parameters.value,privateKey:h.privateKey};default:throw new Error("unknown key type "+u)}}function i(t,r){var n=t.algorithm.decrypt.kde.kdeparams.salt,i=parseInt(t.algorithm.decrypt.kde.kdeparams.iters.toString(),10),o=a[t.algorithm.decrypt.cipher.algo.join(".")],f=t.algorithm.decrypt.cipher.iv,h=t.subjectPrivateKey,c=parseInt(o.split("-")[1],10)/8,d=u.pbkdf2Sync(r,n,i,c),l=s.createDecipheriv(o,d,f),p=[];return p.push(l.update(h)),p.push(l.final()),e.concat(p)}var o=r(528),a=r(466),f=r(529),s=r(219),u=r(151);t.exports=n,n.signature=o.signature}).call(e,r(1).Buffer)},function(t,e,r){function n(t,e){return a.call(this,e),f.isBuffer(t)?(this.base=t,this.offset=0,void(this.length=t.length)):void this.error("Input not Buffer")}function i(t,e){if(Array.isArray(t))this.length=0,this.value=t.map(function(t){return t instanceof i||(t=new i(t,e)),this.length+=t.length,t},this);else if("number"==typeof t){if(!(0<=t&&t<=255))return e.error("non-byte EncoderBuffer value");this.value=t,this.length=1}else if("string"==typeof t)this.value=t,this.length=f.byteLength(t);else{if(!f.isBuffer(t))return e.error("Unsupported type: "+typeof t);this.value=t,this.length=t.length}}var o=r(2),a=r(68).Reporter,f=r(1).Buffer;o(n,a),e.DecoderBuffer=n,n.prototype.save=function(){return{offset:this.offset,reporter:a.prototype.save.call(this)}},n.prototype.restore=function(t){var e=new n(this.base);return e.offset=t.offset,e.length=this.offset,this.offset=t.offset,a.prototype.restore.call(this,t.reporter),e},n.prototype.isEmpty=function(){return this.offset===this.length},n.prototype.readUInt8=function(t){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(t||"DecoderBuffer overrun")},n.prototype.skip=function(t,e){if(!(this.offset+t<=this.length))return this.error(e||"DecoderBuffer overrun");var r=new n(this.base);return r._reporterState=this._reporterState,r.offset=this.offset,r.length=this.offset+t,this.offset+=t,r},n.prototype.raw=function(t){return this.base.slice(t?t.offset:this.offset,this.length)},e.EncoderBuffer=i,i.prototype.join=function(t,e){return t||(t=new f(this.length)),e||(e=0),0===this.length?t:(Array.isArray(this.value)?this.value.forEach(function(r){r.join(t,e),e+=r.length}):("number"==typeof this.value?t[e]=this.value:"string"==typeof this.value?t.write(this.value,e):f.isBuffer(this.value)&&this.value.copy(t,e),e+=this.length),t)}},function(t,e,r){var n=e;n._reverse=function(t){var e={};return Object.keys(t).forEach(function(r){(0|r)==r&&(r|=0);var n=t[r];e[n]=r}),e},n.der=r(533)},function(t,e,r){function n(t){this.enc="der",this.name=t.name,this.entity=t,this.tree=new i,this.tree._init(t.body)}function i(t){u.Node.call(this,"der",t)}function o(t,e){var r=t.readUInt8(e);if(t.isError(r))return r;var n=c.tagClass[r>>6],i=0===(32&r);if(31===(31&r)){var o=r;for(r=0;128===(128&o);){if(o=t.readUInt8(e),t.isError(o))return o;r<<=7,r|=127&o}}else r&=31;var a=c.tag[r];return{cls:n,primitive:i,tag:r,tagStr:a}}function a(t,e,r){var n=t.readUInt8(r);if(t.isError(n))return n;if(!e&&128===n)return null;if(0===(128&n))return n;var i=127&n;if(i>=4)return t.error("length octect is too long");n=0;for(var o=0;o<i;o++){n<<=8;var a=t.readUInt8(r);if(t.isError(a))return a;n|=a}return n}var f=r(2),s=r(100),u=s.base,h=s.bignum,c=s.constants.der;t.exports=n,n.prototype.decode=function(t,e){return t instanceof u.DecoderBuffer||(t=new u.DecoderBuffer(t,e)),this.tree._decode(t,e)},f(i,u.Node),i.prototype._peekTag=function(t,e,r){if(t.isEmpty())return!1;var n=t.save(),i=o(t,'Failed to peek tag: "'+e+'"');return t.isError(i)?i:(t.restore(n),i.tag===e||i.tagStr===e||i.tagStr+"of"===e||r)},i.prototype._decodeTag=function(t,e,r){var n=o(t,'Failed to decode tag of "'+e+'"');if(t.isError(n))return n;var i=a(t,n.primitive,'Failed to get length of "'+e+'"');if(t.isError(i))return i;if(!r&&n.tag!==e&&n.tagStr!==e&&n.tagStr+"of"!==e)return t.error('Failed to match tag: "'+e+'"');if(n.primitive||null!==i)return t.skip(i,'Failed to match body of: "'+e+'"');var f=t.save(),s=this._skipUntilEnd(t,'Failed to skip indefinite length body: "'+this.tag+'"');return t.isError(s)?s:(i=t.offset-f.offset,t.restore(f),t.skip(i,'Failed to match body of: "'+e+'"'))},i.prototype._skipUntilEnd=function(t,e){for(;;){var r=o(t,e);if(t.isError(r))return r;var n=a(t,r.primitive,e);if(t.isError(n))return n;var i;if(i=r.primitive||null!==n?t.skip(n):this._skipUntilEnd(t,e),t.isError(i))return i;if("end"===r.tagStr)break}},i.prototype._decodeList=function(t,e,r,n){for(var i=[];!t.isEmpty();){var o=this._peekTag(t,"end");if(t.isError(o))return o;var a=r.decode(t,"der",n);if(t.isError(a)&&o)break;i.push(a)}return i},i.prototype._decodeStr=function(t,e){if("bitstr"===e){var r=t.readUInt8();return t.isError(r)?r:{unused:r,data:t.raw()}}if("bmpstr"===e){var n=t.raw();if(n.length%2===1)return t.error("Decoding of string type: bmpstr length mismatch");for(var i="",o=0;o<n.length/2;o++)i+=String.fromCharCode(n.readUInt16BE(2*o));return i}if("numstr"===e){var a=t.raw().toString("ascii");return this._isNumstr(a)?a:t.error("Decoding of string type: numstr unsupported characters")}if("octstr"===e)return t.raw();if("printstr"===e){var f=t.raw().toString("ascii");return this._isPrintstr(f)?f:t.error("Decoding of string type: printstr unsupported characters")}return/str$/.test(e)?t.raw().toString():t.error("Decoding of string type: "+e+" unsupported")},i.prototype._decodeObjid=function(t,e,r){for(var n,i=[],o=0;!t.isEmpty();){var a=t.readUInt8();o<<=7,o|=127&a,0===(128&a)&&(i.push(o),o=0)}128&a&&i.push(o);var f=i[0]/40|0,s=i[0]%40;if(n=r?i:[f,s].concat(i.slice(1)),e){var u=e[n.join(" ")];void 0===u&&(u=e[n.join(".")]),void 0!==u&&(n=u)}return n},i.prototype._decodeTime=function(t,e){var r=t.raw().toString();if("gentime"===e)var n=0|r.slice(0,4),i=0|r.slice(4,6),o=0|r.slice(6,8),a=0|r.slice(8,10),f=0|r.slice(10,12),s=0|r.slice(12,14);else{if("utctime"!==e)return t.error("Decoding "+e+" time is not supported yet");var n=0|r.slice(0,2),i=0|r.slice(2,4),o=0|r.slice(4,6),a=0|r.slice(6,8),f=0|r.slice(8,10),s=0|r.slice(10,12);n=n<70?2e3+n:1900+n}return Date.UTC(n,i-1,o,a,f,s,0)},i.prototype._decodeNull=function(t){return null},i.prototype._decodeBool=function(t){var e=t.readUInt8();return t.isError(e)?e:0!==e},i.prototype._decodeInt=function(t,e){var r=t.raw(),n=new h(r);return e&&(n=e[n.toString(10)]||n),n},i.prototype._use=function(t,e){return"function"==typeof t&&(t=t(e)),t._getDecoder("der").tree}},function(t,e,r){function n(t){this.enc="der",this.name=t.name,this.entity=t,this.tree=new i,this.tree._init(t.body)}function i(t){h.Node.call(this,"der",t)}function o(t){return t<10?"0"+t:t}function a(t,e,r,n){var i;if("seqof"===t?t="seq":"setof"===t&&(t="set"),c.tagByName.hasOwnProperty(t))i=c.tagByName[t];else{if("number"!=typeof t||(0|t)!==t)return n.error("Unknown tag: "+t);i=t}return i>=31?n.error("Multi-octet tag encoding unsupported"):(e||(i|=32),i|=c.tagClassByName[r||"universal"]<<6)}var f=r(2),s=r(1).Buffer,u=r(100),h=u.base,c=u.constants.der;t.exports=n,n.prototype.encode=function(t,e){return this.tree._encode(t,e).join()},f(i,h.Node),i.prototype._encodeComposite=function(t,e,r,n){var i=a(t,e,r,this.reporter);if(n.length<128){var o=new s(2);return o[0]=i,o[1]=n.length,this._createEncoderBuffer([o,n])}for(var f=1,u=n.length;u>=256;u>>=8)f++;var o=new s(2+f);o[0]=i,o[1]=128|f;for(var u=1+f,h=n.length;h>0;u--,h>>=8)o[u]=255&h;return this._createEncoderBuffer([o,n])},i.prototype._encodeStr=function(t,e){if("bitstr"===e)return this._createEncoderBuffer([0|t.unused,t.data]);if("bmpstr"===e){for(var r=new s(2*t.length),n=0;n<t.length;n++)r.writeUInt16BE(t.charCodeAt(n),2*n);return this._createEncoderBuffer(r)}return"numstr"===e?this._isNumstr(t)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: numstr supports only digits and space"):"printstr"===e?this._isPrintstr(t)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark"):/str$/.test(e)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: "+e+" unsupported")},i.prototype._encodeObjid=function(t,e,r){if("string"==typeof t){if(!e)return this.reporter.error("string objid given, but no values map found");if(!e.hasOwnProperty(t))return this.reporter.error("objid not found in values map");t=e[t].split(/[\s\.]+/g);for(var n=0;n<t.length;n++)t[n]|=0}else if(Array.isArray(t)){t=t.slice();for(var n=0;n<t.length;n++)t[n]|=0}if(!Array.isArray(t))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify(t));if(!r){if(t[1]>=40)return this.reporter.error("Second objid identifier OOB");t.splice(0,2,40*t[0]+t[1])}for(var i=0,n=0;n<t.length;n++){var o=t[n];for(i++;o>=128;o>>=7)i++}for(var a=new s(i),f=a.length-1,n=t.length-1;n>=0;n--){var o=t[n];for(a[f--]=127&o;(o>>=7)>0;)a[f--]=128|127&o}return this._createEncoderBuffer(a)},i.prototype._encodeTime=function(t,e){var r,n=new Date(t);return"gentime"===e?r=[o(n.getFullYear()),o(n.getUTCMonth()+1),o(n.getUTCDate()),o(n.getUTCHours()),o(n.getUTCMinutes()),o(n.getUTCSeconds()),"Z"].join(""):"utctime"===e?r=[o(n.getFullYear()%100),o(n.getUTCMonth()+1),o(n.getUTCDate()),o(n.getUTCHours()),o(n.getUTCMinutes()),o(n.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+e+" time is not supported yet"),this._encodeStr(r,"octstr")},i.prototype._encodeNull=function(){return this._createEncoderBuffer("")},i.prototype._encodeInt=function(t,e){if("string"==typeof t){if(!e)return this.reporter.error("String int or enum given, but no values map");if(!e.hasOwnProperty(t))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(t));t=e[t]}if("number"!=typeof t&&!s.isBuffer(t)){var r=t.toArray();!t.sign&&128&r[0]&&r.unshift(0),t=new s(r)}if(s.isBuffer(t)){var n=t.length;0===t.length&&n++;var i=new s(n);return t.copy(i),0===t.length&&(i[0]=0),this._createEncoderBuffer(i)}if(t<128)return this._createEncoderBuffer(t);if(t<256)return this._createEncoderBuffer([0,t]);for(var n=1,o=t;o>=256;o>>=8)n++;for(var i=new Array(n),o=i.length-1;o>=0;o--)i[o]=255&t,t>>=8;return 128&i[0]&&i.unshift(0),this._createEncoderBuffer(new s(i))},i.prototype._encodeBool=function(t){return this._createEncoderBuffer(t?255:0)},i.prototype._use=function(t,e){return"function"==typeof t&&(t=t(e)),t._getEncoder("der").tree},i.prototype._skipDefault=function(t,e,r){var n,i=this._baseState;if(null===i.default)return!1;var o=t.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i.default,e,r).join()),o.length!==i.defaultBuffer.length)return!1;for(n=0;n<o.length;n++)if(o[n]!==i.defaultBuffer[n])return!1;return!0}},function(t,e,r){(function(e){function n(t,r,i,f){if(!(this instanceof n))return new n(t,r,i);a.call(this),this._finID=e.concat([i,new e([0,0,0,1])]),i=e.concat([i,new e([0,0,0,2])]),this._cipher=new o.AES(r),this._prev=new e(i.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,this._alen=0,this._len=0,i.copy(this._prev),this._mode=t;var u=new e(4);u.fill(0),this._ghash=new s(this._cipher.encryptBlock(u)),this._authTag=null,this._called=!1}function i(t,e){var r=0;t.length!==e.length&&r++;for(var n=Math.min(t.length,e.length),i=-1;++i<n;)r+=t[i]^e[i];return r}var o=r(101),a=r(103),f=r(2),s=r(541),u=r(69);f(n,a),t.exports=n,n.prototype._update=function(t){if(!this._called&&this._alen){var r=16-this._alen%16;r<16&&(r=new e(r),r.fill(0),this._ghash.update(r))}this._called=!0;var n=this._mode.encrypt(this,t);return this._decrypt?this._ghash.update(t):this._ghash.update(n),this._len+=t.length,n},n.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var t=u(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt){if(i(t,this._authTag))throw new Error("Unsupported state or unable to authenticate data")}else this._authTag=t;this._cipher.scrub()},n.prototype.getAuthTag=function(){if(!this._decrypt&&e.isBuffer(this._authTag))return this._authTag;throw new Error("Attempting to get auth tag in unsupported state")},n.prototype.setAuthTag=function(t){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=t},n.prototype.setAAD=function(t){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(t),this._alen+=t.length}}).call(e,r(1).Buffer)},function(t,e,r){function n(){return Object.keys(a)}var i=r(540);e.createCipher=e.Cipher=i.createCipher,e.createCipheriv=e.Cipheriv=i.createCipheriv;var o=r(539);e.createDecipher=e.Decipher=o.createDecipher,e.createDecipheriv=e.Decipheriv=o.createDecipheriv;var a=r(147);e.listCiphers=e.getCiphers=n},function(t,e,r){var n=r(69);e.encrypt=function(t,e){var r=n(e,t._prev);return t._prev=t._cipher.encryptBlock(r),t._prev},e.decrypt=function(t,e){var r=t._prev;t._prev=e;var i=t._cipher.decryptBlock(e);return n(i,r)}},function(t,e,r){(function(t){function n(e,r,n){var o=r.length,a=i(r,e._cache);return e._cache=e._cache.slice(o),e._prev=t.concat([e._prev,n?r:a]),a}var i=r(69);e.encrypt=function(e,r,i){for(var o,a=new t("");r.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=new t("")),!(e._cache.length<=r.length)){a=t.concat([a,n(e,r,i)]);break}o=e._cache.length,a=t.concat([a,n(e,r.slice(0,o),i)]),r=r.slice(o)}return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(t,e,r){for(var i,o,a,f=-1,s=8,u=0;++f<s;)i=t._cipher.encryptBlock(t._prev),o=e&1<<7-f?128:0,a=i[0]^o,u+=(128&a)>>f%8,t._prev=n(t._prev,r?o:a);return u}function n(e,r){var n=e.length,i=-1,o=new t(e.length);for(e=t.concat([e,new t([r])]);++i<n;)o[i]=e[i]<<1|e[i+1]>>7;return o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(e,r,n){var i=e._cipher.encryptBlock(e._prev),o=i[0]^r;return e._prev=t.concat([e._prev.slice(1),new t([n?r:o])]),o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e){e.encrypt=function(t,e){return t._cipher.encryptBlock(e)},e.decrypt=function(t,e){return t._cipher.decryptBlock(e)}},function(t,e,r){(function(t){function n(t){return t._prev=t._cipher.encryptBlock(t._prev),t._prev}var i=r(69);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,n(e)]);var o=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),i(r,o)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r,a,f){return this instanceof n?(o.call(this),this._cipher=new i.AES(r),this._prev=new e(a.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,a.copy(this._prev),void(this._mode=t)):new n(t,r,a)}var i=r(101),o=r(103),a=r(2);a(n,o),t.exports=n,n.prototype._update=function(t){return this._mode.encrypt(this,t,this._decrypt)},n.prototype._final=function(){this._cipher.scrub()}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(){this.init(),this._w=l,c.call(this,64,56)}function i(t,e,r){return r^t&(e^r)}function o(t,e,r){return t&e|r&(t|e)}function a(t){return(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10)}function f(t){return(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7)}function s(t){return(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3}function u(t){return(t>>>17|t<<15)^(t>>>19|t<<13)^t>>>10}var h=r(2),c=r(60),d=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],l=new Array(64);h(n,c),n.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},n.prototype._update=function(t){for(var e=this._w,r=0|this._a,n=0|this._b,h=0|this._c,c=0|this._d,l=0|this._e,p=0|this._f,b=0|this._g,v=0|this._h,y=0;y<16;++y)e[y]=t.readInt32BE(4*y);for(;y<64;++y)e[y]=u(e[y-2])+e[y-7]+s(e[y-15])+e[y-16]|0;for(var m=0;m<64;++m){var g=v+f(l)+i(l,p,b)+d[m]+e[m]|0,w=a(r)+o(r,n,h)|0;v=b,b=p,p=l,l=c+g|0,c=h,h=n,n=r,r=g+w|0}this._a=r+this._a|0,this._b=n+this._b|0,this._c=h+this._c|0,this._d=c+this._d|0,this._e=l+this._e|0,this._f=p+this._f|0,this._g=b+this._g|0,this._h=v+this._h|0},n.prototype._hash=function(){var t=new e(32);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t.writeInt32BE(this._h,28),t},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(){this.init(),this._w=v,p.call(this,128,112)}function i(t,e,r){return r^t&(e^r)}function o(t,e,r){return t&e|r&(t|e)}function a(t,e){return(t>>>28|e<<4)^(e>>>2|t<<30)^(e>>>7|t<<25)}function f(t,e){return(t>>>14|e<<18)^(t>>>18|e<<14)^(e>>>9|t<<23)}function s(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^t>>>7}function u(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^(t>>>7|e<<25)}function h(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^t>>>6}function c(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^(t>>>6|e<<26)}function d(t,e){return t>>>0<e>>>0?1:0}var l=r(2),p=r(60),b=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],v=new Array(160);l(n,p),n.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},n.prototype._update=function(t){for(var e=this._w,r=0|this._ah,n=0|this._bh,l=0|this._ch,p=0|this._dh,v=0|this._eh,y=0|this._fh,m=0|this._gh,g=0|this._hh,w=0|this._al,_=0|this._bl,M=0|this._cl,S=0|this._dl,E=0|this._el,A=0|this._fl,k=0|this._gl,x=0|this._hl,I=0;I<32;I+=2)e[I]=t.readInt32BE(4*I),e[I+1]=t.readInt32BE(4*I+4);for(;I<160;I+=2){var B=e[I-30],O=e[I-30+1],R=s(B,O),P=u(O,B);
|
||
B=e[I-4],O=e[I-4+1];var T=h(B,O),j=c(O,B),C=e[I-14],N=e[I-14+1],L=e[I-32],U=e[I-32+1],z=P+N|0,D=R+C+d(z,P)|0;z=z+j|0,D=D+T+d(z,j)|0,z=z+U|0,D=D+L+d(z,U)|0,e[I]=D,e[I+1]=z}for(var q=0;q<160;q+=2){D=e[q],z=e[q+1];var F=o(r,n,l),K=o(w,_,M),G=a(r,w),V=a(w,r),H=f(v,E),X=f(E,v),Y=b[q],W=b[q+1],Z=i(v,y,m),J=i(E,A,k),$=x+X|0,Q=g+H+d($,x)|0;$=$+J|0,Q=Q+Z+d($,J)|0,$=$+W|0,Q=Q+Y+d($,W)|0,$=$+z|0,Q=Q+D+d($,z)|0;var tt=V+K|0,et=G+F+d(tt,V)|0;g=m,x=k,m=y,k=A,y=v,A=E,E=S+$|0,v=p+Q+d(E,S)|0,p=l,S=M,l=n,M=_,n=r,_=w,w=$+tt|0,r=Q+et+d(w,$)|0}this._al=this._al+w|0,this._bl=this._bl+_|0,this._cl=this._cl+M|0,this._dl=this._dl+S|0,this._el=this._el+E|0,this._fl=this._fl+A|0,this._gl=this._gl+k|0,this._hl=this._hl+x|0,this._ah=this._ah+r+d(this._al,w)|0,this._bh=this._bh+n+d(this._bl,_)|0,this._ch=this._ch+l+d(this._cl,M)|0,this._dh=this._dh+p+d(this._dl,S)|0,this._eh=this._eh+v+d(this._el,E)|0,this._fh=this._fh+y+d(this._fl,A)|0,this._gh=this._gh+m+d(this._gl,k)|0,this._hh=this._hh+g+d(this._hl,x)|0},n.prototype._hash=function(){function t(t,e,n){r.writeInt32BE(t,n),r.writeInt32BE(e,n+4)}var r=new e(64);return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),r},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){function n(){if(null!==g)return g;var t=1048576,e=[];e[0]=2;for(var r=1,n=3;n<t;n+=2){for(var i=Math.ceil(Math.sqrt(n)),o=0;o<r&&e[o]<=i&&n%e[o]!==0;o++);r!==o&&e[o]<=i||(e[r++]=n)}return g=e,e}function i(t){for(var e=n(),r=0;r<e.length;r++)if(0===t.modn(e[r]))return 0===t.cmpn(e[r]);return!0}function o(t){var e=s.mont(t);return 0===l.toRed(e).redPow(t.subn(1)).fromRed().cmpn(1)}function a(t,e){if(t<16)return new s(2===e||5===e?[140,123]:[140,39]);e=new s(e);for(var r,n;;){for(r=new s(f(Math.ceil(t/8)));r.bitLength()>t;)r.ishrn(1);if(r.isEven()&&r.iadd(d),r.testn(1)||r.iadd(l),e.cmp(l)){if(!e.cmp(p))for(;r.mod(b).cmp(v);)r.iadd(m)}else for(;r.mod(u).cmp(y);)r.iadd(m);if(n=r.shrn(1),i(n)&&i(r)&&o(n)&&o(r)&&c.test(n)&&c.test(r))return r}}var f=r(61);t.exports=a,a.simpleSieve=i,a.fermatTest=o;var s=r(150),u=new s(24),h=r(230),c=new h,d=new s(1),l=new s(2),p=new s(5),b=(new s(16),new s(8),new s(10)),v=new s(3),y=(new s(7),new s(11)),m=new s(4),g=(new s(12),null)},function(t,e,r){function n(t){this.rand=t||new o.Rand}var i=r(150),o=r(575);t.exports=n,n.create=function(t){return new n(t)},n.prototype._rand=function(t){var e=t.bitLength(),r=this.rand.generate(Math.ceil(e/8));r[0]|=3;var n=7&e;return 0!==n&&(r[r.length-1]>>=7-n),new i(r)},n.prototype.test=function(t,e,r){var n=t.bitLength(),o=i.mont(t),a=new i(1).toRed(o);e||(e=Math.max(1,n/48|0));for(var f=t.subn(1),s=f.subn(1),u=0;!f.testn(u);u++);for(var h=t.shrn(u),c=f.toRed(o),d=!0;e>0;e--){var l=this._rand(s);r&&r(l);var p=l.toRed(o).redPow(h);if(0!==p.cmp(a)&&0!==p.cmp(c)){for(var b=1;b<u;b++){if(p=p.redSqr(),0===p.cmp(a))return!1;if(0===p.cmp(c))break}if(b===u)return!1}}return d},n.prototype.getDivisor=function(t,e){var r=t.bitLength(),n=i.mont(t),o=new i(1).toRed(n);e||(e=Math.max(1,r/48|0));for(var a=t.subn(1),f=a.subn(1),s=0;!a.testn(s);s++);for(var u=t.shrn(s),h=a.toRed(n);e>0;e--){var c=this._rand(f),d=t.gcd(c);if(0!==d.cmpn(1))return d;var l=c.toRed(n).redPow(u);if(0!==l.cmp(o)&&0!==l.cmp(h)){for(var p=1;p<s;p++){if(l=l.redSqr(),0===l.cmp(o))return l.fromRed().subn(1).gcd(t);if(0===l.cmp(h))break}if(p===s)return l=l.redSqr(),l.fromRed().subn(1).gcd(t)}}return!1}},function(t,e,r){(function(e){function n(t){var r=new e(4);return r.writeUInt32BE(t,0),r}var i=r(59);t.exports=function(t,r){for(var o,a=new e(""),f=0;a.length<r;)o=n(f++),a=e.concat([a,i("sha1").update(t).update(o).digest()]);return a.slice(0,r)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){var e=o(t),r=e.toRed(a.mont(t.modulus)).redPow(new a(t.publicExponent)).fromRed();return{blinder:r,unblinder:e.invm(t.modulus)}}function i(t,r){var i=n(r),o=r.modulus.byteLength(),f=(a.mont(r.modulus),new a(t).mul(i.blinder).umod(r.modulus)),s=f.toRed(a.mont(r.prime1)),u=f.toRed(a.mont(r.prime2)),h=r.coefficient,c=r.prime1,d=r.prime2,l=s.redPow(r.exponent1),p=u.redPow(r.exponent2);l=l.fromRed(),p=p.fromRed();var b=l.isub(p).imul(h).umod(c);return b.imul(d),p.iadd(b),new e(p.imul(i.unblinder).umod(r.modulus).toArray(!1,o))}function o(t){for(var e=t.modulus.byteLength(),r=new a(f(e));r.cmp(t.modulus)>=0||!r.umod(t.prime1)||!r.umod(t.prime2);)r=new a(f(e));return r}var a=r(70),f=r(61);t.exports=i,i.getr=o}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){var r;"object"!=typeof t||e.isBuffer(t)||(r=t.passphrase,t=t.key),"string"==typeof t&&(t=new e(t));var n,a,s=f(t,r),u=s.tag,h=s.data;switch(u){case"PUBLIC KEY":switch(a=o.PublicKey.decode(h,"der"),n=a.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return o.RSAPublicKey.decode(a.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return a.subjectPrivateKey=a.subjectPublicKey,{type:"ec",data:a};case"1.2.840.10040.4.1":return a.algorithm.params.pub_key=o.DSAparam.decode(a.subjectPublicKey.data,"der"),{type:"dsa",data:a.algorithm.params};default:throw new Error("unknown key id "+n)}throw new Error("unknown key type "+u);case"ENCRYPTED PRIVATE KEY":h=o.EncryptedPrivateKey.decode(h,"der"),h=i(h,r);case"PRIVATE KEY":switch(a=o.PrivateKey.decode(h,"der"),n=a.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return o.RSAPrivateKey.decode(a.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:a.algorithm.curve,privateKey:o.ECPrivateKey.decode(a.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return a.algorithm.params.priv_key=o.DSAparam.decode(a.subjectPrivateKey,"der"),{type:"dsa",params:a.algorithm.params};default:throw new Error("unknown key id "+n)}throw new Error("unknown key type "+u);case"RSA PUBLIC KEY":return o.RSAPublicKey.decode(h,"der");case"RSA PRIVATE KEY":return o.RSAPrivateKey.decode(h,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:o.DSAPrivateKey.decode(h,"der")};case"EC PRIVATE KEY":return h=o.ECPrivateKey.decode(h,"der"),{curve:h.parameters.value,privateKey:h.privateKey};default:throw new Error("unknown key type "+u)}}function i(t,r){var n=t.algorithm.decrypt.kde.kdeparams.salt,i=parseInt(t.algorithm.decrypt.kde.kdeparams.iters.toString(),10),o=a[t.algorithm.decrypt.cipher.algo.join(".")],f=t.algorithm.decrypt.cipher.iv,h=t.subjectPrivateKey,c=parseInt(o.split("-")[1],10)/8,d=u.pbkdf2Sync(r,n,i,c),l=s.createDecipheriv(o,d,f),p=[];return p.push(l.update(h)),p.push(l.final()),e.concat(p)}var o=r(578),a=r(469),f=r(579),s=r(239),u=r(151);t.exports=n,n.signature=o.signature}).call(e,r(1).Buffer)},function(t,e,r){function n(t,e){return a.call(this,e),f.isBuffer(t)?(this.base=t,this.offset=0,void(this.length=t.length)):void this.error("Input not Buffer")}function i(t,e){if(Array.isArray(t))this.length=0,this.value=t.map(function(t){return t instanceof i||(t=new i(t,e)),this.length+=t.length,t},this);else if("number"==typeof t){if(!(0<=t&&t<=255))return e.error("non-byte EncoderBuffer value");this.value=t,this.length=1}else if("string"==typeof t)this.value=t,this.length=f.byteLength(t);else{if(!f.isBuffer(t))return e.error("Unsupported type: "+typeof t);this.value=t,this.length=t.length}}var o=r(2),a=r(71).Reporter,f=r(1).Buffer;o(n,a),e.DecoderBuffer=n,n.prototype.save=function(){return{offset:this.offset,reporter:a.prototype.save.call(this)}},n.prototype.restore=function(t){var e=new n(this.base);return e.offset=t.offset,e.length=this.offset,this.offset=t.offset,a.prototype.restore.call(this,t.reporter),e},n.prototype.isEmpty=function(){return this.offset===this.length},n.prototype.readUInt8=function(t){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(t||"DecoderBuffer overrun")},n.prototype.skip=function(t,e){if(!(this.offset+t<=this.length))return this.error(e||"DecoderBuffer overrun");var r=new n(this.base);return r._reporterState=this._reporterState,r.offset=this.offset,r.length=this.offset+t,this.offset+=t,r},n.prototype.raw=function(t){return this.base.slice(t?t.offset:this.offset,this.length)},e.EncoderBuffer=i,i.prototype.join=function(t,e){return t||(t=new f(this.length)),e||(e=0),0===this.length?t:(Array.isArray(this.value)?this.value.forEach(function(r){r.join(t,e),e+=r.length}):("number"==typeof this.value?t[e]=this.value:"string"==typeof this.value?t.write(this.value,e):f.isBuffer(this.value)&&this.value.copy(t,e),e+=this.length),t)}},function(t,e,r){var n=e;n._reverse=function(t){var e={};return Object.keys(t).forEach(function(r){(0|r)==r&&(r|=0);var n=t[r];e[n]=r}),e},n.der=r(583)},function(t,e,r){function n(t){this.enc="der",this.name=t.name,this.entity=t,this.tree=new i,this.tree._init(t.body)}function i(t){u.Node.call(this,"der",t)}function o(t,e){var r=t.readUInt8(e);if(t.isError(r))return r;var n=c.tagClass[r>>6],i=0===(32&r);if(31===(31&r)){var o=r;for(r=0;128===(128&o);){if(o=t.readUInt8(e),t.isError(o))return o;r<<=7,r|=127&o}}else r&=31;var a=c.tag[r];return{cls:n,primitive:i,tag:r,tagStr:a}}function a(t,e,r){var n=t.readUInt8(r);if(t.isError(n))return n;if(!e&&128===n)return null;if(0===(128&n))return n;var i=127&n;if(i>=4)return t.error("length octect is too long");n=0;for(var o=0;o<i;o++){n<<=8;var a=t.readUInt8(r);if(t.isError(a))return a;n|=a}return n}var f=r(2),s=r(106),u=s.base,h=s.bignum,c=s.constants.der;t.exports=n,n.prototype.decode=function(t,e){return t instanceof u.DecoderBuffer||(t=new u.DecoderBuffer(t,e)),this.tree._decode(t,e)},f(i,u.Node),i.prototype._peekTag=function(t,e,r){if(t.isEmpty())return!1;var n=t.save(),i=o(t,'Failed to peek tag: "'+e+'"');return t.isError(i)?i:(t.restore(n),i.tag===e||i.tagStr===e||i.tagStr+"of"===e||r)},i.prototype._decodeTag=function(t,e,r){var n=o(t,'Failed to decode tag of "'+e+'"');if(t.isError(n))return n;var i=a(t,n.primitive,'Failed to get length of "'+e+'"');if(t.isError(i))return i;if(!r&&n.tag!==e&&n.tagStr!==e&&n.tagStr+"of"!==e)return t.error('Failed to match tag: "'+e+'"');if(n.primitive||null!==i)return t.skip(i,'Failed to match body of: "'+e+'"');var f=t.save(),s=this._skipUntilEnd(t,'Failed to skip indefinite length body: "'+this.tag+'"');return t.isError(s)?s:(i=t.offset-f.offset,t.restore(f),t.skip(i,'Failed to match body of: "'+e+'"'))},i.prototype._skipUntilEnd=function(t,e){for(;;){var r=o(t,e);if(t.isError(r))return r;var n=a(t,r.primitive,e);if(t.isError(n))return n;var i;if(i=r.primitive||null!==n?t.skip(n):this._skipUntilEnd(t,e),t.isError(i))return i;if("end"===r.tagStr)break}},i.prototype._decodeList=function(t,e,r,n){for(var i=[];!t.isEmpty();){var o=this._peekTag(t,"end");if(t.isError(o))return o;var a=r.decode(t,"der",n);if(t.isError(a)&&o)break;i.push(a)}return i},i.prototype._decodeStr=function(t,e){if("bitstr"===e){var r=t.readUInt8();return t.isError(r)?r:{unused:r,data:t.raw()}}if("bmpstr"===e){var n=t.raw();if(n.length%2===1)return t.error("Decoding of string type: bmpstr length mismatch");for(var i="",o=0;o<n.length/2;o++)i+=String.fromCharCode(n.readUInt16BE(2*o));return i}if("numstr"===e){var a=t.raw().toString("ascii");return this._isNumstr(a)?a:t.error("Decoding of string type: numstr unsupported characters")}if("octstr"===e)return t.raw();if("printstr"===e){var f=t.raw().toString("ascii");return this._isPrintstr(f)?f:t.error("Decoding of string type: printstr unsupported characters")}return/str$/.test(e)?t.raw().toString():t.error("Decoding of string type: "+e+" unsupported")},i.prototype._decodeObjid=function(t,e,r){for(var n,i=[],o=0;!t.isEmpty();){var a=t.readUInt8();o<<=7,o|=127&a,0===(128&a)&&(i.push(o),o=0)}128&a&&i.push(o);var f=i[0]/40|0,s=i[0]%40;if(n=r?i:[f,s].concat(i.slice(1)),e){var u=e[n.join(" ")];void 0===u&&(u=e[n.join(".")]),void 0!==u&&(n=u)}return n},i.prototype._decodeTime=function(t,e){var r=t.raw().toString();if("gentime"===e)var n=0|r.slice(0,4),i=0|r.slice(4,6),o=0|r.slice(6,8),a=0|r.slice(8,10),f=0|r.slice(10,12),s=0|r.slice(12,14);else{if("utctime"!==e)return t.error("Decoding "+e+" time is not supported yet");var n=0|r.slice(0,2),i=0|r.slice(2,4),o=0|r.slice(4,6),a=0|r.slice(6,8),f=0|r.slice(8,10),s=0|r.slice(10,12);n=n<70?2e3+n:1900+n}return Date.UTC(n,i-1,o,a,f,s,0)},i.prototype._decodeNull=function(t){return null},i.prototype._decodeBool=function(t){var e=t.readUInt8();return t.isError(e)?e:0!==e},i.prototype._decodeInt=function(t,e){var r=t.raw(),n=new h(r);return e&&(n=e[n.toString(10)]||n),n},i.prototype._use=function(t,e){return"function"==typeof t&&(t=t(e)),t._getDecoder("der").tree}},function(t,e,r){function n(t){this.enc="der",this.name=t.name,this.entity=t,this.tree=new i,this.tree._init(t.body)}function i(t){h.Node.call(this,"der",t)}function o(t){return t<10?"0"+t:t}function a(t,e,r,n){var i;if("seqof"===t?t="seq":"setof"===t&&(t="set"),c.tagByName.hasOwnProperty(t))i=c.tagByName[t];else{if("number"!=typeof t||(0|t)!==t)return n.error("Unknown tag: "+t);i=t}return i>=31?n.error("Multi-octet tag encoding unsupported"):(e||(i|=32),i|=c.tagClassByName[r||"universal"]<<6)}var f=r(2),s=r(1).Buffer,u=r(106),h=u.base,c=u.constants.der;t.exports=n,n.prototype.encode=function(t,e){return this.tree._encode(t,e).join()},f(i,h.Node),i.prototype._encodeComposite=function(t,e,r,n){var i=a(t,e,r,this.reporter);if(n.length<128){var o=new s(2);return o[0]=i,o[1]=n.length,this._createEncoderBuffer([o,n])}for(var f=1,u=n.length;u>=256;u>>=8)f++;var o=new s(2+f);o[0]=i,o[1]=128|f;for(var u=1+f,h=n.length;h>0;u--,h>>=8)o[u]=255&h;return this._createEncoderBuffer([o,n])},i.prototype._encodeStr=function(t,e){if("bitstr"===e)return this._createEncoderBuffer([0|t.unused,t.data]);if("bmpstr"===e){for(var r=new s(2*t.length),n=0;n<t.length;n++)r.writeUInt16BE(t.charCodeAt(n),2*n);return this._createEncoderBuffer(r)}return"numstr"===e?this._isNumstr(t)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: numstr supports only digits and space"):"printstr"===e?this._isPrintstr(t)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark"):/str$/.test(e)?this._createEncoderBuffer(t):this.reporter.error("Encoding of string type: "+e+" unsupported")},i.prototype._encodeObjid=function(t,e,r){if("string"==typeof t){if(!e)return this.reporter.error("string objid given, but no values map found");if(!e.hasOwnProperty(t))return this.reporter.error("objid not found in values map");t=e[t].split(/[\s\.]+/g);for(var n=0;n<t.length;n++)t[n]|=0}else if(Array.isArray(t)){t=t.slice();for(var n=0;n<t.length;n++)t[n]|=0}if(!Array.isArray(t))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify(t));if(!r){if(t[1]>=40)return this.reporter.error("Second objid identifier OOB");t.splice(0,2,40*t[0]+t[1])}for(var i=0,n=0;n<t.length;n++){var o=t[n];for(i++;o>=128;o>>=7)i++}for(var a=new s(i),f=a.length-1,n=t.length-1;n>=0;n--){var o=t[n];for(a[f--]=127&o;(o>>=7)>0;)a[f--]=128|127&o}return this._createEncoderBuffer(a)},i.prototype._encodeTime=function(t,e){var r,n=new Date(t);return"gentime"===e?r=[o(n.getFullYear()),o(n.getUTCMonth()+1),o(n.getUTCDate()),o(n.getUTCHours()),o(n.getUTCMinutes()),o(n.getUTCSeconds()),"Z"].join(""):"utctime"===e?r=[o(n.getFullYear()%100),o(n.getUTCMonth()+1),o(n.getUTCDate()),o(n.getUTCHours()),o(n.getUTCMinutes()),o(n.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+e+" time is not supported yet"),this._encodeStr(r,"octstr")},i.prototype._encodeNull=function(){return this._createEncoderBuffer("")},i.prototype._encodeInt=function(t,e){if("string"==typeof t){if(!e)return this.reporter.error("String int or enum given, but no values map");if(!e.hasOwnProperty(t))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(t));t=e[t]}if("number"!=typeof t&&!s.isBuffer(t)){var r=t.toArray();!t.sign&&128&r[0]&&r.unshift(0),t=new s(r)}if(s.isBuffer(t)){var n=t.length;0===t.length&&n++;var i=new s(n);return t.copy(i),0===t.length&&(i[0]=0),this._createEncoderBuffer(i)}if(t<128)return this._createEncoderBuffer(t);if(t<256)return this._createEncoderBuffer([0,t]);for(var n=1,o=t;o>=256;o>>=8)n++;for(var i=new Array(n),o=i.length-1;o>=0;o--)i[o]=255&t,t>>=8;return 128&i[0]&&i.unshift(0),this._createEncoderBuffer(new s(i))},i.prototype._encodeBool=function(t){return this._createEncoderBuffer(t?255:0)},i.prototype._use=function(t,e){return"function"==typeof t&&(t=t(e)),t._getEncoder("der").tree},i.prototype._skipDefault=function(t,e,r){var n,i=this._baseState;if(null===i.default)return!1;var o=t.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i.default,e,r).join()),o.length!==i.defaultBuffer.length)return!1;for(n=0;n<o.length;n++)if(o[n]!==i.defaultBuffer[n])return!1;return!0}},function(t,e,r){(function(e){function n(t,r,i,f){if(!(this instanceof n))return new n(t,r,i);a.call(this),this._finID=e.concat([i,new e([0,0,0,1])]),i=e.concat([i,new e([0,0,0,2])]),this._cipher=new o.AES(r),this._prev=new e(i.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,this._alen=0,this._len=0,i.copy(this._prev),this._mode=t;var u=new e(4);u.fill(0),this._ghash=new s(this._cipher.encryptBlock(u)),this._authTag=null,this._called=!1}function i(t,e){var r=0;t.length!==e.length&&r++;for(var n=Math.min(t.length,e.length),i=-1;++i<n;)r+=t[i]^e[i];return r}var o=r(107),a=r(109),f=r(2),s=r(591),u=r(72);f(n,a),t.exports=n,n.prototype._update=function(t){if(!this._called&&this._alen){var r=16-this._alen%16;r<16&&(r=new e(r),r.fill(0),this._ghash.update(r))}this._called=!0;var n=this._mode.encrypt(this,t);return this._decrypt?this._ghash.update(t):this._ghash.update(n),this._len+=t.length,n},n.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var t=u(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt){if(i(t,this._authTag))throw new Error("Unsupported state or unable to authenticate data")}else this._authTag=t;this._cipher.scrub()},n.prototype.getAuthTag=function(){if(!this._decrypt&&e.isBuffer(this._authTag))return this._authTag;throw new Error("Attempting to get auth tag in unsupported state")},n.prototype.setAuthTag=function(t){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=t},n.prototype.setAAD=function(t){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(t),this._alen+=t.length}}).call(e,r(1).Buffer)},function(t,e,r){function n(){return Object.keys(a)}var i=r(590);e.createCipher=e.Cipher=i.createCipher,e.createCipheriv=e.Cipheriv=i.createCipheriv;var o=r(589);e.createDecipher=e.Decipher=o.createDecipher,e.createDecipheriv=e.Decipheriv=o.createDecipheriv;var a=r(152);e.listCiphers=e.getCiphers=n},function(t,e,r){var n=r(72);e.encrypt=function(t,e){var r=n(e,t._prev);return t._prev=t._cipher.encryptBlock(r),t._prev},e.decrypt=function(t,e){var r=t._prev;t._prev=e;var i=t._cipher.decryptBlock(e);return n(i,r)}},function(t,e,r){(function(t){function n(e,r,n){var o=r.length,a=i(r,e._cache);return e._cache=e._cache.slice(o),e._prev=t.concat([e._prev,n?r:a]),a}var i=r(72);e.encrypt=function(e,r,i){for(var o,a=new t("");r.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=new t("")),!(e._cache.length<=r.length)){a=t.concat([a,n(e,r,i)]);break}o=e._cache.length,a=t.concat([a,n(e,r.slice(0,o),i)]),r=r.slice(o)}return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(t,e,r){for(var i,o,a,f=-1,s=8,u=0;++f<s;)i=t._cipher.encryptBlock(t._prev),o=e&1<<7-f?128:0,a=i[0]^o,u+=(128&a)>>f%8,t._prev=n(t._prev,r?o:a);return u}function n(e,r){var n=e.length,i=-1,o=new t(e.length);for(e=t.concat([e,new t([r])]);++i<n;)o[i]=e[i]<<1|e[i+1]>>7;return o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(e,r,n){var i=e._cipher.encryptBlock(e._prev),o=i[0]^r;return e._prev=t.concat([e._prev.slice(1),new t([n?r:o])]),o}e.encrypt=function(e,n,i){for(var o=n.length,a=new t(o),f=-1;++f<o;)a[f]=r(e,n[f],i);return a}}).call(e,r(1).Buffer)},function(t,e){e.encrypt=function(t,e){return t._cipher.encryptBlock(e)},e.decrypt=function(t,e){return t._cipher.decryptBlock(e)}},function(t,e,r){(function(t){function n(t){return t._prev=t._cipher.encryptBlock(t._prev),t._prev}var i=r(72);e.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,n(e)]);var o=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),i(r,o)}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r,a,f){return this instanceof n?(o.call(this),this._cipher=new i.AES(r),this._prev=new e(a.length),this._cache=new e(""),this._secCache=new e(""),this._decrypt=f,a.copy(this._prev),void(this._mode=t)):new n(t,r,a)}var i=r(107),o=r(109),a=r(2);a(n,o),t.exports=n,n.prototype._update=function(t){return this._mode.encrypt(this,t,this._decrypt)},n.prototype._final=function(){this._cipher.scrub()}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r){return new e(t.toRed(i.mont(r.modulus)).redPow(new i(r.publicExponent)).fromRed().toArray())}var i=r(70);t.exports=n}).call(e,r(1).Buffer)},function(t,e){t.exports=function(t,e){for(var r=t.length,n=-1;++n<r;)t[n]^=e[n];return t}},function(t,e,r){"use strict";function n(t){return this instanceof n?void i.call(this,t):new n(t)}t.exports=n;var i=r(154),o=r(73);o.inherits=r(74),o.inherits(n,i),n.prototype._transform=function(t,e,r){r(null,t)}},function(t,e,r){"use strict";(function(e){function n(t,e,r){return"function"==typeof t.prependListener?t.prependListener(e,r):void(t._events&&t._events[e]?O(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]:t.on(e,r))}function i(t,e){D=D||r(51),t=t||{},this.objectMode=!!t.objectMode,e instanceof D&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var n=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:i,this.highWaterMark=~~this.highWaterMark,this.buffer=new z,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(U||(U=r(52).StringDecoder),this.decoder=new U(t.encoding),this.encoding=t.encoding)}function o(t){return D=D||r(51),this instanceof o?(this._readableState=new i(t,this),this.readable=!0,t&&"function"==typeof t.read&&(this._read=t.read),void R.call(this)):new o(t)}function a(t,e,r,n,i){var o=h(e,r);if(o)t.emit("error",o);else if(null===r)e.reading=!1,c(t,e);else if(e.objectMode||r&&r.length>0)if(e.ended&&!i){var a=new Error("stream.push() after EOF");t.emit("error",a)}else if(e.endEmitted&&i){var s=new Error("stream.unshift() after end event");t.emit("error",s)}else{var u;!e.decoder||i||n||(r=e.decoder.write(r),u=!e.objectMode&&0===r.length),i||(e.reading=!1),u||(e.flowing&&0===e.length&&!e.sync?(t.emit("data",r),t.read(0)):(e.length+=e.objectMode?1:r.length,i?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&d(t))),p(t,e)}else i||(e.reading=!1);return f(e)}function f(t){return!t.ended&&(t.needReadable||t.length<t.highWaterMark||0===t.length)}function s(t){return t>=q?t=q:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function u(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=s(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function h(t,e){var r=null;return T.isBuffer(e)||"string"==typeof e||null===e||void 0===e||t.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}function c(t,e){if(!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,d(t)}}function d(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(L("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?B(l,t):l(t))}function l(t){L("emit readable"),t.emit("readable"),w(t)}function p(t,e){e.readingMore||(e.readingMore=!0,B(b,t,e))}function b(t,e){for(var r=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length<e.highWaterMark&&(L("maybeReadMore read 0"),t.read(0),r!==e.length);)r=e.length;e.readingMore=!1}function v(t){return function(){var e=t._readableState;L("pipeOnDrain",e.awaitDrain),e.awaitDrain&&e.awaitDrain--,0===e.awaitDrain&&P(t,"data")&&(e.flowing=!0,w(t))}}function y(t){L("readable nexttick read 0"),t.read(0)}function m(t,e){e.resumeScheduled||(e.resumeScheduled=!0,B(g,t,e))}function g(t,e){e.reading||(L("resume read 0"),t.read(0)),e.resumeScheduled=!1,e.awaitDrain=0,t.emit("resume"),w(t),e.flowing&&!e.reading&&t.read(0)}function w(t){var e=t._readableState;for(L("flow",e.flowing);e.flowing&&null!==t.read(););}function _(t,e){if(0===e.length)return null;var r;return e.objectMode?r=e.buffer.shift():!t||t>=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):r=M(t,e.buffer,e.decoder),r}function M(t,e,r){var n;return t<e.head.data.length?(n=e.head.data.slice(0,t),e.head.data=e.head.data.slice(t)):n=t===e.head.data.length?e.shift():r?S(t,e):E(t,e),n}function S(t,e){var r=e.head,n=1,i=r.data;for(t-=i.length;r=r.next;){var o=r.data,a=t>o.length?o.length:t;if(i+=a===o.length?o:o.slice(0,t),t-=a,0===t){a===o.length?(++n,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(a));break}++n}return e.length-=n,i}function E(t,e){var r=j.allocUnsafe(t),n=e.head,i=1;for(n.data.copy(r),t-=n.data.length;n=n.next;){var o=n.data,a=t>o.length?o.length:t;if(o.copy(r,r.length-t,0,a),t-=a,0===t){a===o.length?(++i,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(a));break}++i}return e.length-=i,r}function A(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,B(k,e,t))}function k(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function x(t,e){for(var r=0,n=t.length;r<n;r++)e(t[r],r)}function I(t,e){for(var r=0,n=t.length;r<n;r++)if(t[r]===e)return r;return-1}t.exports=o;var B=r(157),O=r(597);o.ReadableState=i;var R,P=(r(110).EventEmitter,function(t,e){return t.listeners(e).length});!function(){try{R=r(31)}catch(t){}finally{R||(R=r(110).EventEmitter)}}();var T=r(1).Buffer,j=r(156),C=r(73);C.inherits=r(74);var N=r(612),L=void 0;L=N&&N.debuglog?N.debuglog("stream"):function(){};var U,z=r(596);C.inherits(o,R);var D,D;o.prototype.push=function(t,e){var r=this._readableState;return r.objectMode||"string"!=typeof t||(e=e||r.defaultEncoding,e!==r.encoding&&(t=j.from(t,e),e="")),a(this,r,t,e,!1)},o.prototype.unshift=function(t){var e=this._readableState;return a(this,e,t,"",!0)},o.prototype.isPaused=function(){return this._readableState.flowing===!1},o.prototype.setEncoding=function(t){return U||(U=r(52).StringDecoder),this._readableState.decoder=new U(t),this._readableState.encoding=t,this};var q=8388608;o.prototype.read=function(t){L("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(0!==t&&(e.emittedReadable=!1),0===t&&e.needReadable&&(e.length>=e.highWaterMark||e.ended))return L("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?A(this):d(this),null;if(t=u(t,e),0===t&&e.ended)return 0===e.length&&A(this),null;var n=e.needReadable;L("need readable",n),(0===e.length||e.length-t<e.highWaterMark)&&(n=!0,L("length less than watermark",n)),e.ended||e.reading?(n=!1,L("reading or ended",n)):n&&(L("do read"),e.reading=!0,e.sync=!0,0===e.length&&(e.needReadable=!0),this._read(e.highWaterMark),e.sync=!1,e.reading||(t=u(r,e)));var i;return i=t>0?_(t,e):null,null===i?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&A(this)),null!==i&&this.emit("data",i),i},o.prototype._read=function(t){this.emit("error",new Error("not implemented"))},o.prototype.pipe=function(t,r){function i(t){L("onunpipe"),t===d&&a()}function o(){L("onend"),t.end()}function a(){L("cleanup"),t.removeListener("close",u),t.removeListener("finish",h),t.removeListener("drain",y),t.removeListener("error",s),t.removeListener("unpipe",i),d.removeListener("end",o),d.removeListener("end",a),d.removeListener("data",f),m=!0,!l.awaitDrain||t._writableState&&!t._writableState.needDrain||y()}function f(e){L("ondata"),g=!1;var r=t.write(e);!1!==r||g||((1===l.pipesCount&&l.pipes===t||l.pipesCount>1&&I(l.pipes,t)!==-1)&&!m&&(L("false write response, pause",d._readableState.awaitDrain),d._readableState.awaitDrain++,g=!0),d.pause())}function s(e){L("onerror",e),c(),t.removeListener("error",s),0===P(t,"error")&&t.emit("error",e)}function u(){t.removeListener("finish",h),c()}function h(){L("onfinish"),t.removeListener("close",u),c()}function c(){L("unpipe"),d.unpipe(t)}var d=this,l=this._readableState;switch(l.pipesCount){case 0:l.pipes=t;break;case 1:l.pipes=[l.pipes,t];break;default:l.pipes.push(t)}l.pipesCount+=1,L("pipe count=%d opts=%j",l.pipesCount,r);var p=(!r||r.end!==!1)&&t!==e.stdout&&t!==e.stderr,b=p?o:a;l.endEmitted?B(b):d.once("end",b),t.on("unpipe",i);var y=v(d);t.on("drain",y);var m=!1,g=!1;return d.on("data",f),n(t,"error",s),t.once("close",u),t.once("finish",h),t.emit("pipe",d),l.flowing||(L("pipe resume"),d.resume()),t},o.prototype.unpipe=function(t){var e=this._readableState;if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this),this);if(!t){var r=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var i=0;i<n;i++)r[i].emit("unpipe",this);return this}var o=I(e.pipes,t);return o===-1?this:(e.pipes.splice(o,1),e.pipesCount-=1,1===e.pipesCount&&(e.pipes=e.pipes[0]),t.emit("unpipe",this),this)},o.prototype.on=function(t,e){var r=R.prototype.on.call(this,t,e);if("data"===t)this._readableState.flowing!==!1&&this.resume();else if("readable"===t){var n=this._readableState;n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.emittedReadable=!1,n.reading?n.length&&d(this,n):B(y,this))}return r},o.prototype.addListener=o.prototype.on,o.prototype.resume=function(){var t=this._readableState;return t.flowing||(L("resume"),t.flowing=!0,m(this,t)),this},o.prototype.pause=function(){return L("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(L("pause"),this._readableState.flowing=!1,this.emit("pause")),this},o.prototype.wrap=function(t){var e=this._readableState,r=!1,n=this;t.on("end",function(){if(L("wrapped end"),e.decoder&&!e.ended){var t=e.decoder.end();t&&t.length&&n.push(t)}n.push(null)}),t.on("data",function(i){if(L("wrapped data"),e.decoder&&(i=e.decoder.write(i)),(!e.objectMode||null!==i&&void 0!==i)&&(e.objectMode||i&&i.length)){var o=n.push(i);o||(r=!0,t.pause())}});for(var i in t)void 0===this[i]&&"function"==typeof t[i]&&(this[i]=function(e){return function(){return t[e].apply(t,arguments)}}(i));var o=["error","close","destroy","pause","resume"];return x(o,function(e){t.on(e,n.emit.bind(n,e))}),n._read=function(e){L("wrapped _read",e),r&&(r=!1,t.resume())},n},o._fromList=_}).call(e,r(26))},function(module,exports,__webpack_require__){function Context(){}var indexOf=__webpack_require__(607),Object_keys=function(t){if(Object.keys)return Object.keys(t);var e=[];for(var r in t)e.push(r);return e},forEach=function(t,e){if(t.forEach)return t.forEach(e);for(var r=0;r<t.length;r++)e(t[r],r,t)},defineProp=function(){try{return Object.defineProperty({},"_",{}),function(t,e,r){Object.defineProperty(t,e,{writable:!0,enumerable:!1,
|
||
configurable:!0,value:r})}}catch(t){return function(t,e,r){t[e]=r}}}(),globals=["Array","Boolean","Date","Error","EvalError","Function","Infinity","JSON","Math","NaN","Number","Object","RangeError","ReferenceError","RegExp","String","SyntaxError","TypeError","URIError","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","eval","isFinite","isNaN","parseFloat","parseInt","undefined","unescape"];Context.prototype={};var Script=exports.Script=function(t){return this instanceof Script?void(this.code=t):new Script(t)};Script.prototype.runInContext=function(t){if(!(t instanceof Context))throw new TypeError("needs a 'context' argument.");var e=document.createElement("iframe");e.style||(e.style={}),e.style.display="none",document.body.appendChild(e);var r=e.contentWindow,n=r.eval,i=r.execScript;!n&&i&&(i.call(r,"null"),n=r.eval),forEach(Object_keys(t),function(e){r[e]=t[e]}),forEach(globals,function(e){t[e]&&(r[e]=t[e])});var o=Object_keys(r),a=n.call(r,this.code);return forEach(Object_keys(r),function(e){(e in t||indexOf(o,e)===-1)&&(t[e]=r[e])}),forEach(globals,function(e){e in t||defineProp(t,e,r[e])}),document.body.removeChild(e),a},Script.prototype.runInThisContext=function(){return eval(this.code)},Script.prototype.runInNewContext=function(t){var e=Script.createContext(t),r=this.runInContext(e);return forEach(Object_keys(e),function(r){t[r]=e[r]}),r},forEach(Object_keys(Script.prototype),function(t){exports[t]=Script[t]=function(e){var r=Script(e);return r[t].apply(r,[].slice.call(arguments,1))}}),exports.createScript=function(t){return exports.Script(t)},exports.createContext=Script.createContext=function(t){var e=new Context;return"object"==typeof t&&forEach(Object_keys(t),function(r){e[r]=t[r]}),e}},function(t,e,r){"use strict";(function(e){var n=r(75),i=r(63),o=r(115),a=r(264),f=r(263),s=r(266),u=r(265),h=r(262),c=r(116),d=new e(0),l=function(t){var e=n.fromUri(t);return e.validate()},p=function(t,r,n){if("undefined"==typeof n&&(n=d),!e.isBuffer(n))throw new Error("Message must be provided as a Buffer");var o=i.fromUri(t),a=o.getConditionUri();if(a!==r)throw new Error("Fulfillment does not match condition (expected: "+r+", actual: "+a+")");return o.validate(n)},b=function(t){var e=i.fromUri(t);return e.getConditionUri()};o.registerType(a),o.registerType(f),o.registerType(s),o.registerType(u),o.registerType(h),t.exports={Condition:n,Fulfillment:i,TypeRegistry:o,PreimageSha256:a,RsaSha256:u,PrefixSha256:f,ThresholdSha256:s,Ed25519:h,validateCondition:l,validateFulfillment:p,fulfillmentToCondition:b,base64url:c,fromConditionUri:n.fromUri.bind(n),fromConditionBinary:n.fromBinary.bind(n),fromFulfillmentUri:i.fromUri.bind(i),fromFulfillmentBinary:i.fromBinary.bind(i)}}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(t){function e(t,e,r){t[e]||Object[n](t,e,{writable:!0,configurable:!0,value:r})}if(r(461),r(268),r(269),t._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");t._babelPolyfill=!0;var n="defineProperty";e(String.prototype,"padLeft","".padStart),e(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function(t){[][t]&&e(Array,t,Function.call.bind([][t]))})}).call(e,r(39))},function(t,e,r){var n=r(111),i=r(112),o=r(255),a=r(256);t.exports={Reader:o,Writer:a};for(var f in i)i.hasOwnProperty(f)&&(t.exports[f]=i[f]);for(var s in n)n.hasOwnProperty(s)&&(t.exports[s]=n[s])},function(t,e,r){(function(e){function n(t){if(!t||!e.isBuffer(t))throw new TypeError("data must be a node Buffer");this._buf=t,this._size=t.length,this._len=0,this._offset=0}var i=r(202),o=r(112),a=r(111),f=a.newInvalidAsn1Error;Object.defineProperty(n.prototype,"length",{enumerable:!0,get:function(){return this._len}}),Object.defineProperty(n.prototype,"offset",{enumerable:!0,get:function(){return this._offset}}),Object.defineProperty(n.prototype,"remain",{get:function(){return this._size-this._offset}}),Object.defineProperty(n.prototype,"buffer",{get:function(){return this._buf.slice(this._offset)}}),n.prototype.readByte=function(t){if(this._size-this._offset<1)return null;var e=255&this._buf[this._offset];return t||(this._offset+=1),e},n.prototype.peek=function(){return this.readByte(!0)},n.prototype.readLength=function(t){if(void 0===t&&(t=this._offset),t>=this._size)return null;var e=255&this._buf[t++];if(null===e)return null;if(128==(128&e)){if(e&=127,0==e)throw f("Indefinite length not supported");if(e>4)throw f("encoding too long");if(this._size-t<e)return null;this._len=0;for(var r=0;r<e;r++)this._len=(this._len<<8)+(255&this._buf[t++])}else this._len=e;return t},n.prototype.readSequence=function(t){var e=this.peek();if(null===e)return null;if(void 0!==t&&t!==e)throw f("Expected 0x"+t.toString(16)+": got 0x"+e.toString(16));var r=this.readLength(this._offset+1);return null===r?null:(this._offset=r,e)},n.prototype.readInt=function(){return this._readTag(o.Integer)},n.prototype.readBoolean=function(){return 0!==this._readTag(o.Boolean)},n.prototype.readEnumeration=function(){return this._readTag(o.Enumeration)},n.prototype.readString=function(t,r){t||(t=o.OctetString);var n=this.peek();if(null===n)return null;if(n!==t)throw f("Expected 0x"+t.toString(16)+": got 0x"+n.toString(16));var i=this.readLength(this._offset+1);if(null===i)return null;if(this.length>this._size-i)return null;if(this._offset=i,0===this.length)return r?new e(0):"";var a=this._buf.slice(this._offset,this._offset+this.length);return this._offset+=this.length,r?a:a.toString("utf8")},n.prototype.readOID=function(t){t||(t=o.OID);var e=this.readString(t,!0);if(null===e)return null;for(var r=[],n=0,i=0;i<e.length;i++){var a=255&e[i];n<<=7,n+=127&a,0==(128&a)&&(r.push(n),n=0)}return n=r.shift(),r.unshift(n%40),r.unshift(n/40>>0),r.join(".")},n.prototype._readTag=function(t){i.ok(void 0!==t);var e=this.peek();if(null===e)return null;if(e!==t)throw f("Expected 0x"+t.toString(16)+": got 0x"+e.toString(16));var r=this.readLength(this._offset+1);if(null===r)return null;if(this.length>4)throw f("Integer too long: "+this.length);if(this.length>this._size-r)return null;this._offset=r;for(var n=this._buf[this._offset],o=0,a=0;a<this.length;a++)o<<=8,o|=255&this._buf[this._offset++];return 128==(128&n)&&4!==a&&(o-=1<<8*a),o>>0},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,e){o.ok(t),o.equal(typeof t,"object"),o.ok(e),o.equal(typeof e,"object");var r=Object.getOwnPropertyNames(t);return r.forEach(function(r){if(!e[r]){var n=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,n)}}),e}function i(t){t=n(s,t||{}),this._buf=new e(t.size||1024),this._size=this._buf.length,this._offset=0,this._options=t,this._seq=[]}var o=r(202),a=r(112),f=r(111),s=(f.newInvalidAsn1Error,{size:1024,growthFactor:8});Object.defineProperty(i.prototype,"buffer",{get:function(){if(this._seq.length)throw new InvalidAsn1Error(this._seq.length+" unended sequence(s)");return this._buf.slice(0,this._offset)}}),i.prototype.writeByte=function(t){if("number"!=typeof t)throw new TypeError("argument must be a Number");this._ensure(1),this._buf[this._offset++]=t},i.prototype.writeInt=function(t,e){if("number"!=typeof t)throw new TypeError("argument must be a Number");"number"!=typeof e&&(e=a.Integer);for(var r=4;(0===(4286578688&t)||(4286578688&t)===-8388608)&&r>1;)r--,t<<=8;if(r>4)throw new InvalidAsn1Error("BER ints cannot be > 0xffffffff");for(this._ensure(2+r),this._buf[this._offset++]=e,this._buf[this._offset++]=r;r-- >0;)this._buf[this._offset++]=(4278190080&t)>>>24,t<<=8},i.prototype.writeNull=function(){this.writeByte(a.Null),this.writeByte(0)},i.prototype.writeEnumeration=function(t,e){if("number"!=typeof t)throw new TypeError("argument must be a Number");return"number"!=typeof e&&(e=a.Enumeration),this.writeInt(t,e)},i.prototype.writeBoolean=function(t,e){if("boolean"!=typeof t)throw new TypeError("argument must be a Boolean");"number"!=typeof e&&(e=a.Boolean),this._ensure(3),this._buf[this._offset++]=e,this._buf[this._offset++]=1,this._buf[this._offset++]=t?255:0},i.prototype.writeString=function(t,r){if("string"!=typeof t)throw new TypeError("argument must be a string (was: "+typeof t+")");"number"!=typeof r&&(r=a.OctetString);var n=e.byteLength(t);this.writeByte(r),this.writeLength(n),n&&(this._ensure(n),this._buf.write(t,this._offset),this._offset+=n)},i.prototype.writeBuffer=function(t,r){if("number"!=typeof r)throw new TypeError("tag must be a number");if(!e.isBuffer(t))throw new TypeError("argument must be a buffer");this.writeByte(r),this.writeLength(t.length),this._ensure(t.length),t.copy(this._buf,this._offset,0,t.length),this._offset+=t.length},i.prototype.writeStringArray=function(t){if(!t instanceof Array)throw new TypeError("argument must be an Array[String]");var e=this;t.forEach(function(t){e.writeString(t)})},i.prototype.writeOID=function(t,e){function r(t,e){e<128?t.push(e):e<16384?(t.push(e>>>7|128),t.push(127&e)):e<2097152?(t.push(e>>>14|128),t.push(255&(e>>>7|128)),t.push(127&e)):e<268435456?(t.push(e>>>21|128),t.push(255&(e>>>14|128)),t.push(255&(e>>>7|128)),t.push(127&e)):(t.push(255&(e>>>28|128)),t.push(255&(e>>>21|128)),t.push(255&(e>>>14|128)),t.push(255&(e>>>7|128)),t.push(127&e))}if("string"!=typeof t)throw new TypeError("argument must be a string");if("number"!=typeof e&&(e=a.OID),!/^([0-9]+\.){3,}[0-9]+$/.test(t))throw new Error("argument is not a valid OID string");var n=t.split("."),i=[];i.push(40*parseInt(n[0],10)+parseInt(n[1],10)),n.slice(2).forEach(function(t){r(i,parseInt(t,10))});var o=this;this._ensure(2+i.length),this.writeByte(e),this.writeLength(i.length),i.forEach(function(t){o.writeByte(t)})},i.prototype.writeLength=function(t){if("number"!=typeof t)throw new TypeError("argument must be a Number");if(this._ensure(4),t<=127)this._buf[this._offset++]=t;else if(t<=255)this._buf[this._offset++]=129,this._buf[this._offset++]=t;else if(t<=65535)this._buf[this._offset++]=130,this._buf[this._offset++]=t>>8,this._buf[this._offset++]=t;else{if(!(t<=16777215))throw new InvalidAsn1ERror("Length too long (> 4 bytes)");this._buf[this._offset++]=131,this._buf[this._offset++]=t>>16,this._buf[this._offset++]=t>>8,this._buf[this._offset++]=t}},i.prototype.startSequence=function(t){"number"!=typeof t&&(t=a.Sequence|a.Constructor),this.writeByte(t),this._seq.push(this._offset),this._ensure(3),this._offset+=3},i.prototype.endSequence=function(){var t=this._seq.pop(),e=t+3,r=this._offset-e;if(r<=127)this._shift(e,r,-2),this._buf[t]=r;else if(r<=255)this._shift(e,r,-1),this._buf[t]=129,this._buf[t+1]=r;else if(r<=65535)this._buf[t]=130,this._buf[t+1]=r>>8,this._buf[t+2]=r;else{if(!(r<=16777215))throw new InvalidAsn1Error("Sequence too long");this._shift(e,r,1),this._buf[t]=131,this._buf[t+1]=r>>16,this._buf[t+2]=r>>8,this._buf[t+3]=r}},i.prototype._shift=function(t,e,r){o.ok(void 0!==t),o.ok(void 0!==e),o.ok(r),this._buf.copy(this._buf,t+r,t,t+e),this._offset+=r},i.prototype._ensure=function(t){if(o.ok(t),this._size-this._offset<t){var r=this._size*this._options.growthFactor;r-this._offset<t&&(r+=t);var n=new e(r);this._buf.copy(n,0,0,this._offset),this._buf=n,this._size=r}},t.exports=i}).call(e,r(1).Buffer)},function(t,e,r){var n=r(254);t.exports={Ber:n,BerReader:n.Reader,BerWriter:n.Writer}},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(93),a=r(114),f=function(){function t(e){n(this,t),e=e||{},this.hashAlgorithm=e.hashAlgorithm||"sha256",this.hashLength=a.getLength(this.hashAlgorithm),this.saltLength=this.hashLength}return i(t,[{key:"generate",value:function(t,r){for(var n=new e(r),i=Math.ceil(r/this.hashLength),a=0;a<i;a++){var f=new e(4);f.writeInt32BE(a,0);var s=o.createHash(this.hashAlgorithm).update(t).update(f).digest();s.copy(n,a*this.hashLength)}return n}}]),t}();t.exports=f}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(93),a=r(258),f=r(267),s=r(114),u=function(){function t(e){n(this,t),e=e||{},this.hashAlgorithm=e.hashAlgorithm||"sha256",this.hashLength=s.getLength(this.hashAlgorithm),this.saltLength=this.hashLength}return i(t,[{key:"encode",value:function(t,r){var n=Math.ceil(r/8),i=o.createHash(this.hashAlgorithm).update(t).digest();if(n<this.hashLength+this.saltLength+2)throw new Error("Encoding error: RSA modulus is too small for "+this.hashAlgorithm);var s=o.randomBytes(this.saltLength),u=o.createHash(this.hashAlgorithm).update(new e(8).fill(0)).update(i).update(s).digest(),h=e.concat([new e(n-this.saltLength-this.hashLength-2).fill(0),new e([1]),s]),c=new a({hashAlgorithm:this.hashAlgorithm}),d=c.generate(u,n-this.hashLength-1),l=f(h,d);return l[0]&=255>>>8*n-r,e.concat([l,u,new e([188])])}},{key:"verify",value:function(t,r,n){var i=Math.ceil(n/8),s=o.createHash(this.hashAlgorithm).update(t).digest();if(i<this.hashLength+this.saltLength+2)return!1;if(188!==r[r.length-1])return!1;var u=i-this.hashLength-1,h=r.slice(0,u),c=r.slice(u,u+this.hashLength),d=255>>>8*i-n;if(h[0]&~d)return!1;var l=new a({hashAlgorithm:this.hashAlgorithm}),p=l.generate(c,i-this.hashLength-1),b=f(h,p);b[0]&=d;for(var v=i-this.hashLength-this.saltLength-2,y=0;y<v;y++)if(0!==b[y])return!1;if(1!==b[v])return!1;var m=b.slice(b.length-this.saltLength),g=o.createHash(this.hashAlgorithm).update(new e(8).fill(0)).update(s).update(m).digest();return 0===e.compare(c,g)}}]),t}();u.EMPTY_BUFFER=new e(0),t.exports=u}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(93),a=r(464),f=r(259),s=r(161),u=function(){function t(e){n(this,t),e=e||{},this.hashAlgorithm=e.hashAlgorithm||"sha256",this.pss=new f({hashAlgorithm:this.hashAlgorithm})}return i(t,[{key:"sign",value:function(r,n){var i=s.modulusFromPrivateKey(r),f=i[0].toString(2).length,u=8*(i.length-1)+f,h=this.pss.encode(n,u-1),c=h.length<i.length?e.concat([t.ZERO_BYTE,h]):h;return o.privateEncrypt({key:r,padding:a.RSA_NO_PADDING},c)}},{key:"verify",value:function(t,e,r){var n=s.modulusToPem(t),i=o.publicDecrypt({key:n,padding:a.RSA_NO_PADDING},r),f=t[0].toString(2).length,u=8*(t.length-1)+f,h=u%8===1?i.slice(1):i;return this.pss.verify(e,h,u-1)}}]),t}();u.ZERO_BYTE=new e([0]),t.exports=u}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(62),f=function(t){function e(){return n(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=r(488),s=r(63),u=r(53),h=r(160),c=void 0;try{c=r(462)}catch(t){}var d=function(t){function r(){n(this,r);var t=i(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return t.publicKey=null,t.signature=null,t}return o(r,t),a(r,[{key:"setPublicKey",value:function(t){if(!e.isBuffer(t))throw new TypeError("Public key must be a Buffer, was: "+t);if(32!==t.length)throw new Error("Public key must be 32 bytes, was: "+t.length);this.publicKey=t}},{key:"setSignature",value:function(t){if(!e.isBuffer(t))throw new TypeError("Signature must be a Buffer, was: "+t);if(64!==t.length)throw new Error("Signature must be 64 bytes, was: "+t.length);this.signature=t}},{key:"sign",value:function(t,r){if(!e.isBuffer(t))throw new u("Message must be a Buffer");if(!e.isBuffer(r))throw new TypeError("Private key must be a Buffer, was: "+r);if(32!==r.length)throw new Error("Private key must be 32 bytes, was: "+r.length);if(c){var n=c.MakeKeypair(r);this.setPublicKey(n.publicKey),this.signature=c.Sign(t,n)}else{var i=f.sign.keyPair.fromSeed(r);this.setPublicKey(new e(i.publicKey)),this.signature=new e(f.sign.detached(t,i.secretKey))}}},{key:"generateHash",value:function(){if(!this.publicKey)throw new u("Requires a public key");return this.publicKey}},{key:"parsePayload",value:function(t){this.setPublicKey(t.readOctetString(r.PUBKEY_LENGTH)),this.setSignature(t.readOctetString(r.SIGNATURE_LENGTH))}},{key:"writePayload",value:function(t){t.writeOctetString(this.publicKey,r.PUBKEY_LENGTH),t.writeOctetString(this.signature,r.SIGNATURE_LENGTH)}},{key:"calculateMaxFulfillmentLength",value:function(){return r.FULFILLMENT_LENGTH}},{key:"validate",value:function(t){if(!e.isBuffer(t))throw new TypeError("Message must be a Buffer");var r=void 0;if(r=c?c.Verify(t,this.signature,this.publicKey):f.sign.detached.verify(t,this.signature,this.publicKey),r!==!0)throw new h("Invalid ed25519 signature");return!0}}]),r}(s);d.TYPE_ID=4,d.FEATURE_BITMASK=32,d.PUBKEY_LENGTH=32,d.SIGNATURE_LENGTH=64,d.FULFILLMENT_LENGTH=d.PUBKEY_LENGTH+d.SIGNATURE_LENGTH,t.exports=d}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=function t(e,r,n){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,r);if(void 0===i){var o=Object.getPrototypeOf(e);return null===o?void 0:t(o,r,n)}if("value"in i)return i.value;var a=i.get;if(void 0!==a)return a.call(n)},s=r(75),u=r(63),h=r(76),c=r(90),d=r(53),l=function(t){function r(){n(this,r);var t=i(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return t.subcondition=null,t}return o(r,t),a(r,[{key:"setSubcondition",value:function(t){if("string"==typeof t)t=s.fromUri(t);else if(!(t instanceof s))throw new Error("Subconditions must be URIs or objects of type Condition");this.subcondition=t}},{key:"setSubfulfillment",value:function(t){if("string"==typeof t)t=u.fromUri(t);else if(!(t instanceof u))throw new Error("Subfulfillments must be objects of type Fulfillment");this.subcondition=t}},{key:"setPrefix",value:function(t){if(!e.isBuffer(t))throw new TypeError("Prefix must be a Buffer, was: "+t);this.prefix=t}},{key:"getBitmask",value:function(){return f(r.prototype.__proto__||Object.getPrototypeOf(r.prototype),"getBitmask",this).call(this)|this.subcondition.getBitmask()}},{key:"writeHashPayload",value:function(t){if(!this.subcondition)throw new d("Requires subcondition");t.writeVarOctetString(this.prefix),t.write(this.subcondition instanceof s?this.subcondition.serializeBinary():this.subcondition.getConditionBinary())}},{key:"calculateMaxFulfillmentLength",value:function(){var t=this.subcondition instanceof s?this.subcondition.getMaxFulfillmentLength():this.subcondition.getCondition().getMaxFulfillmentLength(),e=new c;return e.writeVarOctetString(this.prefix),e.skip(t),e.getSize()}},{key:"parsePayload",value:function(t){this.setPrefix(t.readVarOctetString()),this.setSubfulfillment(u.fromBinary(t))}},{key:"writePayload",value:function(t){if(!(this.subcondition instanceof u))throw new Error("Subcondition must be fulfilled");t.writeVarOctetString(this.prefix),t.write(this.subcondition.serializeBinary())}},{key:"validate",value:function(t){if(!(this.subcondition instanceof u))throw new Error("Subcondition is not a fulfillment");if(!e.isBuffer(t))throw new Error("Message must be provided as a Buffer, was: "+t);return this.subcondition.validate(e.concat([this.prefix,t]))}}]),r}(h);l.TYPE_ID=1,l.FEATURE_BITMASK=5,l.prototype.setSubconditionUri=l.prototype.setSubcondition,l.prototype.setSubfulfillmentUri=l.prototype.setSubfulfillment,t.exports=l}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=r(76),s=r(53),u=function(t){function r(){return n(this,r),i(this,(r.__proto__||Object.getPrototypeOf(r)).apply(this,arguments))}return o(r,t),a(r,[{key:"writeHashPayload",value:function(t){if(!this.preimage)throw new s("Could not calculate hash, no preimage provided");t.write(this.preimage)}},{key:"setPreimage",value:function(t){if(!e.isBuffer(t))throw new TypeError("Preimage must be a buffer, was: "+t);this.preimage=t}},{key:"parsePayload",value:function(t,e){this.setPreimage(t.read(e))}},{key:"writePayload",value:function(t){if(!this.preimage)throw new s("Preimage must be specified");t.write(this.preimage)}},{key:"validate",value:function(t){return!0}}]),r}(f);u.TYPE_ID=0,u.FEATURE_BITMASK=3,t.exports=u}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=r(260),s=r(161),u=r(76),h=r(90),c=r(53),d=r(160),l=new f,p=function(t){function r(){n(this,r);var t=i(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return t.modulus=null,t.signature=null,t}return o(r,t),a(r,[{key:"writeCommonHeader",value:function(t){if(!this.modulus)throw new c("Requires a public modulus");t.writeVarOctetString(this.modulus)}},{key:"setPublicModulus",value:function(t){if(!e.isBuffer(t))throw new TypeError("Modulus must be a buffer, was: "+t);if(0===t[0])throw new Error("Modulus may not contain leading zeros");if(t.length>512||t.length<128)throw new Error("Modulus must be between 128 bytes (1017 bits) and 512 bytes (4096 bits), was: "+t.length+" bytes");this.modulus=t}},{key:"setSignature",value:function(t){if(!e.isBuffer(t))throw new TypeError("Signature must be a buffer, was: "+t);this.signature=t}},{key:"sign",value:function(t,e){this.modulus||this.setPublicModulus(s.modulusFromPrivateKey(e)),this.signature=l.sign(e,t)}},{key:"writeHashPayload",value:function(t){this.writeCommonHeader(t)}},{key:"parsePayload",value:function(t){this.setPublicModulus(t.readVarOctetString()),this.setSignature(t.readVarOctetString())}},{key:"writePayload",value:function(t){if(!this.signature)throw new c("Requires a signature");this.writeCommonHeader(t),t.writeVarOctetString(this.signature)}},{key:"calculateMaxFulfillmentLength",value:function(){var t=new h;if(!this.modulus)throw new c("Requires a public modulus");return this.writeCommonHeader(t),t.writeVarOctetString(this.modulus),t.getSize()}},{key:"validate",value:function(t){if(!e.isBuffer(t))throw new Error("Message must be provided as a Buffer, was: "+t);var r=l.verify(this.modulus,t,this.signature);if(!r)throw new d("Invalid RSA signature");return!0}}]),r}(u);p.TYPE_ID=3,p.FEATURE_BITMASK=17,t.exports=p}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=function t(e,r,n){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,r);if(void 0===i){var o=Object.getPrototypeOf(e);return null===o?void 0:t(o,r,n)}if("value"in i)return i.value;var a=i.get;if(void 0!==a)return a.call(n)},s=r(75),u=r(63),h=r(76),c=r(90),d=r(91),l=r(53),p=r(113),b=r(162),v=new e(0),y="condition",m="fulfillment",g=function(t){function r(){n(this,r);var t=i(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return t.threshold=null,t.subconditions=[],t}return o(r,t),a(r,[{key:"addSubcondition",value:function(t,e){if("string"==typeof t)t=s.fromUri(t);else if(!(t instanceof s))throw new Error("Subconditions must be URIs or objects of type Condition");if("undefined"==typeof e)e=1;else if(!b(e)||e<1)throw new TypeError("Invalid weight, not an integer: "+e);this.subconditions.push({type:y,body:t,weight:e})}},{key:"addSubfulfillment",value:function(t,e){if("string"==typeof t)t=u.fromUri(t);else if(!(t instanceof u))throw new Error("Subfulfillments must be URIs or objects of type Fulfillment");if("undefined"==typeof e)e=1;else if(!b(e))throw new Error("Invalid weight, not an integer: "+e);this.subconditions.push({type:m,body:t,weight:e})}},{key:"setThreshold",value:function(t){if(!b(t)||t<1)throw new TypeError("Threshold must be a integer greater than zero, was: "+t);this.threshold=t}},{key:"getBitmask",value:function(){var t=f(r.prototype.__proto__||Object.getPrototypeOf(r.prototype),"getBitmask",this).call(this),e=!0,n=!1,i=void 0;try{for(var o,a=this.subconditions[Symbol.iterator]();!(e=(o=a.next()).done);e=!0){var s=o.value;t|=s.body.getBitmask()}}catch(t){n=!0,i=t}finally{try{!e&&a.return&&a.return()}finally{if(n)throw i}}return t}},{key:"writeHashPayload",value:function(t){if(!this.subconditions.length)throw new l("Requires subconditions");var e=this.subconditions.map(function(t){var e=new d;return e.writeVarUInt(t.weight),e.write(t.type===m?t.body.getConditionBinary():t.body.serializeBinary()),e.getBuffer()}),r=this.constructor.sortBuffers(e);t.writeUInt32(this.threshold),t.writeVarUInt(r.length),r.forEach(function(e){return t.write(e)})}},{key:"calculateMaxFulfillmentLength",value:function(){var t=this,e=0,r=this.subconditions.map(function(r){var n=t.constructor.predictSubconditionLength(r),i=t.constructor.predictSubfulfillmentLength(r);return e+=n,{weight:r.weight,size:i-n}}).sort(function(t,e){return e.weight-t.weight}),n=e+this.constructor.calculateWorstCaseLength(this.threshold,r);if(n===-(1/0))throw new l("Insufficient subconditions/weights to meet the threshold");var i=new c;return i.writeUInt32(this.threshold),i.writeVarUInt(this.subconditions.length),this.subconditions.forEach(function(t){i.writeUInt8(),1!==t.weight&&i.writeUInt32(t.weight)}),i.skip(n),i.getSize()}},{key:"parsePayload",value:function(t){this.setThreshold(t.readVarUInt());for(var e=t.readVarUInt(),r=0;r<e;r++){var n=t.readVarUInt(),i=t.readVarOctetString(),o=t.readVarOctetString();if(i.length&&o.length)throw new p("Subconditions may not provide both subcondition and fulfillment.");if(i.length)this.addSubfulfillment(u.fromBinary(i),n);else{if(!o.length)throw new p("Subconditions must provide either subcondition or fulfillment.");this.addSubcondition(s.fromBinary(o),n)}}}},{key:"writePayload",value:function(t){var e=this.subconditions.map(function(t,e){return t.type===m?Object.assign({},t,{index:e,size:t.body.serializeBinary().length,omitSize:t.body.getConditionBinary().length}):null}).filter(Boolean),r=this.constructor.calculateSmallestValidFulfillmentSet(this.threshold,e).set,n=this.subconditions.map(function(t,e){return t.type===m&&r.indexOf(e)===-1?Object.assign({},t,{type:y,body:t.body.getCondition()}):t}),i=n.map(function(t){var e=new d;return e.writeVarUInt(t.weight),e.writeVarOctetString(t.type===m?t.body.serializeBinary():v),e.writeVarOctetString(t.type===y?t.body.serializeBinary():v),e.getBuffer()}),o=this.constructor.sortBuffers(i);t.writeVarUInt(this.threshold),t.writeVarUInt(o.length),o.forEach(t.write.bind(t))}},{key:"validate",value:function(t){var e=this.subconditions.filter(function(t){return t.type===m}),r=1/0,n=e.reduce(function(t,e){return r=Math.min(r,e.weight),t+e.weight},0);if(n<this.threshold)throw new Error("Threshold not met");if(this.threshold+r<=n)throw new Error("Fulfillment is not minimal");return e.every(function(e){return e.body.validate(t)})}}],[{key:"predictSubconditionLength",value:function(t){return t.type===m?t.body.getConditionBinary().length:t.body.serializeBinary().length}},{key:"predictSubfulfillmentLength",
|
||
value:function(t){var e=t.type===m?t.body.getCondition().getMaxFulfillmentLength():t.body.getMaxFulfillmentLength(),r=new c;return r.writeUInt16(),r.writeVarOctetString({length:e}),r.getSize()}},{key:"calculateWorstCaseLength",value:function(t,e,r){if(r=r||0,t<=0)return 0;if(r<e.length){var n=e[r];return Math.max(n.size+this.calculateWorstCaseLength(t-n.weight,e,r+1),this.calculateWorstCaseLength(t,e,r+1))}return-(1/0)}},{key:"calculateSmallestValidFulfillmentSet",value:function(t,e,r){if(r=r||{index:0,size:0,set:[]},t<=0)return{size:r.size,set:r.set};if(r.index<e.length){var n=e[r.index],i=this.calculateSmallestValidFulfillmentSet(t-n.weight,e,{size:r.size+n.size,index:r.index+1,set:r.set.concat(n.index)}),o=this.calculateSmallestValidFulfillmentSet(t,e,{size:r.size+n.omitSize,index:r.index+1,set:r.set});return i.size<o.size?i:o}return{size:1/0}}},{key:"sortBuffers",value:function(t){return t.slice().sort(function(t,r){return t.length!==r.length?t.length-r.length:e.compare(t,r)})}}]),r}(h);g.TYPE_ID=2,g.FEATURE_BITMASK=9,g.prototype.addSubconditionUri=g.prototype.addSubcondition,g.prototype.addSubfulfillmentUri=g.prototype.addSubfulfillment,t.exports=g}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function r(t,r){if(!e.isBuffer(t)||!e.isBuffer(r))throw new Error("Arguments must be buffers");if(t.length!==r.length)throw new Error("Buffers must be the same length");for(var n=new e(t.length),i=0;i<t.length;i++)n[i]=t[i]^r[i];return n}t.exports=r}).call(e,r(1).Buffer)},function(t,e,r){(function(e,r){!function(e){"use strict";function n(t,e,r,n){var i=Object.create((e||o).prototype),a=new p(n||[]);return i._invoke=c(t,r,a),i}function i(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function o(){}function a(){}function f(){}function s(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function u(t){this.arg=t}function h(t){function e(r,n,o,a){var f=i(t[r],t,n);if("throw"!==f.type){var s=f.arg,h=s.value;return h instanceof u?Promise.resolve(h.arg).then(function(t){e("next",t,o,a)},function(t){e("throw",t,o,a)}):Promise.resolve(h).then(function(t){s.value=t,o(s)},a)}a(f.arg)}function n(t,r){function n(){return new Promise(function(n,i){e(t,r,n,i)})}return o=o?o.then(n,n):n()}"object"==typeof r&&r.domain&&(e=r.domain.bind(e));var o;this._invoke=n}function c(t,e,r){var n=E;return function(o,a){if(n===k)throw new Error("Generator is already running");if(n===x){if("throw"===o)throw a;return v()}for(;;){var f=r.delegate;if(f){if("return"===o||"throw"===o&&f.iterator[o]===y){r.delegate=null;var s=f.iterator.return;if(s){var u=i(s,f.iterator,a);if("throw"===u.type){o="throw",a=u.arg;continue}}if("return"===o)continue}var u=i(f.iterator[o],f.iterator,a);if("throw"===u.type){r.delegate=null,o="throw",a=u.arg;continue}o="next",a=y;var h=u.arg;if(!h.done)return n=A,h;r[f.resultName]=h.value,r.next=f.nextLoc,r.delegate=null}if("next"===o)r.sent=r._sent=a;else if("throw"===o){if(n===E)throw n=x,a;r.dispatchException(a)&&(o="next",a=y)}else"return"===o&&r.abrupt("return",a);n=k;var u=i(t,e,r);if("normal"===u.type){n=r.done?x:A;var h={value:u.arg,done:r.done};if(u.arg!==I)return h;r.delegate&&"next"===o&&(a=y)}else"throw"===u.type&&(n=x,o="throw",a=u.arg)}}}function d(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function l(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function p(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(d,this),this.reset(!0)}function b(t){if(t){var e=t[w];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,n=function e(){for(;++r<t.length;)if(m.call(t,r))return e.value=t[r],e.done=!1,e;return e.value=y,e.done=!0,e};return n.next=n}}return{next:v}}function v(){return{value:y,done:!0}}var y,m=Object.prototype.hasOwnProperty,g="function"==typeof Symbol?Symbol:{},w=g.iterator||"@@iterator",_=g.toStringTag||"@@toStringTag",M="object"==typeof t,S=e.regeneratorRuntime;if(S)return void(M&&(t.exports=S));S=e.regeneratorRuntime=M?t.exports:{},S.wrap=n;var E="suspendedStart",A="suspendedYield",k="executing",x="completed",I={},B=f.prototype=o.prototype;a.prototype=B.constructor=f,f.constructor=a,f[_]=a.displayName="GeneratorFunction",S.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===a||"GeneratorFunction"===(e.displayName||e.name))},S.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,f):(t.__proto__=f,_ in t||(t[_]="GeneratorFunction")),t.prototype=Object.create(B),t},S.awrap=function(t){return new u(t)},s(h.prototype),S.async=function(t,e,r,i){var o=new h(n(t,e,r,i));return S.isGeneratorFunction(e)?o:o.next().then(function(t){return t.done?t.value:o.next()})},s(B),B[w]=function(){return this},B[_]="Generator",B.toString=function(){return"[object Generator]"},S.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},S.values=b,p.prototype={constructor:p,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=y,this.done=!1,this.delegate=null,this.tryEntries.forEach(l),!t)for(var e in this)"t"===e.charAt(0)&&m.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=y)},stop:function(){this.done=!0;var t=this.tryEntries[0],e=t.completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){function e(e,n){return o.type="throw",o.arg=t,r.next=e,!!n}if(this.done)throw t;for(var r=this,n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n],o=i.completion;if("root"===i.tryLoc)return e("end");if(i.tryLoc<=this.prev){var a=m.call(i,"catchLoc"),f=m.call(i,"finallyLoc");if(a&&f){if(this.prev<i.catchLoc)return e(i.catchLoc,!0);if(this.prev<i.finallyLoc)return e(i.finallyLoc)}else if(a){if(this.prev<i.catchLoc)return e(i.catchLoc,!0)}else{if(!f)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return e(i.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&m.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var i=n;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var o=i?i.completion:{};return o.type=t,o.arg=e,i?this.next=i.finallyLoc:this.complete(o),I},complete:function(t,e){if("throw"===t.type)throw t.arg;"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=t.arg,this.next="end"):"normal"===t.type&&e&&(this.next=e)},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),l(r),I}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;l(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:b(t),resultName:e,nextLoc:r},I}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:this)}).call(e,r(39),r(26))},function(t,e,r){r(290),t.exports=r(32).RegExp.escape},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(77);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e,r){var n=r(270);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e,r){var n=r(77),i=r(165).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,r){var n=r(165),i=r(163),o=r(272),a=r(275),f="prototype",s=function(t,e,r){var u,h,c,d=t&s.F,l=t&s.G,p=t&s.S,b=t&s.P,v=t&s.B,y=t&s.W,m=l?i:i[e]||(i[e]={}),g=m[f],w=l?n:p?n[e]:(n[e]||{})[f];l&&(r=e);for(u in r)h=!d&&w&&void 0!==w[u],h&&u in m||(c=h?w[u]:r[u],m[u]=l&&"function"!=typeof w[u]?r[u]:v&&h?o(c,n):y&&w[u]==c?function(t){var e=function(e,r,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,r)}return new t(e,r,n)}return t.apply(this,arguments)};return e[f]=t[f],e}(c):b&&"function"==typeof c?o(Function.call,c):c,b&&((m.virtual||(m.virtual={}))[u]=c,t&s.R&&g&&!g[u]&&a(g,u,c)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},function(t,e,r){var n=r(278),i=r(279);t.exports=r(117)?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){t.exports=!r(117)&&!r(164)(function(){return 7!=Object.defineProperty(r(273)("div"),"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(77),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},function(t,e,r){var n=r(271),i=r(276),o=r(280),a=Object.defineProperty;e.f=r(117)?Object.defineProperty:function(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return a(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,r){var n=r(77);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,r){var n=r(274);n(n.S,"Number",{isInteger:r(277)})},function(t,e,r){var n=r(6),i=r(126),o=r(7)("species");t.exports=function(t){var e;return i(t)&&(e=t.constructor,"function"!=typeof e||e!==Array&&!i(e.prototype)||(e=void 0),n(e)&&(e=e[o],null===e&&(e=void 0))),void 0===e?Array:e}},function(t,e,r){var n=r(282);t.exports=function(t,e){return new(n(t))(e)}},function(t,e,r){"use strict";var n=r(3),i=r(29),o="number";t.exports=function(t){if("string"!==t&&t!==o&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),t!=o)}},function(t,e,r){var n=r(44),i=r(86),o=r(66);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var a,f=r(t),s=o.f,u=0;f.length>u;)s.call(t,a=f[u++])&&e.push(a);return e}},function(t,e,r){var n=r(44),i=r(17);t.exports=function(t,e){for(var r,o=i(t),a=n(o),f=a.length,s=0;f>s;)if(o[r=a[s++]]===e)return r}},function(t,e,r){"use strict";var n=r(288),i=r(82),o=r(13);t.exports=function(){for(var t=o(this),e=arguments.length,r=Array(e),a=0,f=n._,s=!1;e>a;)(r[a]=arguments[a++])===f&&(s=!0);return function(){var n,o=this,a=arguments.length,u=0,h=0;if(!s&&!a)return i(t,r,o);if(n=r.slice(),s)for(;e>u;u++)n[u]===f&&(n[u]=arguments[h++]);for(;a>h;)n.push(arguments[h++]);return i(t,n,o)}}},function(t,e,r){t.exports=r(4)},function(t,e){t.exports=function(t,e){var r=e===Object(e)?function(t){return e[t]}:e;return function(e){return String(e).replace(t,r)}}},function(t,e,r){var n=r(0),i=r(289)(/[\\^$*+?.()|[\]{}]/g,"\\$&");n(n.S,"RegExp",{escape:function(t){return i(t)}})},function(t,e,r){var n=r(0);n(n.P,"Array",{copyWithin:r(167)}),r(54)("copyWithin")},function(t,e,r){"use strict";var n=r(0),i=r(27)(4);n(n.P+n.F*!r(25)([].every,!0),"Array",{every:function(t){return i(this,t,arguments[1])}})},function(t,e,r){var n=r(0);n(n.P,"Array",{fill:r(118)}),r(54)("fill")},function(t,e,r){"use strict";var n=r(0),i=r(27)(2);n(n.P+n.F*!r(25)([].filter,!0),"Array",{filter:function(t){return i(this,t,arguments[1])}})},function(t,e,r){"use strict";var n=r(0),i=r(27)(6),o="findIndex",a=!0;o in[]&&Array(1)[o](function(){a=!1}),n(n.P+n.F*a,"Array",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(54)(o)},function(t,e,r){"use strict";var n=r(0),i=r(27)(5),o="find",a=!0;o in[]&&Array(1)[o](function(){a=!1}),n(n.P+n.F*a,"Array",{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(54)(o)},function(t,e,r){"use strict";var n=r(0),i=r(27)(0),o=r(25)([].forEach,!0);n(n.P+n.F*!o,"Array",{forEach:function(t){return i(this,t,arguments[1])}})},function(t,e,r){"use strict";var n=r(33),i=r(0),o=r(11),a=r(176),f=r(125),s=r(10),u=r(119),h=r(142);i(i.S+i.F*!r(84)(function(t){Array.from(t)}),"Array",{from:function(t){var e,r,i,c,d=o(t),l="function"==typeof this?this:Array,p=arguments.length,b=p>1?arguments[1]:void 0,v=void 0!==b,y=0,m=h(d);if(v&&(b=n(b,p>2?arguments[2]:void 0,2)),void 0==m||l==Array&&f(m))for(e=s(d.length),r=new l(e);e>y;y++)u(r,y,v?b(d[y],y):d[y]);else for(c=m.call(d),r=new l;!(i=c.next()).done;y++)u(r,y,v?a(c,b,[i.value,y],!0):i.value);return r.length=y,r}})},function(t,e,r){"use strict";var n=r(0),i=r(78)(!1),o=[].indexOf,a=!!o&&1/[1].indexOf(1,-0)<0;n(n.P+n.F*(a||!r(25)(o)),"Array",{indexOf:function(t){return a?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},function(t,e,r){var n=r(0);n(n.S,"Array",{isArray:r(126)})},function(t,e,r){"use strict";var n=r(0),i=r(17),o=[].join;n(n.P+n.F*(r(65)!=Object||!r(25)(o)),"Array",{join:function(t){return o.call(i(this),void 0===t?",":t)}})},function(t,e,r){"use strict";var n=r(0),i=r(17),o=r(38),a=r(10),f=[].lastIndexOf,s=!!f&&1/[1].lastIndexOf(1,-0)<0;n(n.P+n.F*(s||!r(25)(f)),"Array",{lastIndexOf:function(t){if(s)return f.apply(this,arguments)||0;var e=i(this),r=a(e.length),n=r-1;for(arguments.length>1&&(n=Math.min(n,o(arguments[1]))),n<0&&(n=r+n);n>=0;n--)if(n in e&&e[n]===t)return n||0;return-1}})},function(t,e,r){"use strict";var n=r(0),i=r(27)(1);n(n.P+n.F*!r(25)([].map,!0),"Array",{map:function(t){return i(this,t,arguments[1])}})},function(t,e,r){"use strict";var n=r(0),i=r(119);n(n.S+n.F*r(5)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments.length,r=new("function"==typeof this?this:Array)(e);e>t;)i(r,t,arguments[t++]);return r.length=e,r}})},function(t,e,r){"use strict";var n=r(0),i=r(169);n(n.P+n.F*!r(25)([].reduceRight,!0),"Array",{reduceRight:function(t){return i(this,t,arguments.length,arguments[1],!0)}})},function(t,e,r){"use strict";var n=r(0),i=r(169);n(n.P+n.F*!r(25)([].reduce,!0),"Array",{reduce:function(t){return i(this,t,arguments.length,arguments[1],!1)}})},function(t,e,r){"use strict";var n=r(0),i=r(123),o=r(23),a=r(47),f=r(10),s=[].slice;n(n.P+n.F*r(5)(function(){i&&s.call(i)}),"Array",{slice:function(t,e){var r=f(this.length),n=o(this);if(e=void 0===e?r:e,"Array"==n)return s.call(this,t,e);for(var i=a(t,r),u=a(e,r),h=f(u-i),c=Array(h),d=0;d<h;d++)c[d]="String"==n?this.charAt(i+d):this[i+d];return c}})},function(t,e,r){"use strict";var n=r(0),i=r(27)(3);n(n.P+n.F*!r(25)([].some,!0),"Array",{some:function(t){return i(this,t,arguments[1])}})},function(t,e,r){"use strict";var n=r(0),i=r(13),o=r(11),a=r(5),f=[].sort,s=[1,2,3];n(n.P+n.F*(a(function(){s.sort(void 0)})||!a(function(){s.sort(null)})||!r(25)(f)),"Array",{sort:function(t){return void 0===t?f.call(o(this)):f.call(o(this),i(t))}})},function(t,e,r){r(46)("Array")},function(t,e,r){var n=r(0);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,e,r){"use strict";var n=r(0),i=r(5),o=Date.prototype.getTime,a=function(t){return t>9?t:"0"+t};n(n.P+n.F*(i(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!i(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),r=t.getUTCMilliseconds(),n=e<0?"-":e>9999?"+":"";return n+("00000"+Math.abs(e)).slice(n?-6:-4)+"-"+a(t.getUTCMonth()+1)+"-"+a(t.getUTCDate())+"T"+a(t.getUTCHours())+":"+a(t.getUTCMinutes())+":"+a(t.getUTCSeconds())+"."+(r>99?r:"0"+a(r))+"Z"}})},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(29);n(n.P+n.F*r(5)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(t){var e=i(this),r=o(e);return"number"!=typeof r||isFinite(r)?e.toISOString():null}})},function(t,e,r){var n=r(7)("toPrimitive"),i=Date.prototype;n in i||r(14)(i,n,r(284))},function(t,e,r){var n=Date.prototype,i="Invalid Date",o="toString",a=n[o],f=n.getTime;new Date(NaN)+""!=i&&r(15)(n,o,function(){var t=f.call(this);return t===t?a.call(this):i})},function(t,e,r){var n=r(0);n(n.P,"Function",{bind:r(170)})},function(t,e,r){"use strict";var n=r(6),i=r(21),o=r(7)("hasInstance"),a=Function.prototype;o in a||r(9).f(a,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,r){var n=r(9).f,i=r(37),o=r(12),a=Function.prototype,f=/^\s*function ([^ (]*)/,s="name",u=Object.isExtensible||function(){return!0};s in a||r(8)&&n(a,s,{configurable:!0,get:function(){try{var t=this,e=(""+t).match(f)[1];return o(t,s)||!u(t)||n(t,s,i(5,e)),e}catch(t){return""}}})},function(t,e,r){var n=r(0),i=r(178),o=Math.sqrt,a=Math.acosh;n(n.S+n.F*!(a&&710==Math.floor(a(Number.MAX_VALUE))&&a(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},function(t,e,r){function n(t){return isFinite(t=+t)&&0!=t?t<0?-n(-t):Math.log(t+Math.sqrt(t*t+1)):t}var i=r(0),o=Math.asinh;i(i.S+i.F*!(o&&1/o(0)>0),"Math",{asinh:n})},function(t,e,r){var n=r(0),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},function(t,e,r){var n=r(0),i=r(130);n(n.S,"Math",{cbrt:function(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},function(t,e,r){var n=r(0),i=Math.exp;n(n.S,"Math",{cosh:function(t){return(i(t=+t)+i(-t))/2}})},function(t,e,r){var n=r(0),i=r(129);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,e,r){var n=r(0),i=r(130),o=Math.pow,a=o(2,-52),f=o(2,-23),s=o(2,127)*(2-f),u=o(2,-126),h=function(t){return t+1/a-1/a};n(n.S,"Math",{fround:function(t){var e,r,n=Math.abs(t),o=i(t);return n<u?o*h(n/u/f)*u*f:(e=(1+f/a)*n,r=e-(e-n),r>s||r!=r?o*(1/0):o*r)}})},function(t,e,r){var n=r(0),i=Math.abs;n(n.S,"Math",{hypot:function(t,e){for(var r,n,o=0,a=0,f=arguments.length,s=0;a<f;)r=i(arguments[a++]),s<r?(n=s/r,o=o*n*n+1,s=r):r>0?(n=r/s,o+=n*n):o+=r;return s===1/0?1/0:s*Math.sqrt(o)}})},function(t,e,r){var n=r(0),i=Math.imul;n(n.S+n.F*r(5)(function(){return i(4294967295,5)!=-5||2!=i.length}),"Math",{imul:function(t,e){var r=65535,n=+t,i=+e,o=r&n,a=r&i;return 0|o*a+((r&n>>>16)*a+o*(r&i>>>16)<<16>>>0)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log10:function(t){return Math.log(t)/Math.LN10}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log1p:r(178)})},function(t,e,r){var n=r(0);n(n.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},function(t,e,r){var n=r(0);n(n.S,"Math",{sign:r(130)})},function(t,e,r){var n=r(0),i=r(129),o=Math.exp;n(n.S+n.F*r(5)(function(){return!Math.sinh(-2e-17)!=-2e-17}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},function(t,e,r){var n=r(0),i=r(129),o=Math.exp;n(n.S,"Math",{tanh:function(t){var e=i(t=+t),r=i(-t);return e==1/0?1:r==1/0?-1:(e-r)/(o(t)+o(-t))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},function(t,e,r){"use strict";var n=r(4),i=r(12),o=r(23),a=r(124),f=r(29),s=r(5),u=r(43).f,h=r(20).f,c=r(9).f,d=r(58).trim,l="Number",p=n[l],b=p,v=p.prototype,y=o(r(42)(v))==l,m="trim"in String.prototype,g=function(t){var e=f(t,!1);if("string"==typeof e&&e.length>2){e=m?e.trim():d(e,3);var r,n,i,o=e.charCodeAt(0);if(43===o||45===o){if(r=e.charCodeAt(2),88===r||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var a,s=e.slice(2),u=0,h=s.length;u<h;u++)if(a=s.charCodeAt(u),a<48||a>i)return NaN;return parseInt(s,n)}}return+e};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function(t){var e=arguments.length<1?0:t,r=this;return r instanceof p&&(y?s(function(){v.valueOf.call(r)}):o(r)!=l)?a(new b(g(e)),r,p):g(e)};for(var w,_=r(8)?u(b):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),M=0;_.length>M;M++)i(b,w=_[M])&&!i(p,w)&&c(p,w,h(b,w));p.prototype=v,v.constructor=p,r(15)(n,l,p)}},function(t,e,r){var n=r(0);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,e,r){var n=r(0),i=r(4).isFinite;n(n.S,"Number",{isFinite:function(t){return"number"==typeof t&&i(t)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{isInteger:r(175)})},function(t,e,r){var n=r(0);n(n.S,"Number",{isNaN:function(t){return t!=t}})},function(t,e,r){var n=r(0),i=r(175),o=Math.abs;n(n.S,"Number",{isSafeInteger:function(t){return i(t)&&o(t)<=9007199254740991}})},function(t,e,r){var n=r(0);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,r){var n=r(0);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,r){var n=r(0),i=r(185);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},function(t,e,r){var n=r(0),i=r(186);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},function(t,e,r){"use strict";var n=r(0),i=r(38),o=r(166),a=r(137),f=1..toFixed,s=Math.floor,u=[0,0,0,0,0,0],h="Number.toFixed: incorrect invocation!",c="0",d=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*u[r],u[r]=n%1e7,n=s(n/1e7)},l=function(t){for(var e=6,r=0;--e>=0;)r+=u[e],u[e]=s(r/t),r=r%t*1e7},p=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==u[t]){var r=String(u[t]);e=""===e?r:e+a.call(c,7-r.length)+r}return e},b=function(t,e,r){return 0===e?r:e%2===1?b(t,e-1,r*t):b(t*t,e/2,r)},v=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e};n(n.P+n.F*(!!f&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(5)(function(){f.call({})})),"Number",{toFixed:function(t){var e,r,n,f,s=o(this,h),u=i(t),y="",m=c;if(u<0||u>20)throw RangeError(h);if(s!=s)return"NaN";if(s<=-1e21||s>=1e21)return String(s);if(s<0&&(y="-",s=-s),s>1e-21)if(e=v(s*b(2,69,1))-69,r=e<0?s*b(2,-e,1):s/b(2,e,1),r*=4503599627370496,e=52-e,e>0){for(d(0,r),n=u;n>=7;)d(1e7,0),n-=7;for(d(b(10,n,1),0),n=e-1;n>=23;)l(1<<23),n-=23;l(1<<n),d(1,1),l(2),m=p()}else d(0,r),d(1<<-e,0),m=p()+a.call(c,u);return u>0?(f=m.length,m=y+(f<=u?"0."+a.call(c,u-f)+m:m.slice(0,f-u)+"."+m.slice(f-u))):m=y+m,m}})},function(t,e,r){"use strict";var n=r(0),i=r(5),o=r(166),a=1..toPrecision;n(n.P+n.F*(i(function(){return"1"!==a.call(1,void 0)})||!i(function(){a.call({})})),"Number",{toPrecision:function(t){var e=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?a.call(e):a.call(e,t)}})},function(t,e,r){var n=r(0);n(n.S+n.F,"Object",{assign:r(179)})},function(t,e,r){var n=r(0);n(n.S,"Object",{create:r(42)})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperties:r(180)})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperty:r(9).f})},function(t,e,r){var n=r(6),i=r(36).onFreeze;r(28)("freeze",function(t){return function(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(17),i=r(20).f;r(28)("getOwnPropertyDescriptor",function(){return function(t,e){return i(n(t),e)}})},function(t,e,r){r(28)("getOwnPropertyNames",function(){return r(181).f})},function(t,e,r){var n=r(11),i=r(21);r(28)("getPrototypeOf",function(){return function(t){return i(n(t))}})},function(t,e,r){var n=r(6);r(28)("isExtensible",function(t){return function(e){return!!n(e)&&(!t||t(e))}})},function(t,e,r){var n=r(6);r(28)("isFrozen",function(t){return function(e){return!n(e)||!!t&&t(e)}})},function(t,e,r){var n=r(6);r(28)("isSealed",function(t){return function(e){return!n(e)||!!t&&t(e)}})},function(t,e,r){var n=r(0);n(n.S,"Object",{is:r(187)})},function(t,e,r){var n=r(11),i=r(44);r(28)("keys",function(){return function(t){return i(n(t))}})},function(t,e,r){var n=r(6),i=r(36).onFreeze;r(28)("preventExtensions",function(t){return function(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(6),i=r(36).onFreeze;r(28)("seal",function(t){return function(e){return t&&n(e)?t(i(e)):e}})},function(t,e,r){var n=r(0);n(n.S,"Object",{setPrototypeOf:r(132).set})},function(t,e,r){"use strict";var n=r(64),i={};i[r(7)("toStringTag")]="z",i+""!="[object z]"&&r(15)(Object.prototype,"toString",function(){return"[object "+n(this)+"]"},!0)},function(t,e,r){var n=r(0),i=r(185);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},function(t,e,r){var n=r(0),i=r(186);n(n.G+n.F*(parseInt!=i),{parseInt:i})},function(t,e,r){"use strict";var n,i,o,a=r(41),f=r(4),s=r(33),u=r(64),h=r(0),c=r(6),d=r(13),l=r(40),p=r(55),b=r(134),v=r(139).set,y=r(131)(),m="Promise",g=f.TypeError,w=f.process,_=f[m],w=f.process,M="process"==u(w),S=function(){},E=!!function(){try{var t=_.resolve(1),e=(t.constructor={})[r(7)("species")]=function(t){t(S,S)};return(M||"function"==typeof PromiseRejectionEvent)&&t.then(S)instanceof e}catch(t){}}(),A=function(t,e){return t===e||t===_&&e===o},k=function(t){var e;return!(!c(t)||"function"!=typeof(e=t.then))&&e},x=function(t){return A(_,t)?new I(t):new i(t)},I=i=function(t){var e,r;this.promise=new t(function(t,n){if(void 0!==e||void 0!==r)throw g("Bad Promise constructor");e=t,r=n}),this.resolve=d(e),this.reject=d(r)},B=function(t){try{t()}catch(t){return{error:t}}},O=function(t,e){if(!t._n){t._n=!0;var r=t._c;y(function(){for(var n=t._v,i=1==t._s,o=0,a=function(e){var r,o,a=i?e.ok:e.fail,f=e.resolve,s=e.reject,u=e.domain;try{a?(i||(2==t._h&&T(t),t._h=1),a===!0?r=n:(u&&u.enter(),r=a(n),u&&u.exit()),r===e.promise?s(g("Promise-chain cycle")):(o=k(r))?o.call(r,f,s):f(r)):s(n)}catch(t){s(t)}};r.length>o;)a(r[o++]);t._c=[],t._n=!1,e&&!t._h&&R(t)})}},R=function(t){v.call(f,function(){var e,r,n,i=t._v;if(P(t)&&(e=B(function(){M?w.emit("unhandledRejection",i,t):(r=f.onunhandledrejection)?r({promise:t,reason:i}):(n=f.console)&&n.error&&n.error("Unhandled promise rejection",i)}),t._h=M||P(t)?2:1),t._a=void 0,e)throw e.error})},P=function(t){if(1==t._h)return!1;for(var e,r=t._a||t._c,n=0;r.length>n;)if(e=r[n++],e.fail||!P(e.promise))return!1;return!0},T=function(t){v.call(f,function(){var e;M?w.emit("rejectionHandled",t):(e=f.onrejectionhandled)&&e({promise:t,reason:t._v})})},j=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),O(e,!0))},C=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw g("Promise can't be resolved itself");(e=k(t))?y(function(){var n={_w:r,_d:!1};try{e.call(t,s(C,n,1),s(j,n,1))}catch(t){j.call(n,t)}}):(r._v=t,r._s=1,O(r,!1))}catch(t){j.call({_w:r,_d:!1},t)}}};E||(_=function(t){l(this,_,m,"_h"),d(t),n.call(this);try{t(s(C,this,1),s(j,this,1))}catch(t){j.call(this,t)}},n=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},n.prototype=r(45)(_.prototype,{then:function(t,e){var r=x(b(this,_));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=M?w.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&O(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),I=function(){var t=new n;this.promise=t,this.resolve=s(C,t,1),this.reject=s(j,t,1)}),h(h.G+h.W+h.F*!E,{Promise:_}),r(57)(_,m),r(46)(m),o=r(32)[m],h(h.S+h.F*!E,m,{reject:function(t){var e=x(this),r=e.reject;return r(t),e.promise}}),h(h.S+h.F*(a||!E),m,{resolve:function(t){if(t instanceof _&&A(t.constructor,this))return t;var e=x(this),r=e.resolve;return r(t),e.promise}}),h(h.S+h.F*!(E&&r(84)(function(t){_.all(t).catch(S)})),m,{all:function(t){var e=this,r=x(e),n=r.resolve,i=r.reject,o=B(function(){var r=[],o=0,a=1;p(t,!1,function(t){var f=o++,s=!1;r.push(void 0),a++,e.resolve(t).then(function(t){s||(s=!0,r[f]=t,--a||n(r))},i)}),--a||n(r)});return o&&i(o.error),r.promise},race:function(t){var e=this,r=x(e),n=r.reject,i=B(function(){p(t,!1,function(t){e.resolve(t).then(r.resolve,n)})});return i&&n(i.error),r.promise}})},function(t,e,r){var n=r(0),i=r(13),o=r(3),a=(r(4).Reflect||{}).apply,f=Function.apply;n(n.S+n.F*!r(5)(function(){a(function(){})}),"Reflect",{apply:function(t,e,r){var n=i(t),s=o(r);return a?a(n,e,s):f.call(n,e,s)}})},function(t,e,r){var n=r(0),i=r(42),o=r(13),a=r(3),f=r(6),s=r(5),u=r(170),h=(r(4).Reflect||{}).construct,c=s(function(){function t(){}return!(h(function(){},[],t)instanceof t)}),d=!s(function(){h(function(){})});n(n.S+n.F*(c||d),"Reflect",{construct:function(t,e){o(t),a(e);var r=arguments.length<3?t:o(arguments[2]);if(d&&!c)return h(t,e,r);if(t==r){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(u.apply(t,n))}var s=r.prototype,l=i(f(s)?s:Object.prototype),p=Function.apply.call(t,l,e);return f(p)?p:l}})},function(t,e,r){var n=r(9),i=r(0),o=r(3),a=r(29);i(i.S+i.F*r(5)(function(){Reflect.defineProperty(n.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,r){o(t),e=a(e,!0),o(r);try{return n.f(t,e,r),!0}catch(t){return!1}}})},function(t,e,r){var n=r(0),i=r(20).f,o=r(3);n(n.S,"Reflect",{deleteProperty:function(t,e){var r=i(o(t),e);return!(r&&!r.configurable)&&delete t[e]}})},function(t,e,r){"use strict";var n=r(0),i=r(3),o=function(t){this._t=i(t),this._i=0;var e,r=this._k=[];for(e in t)r.push(e)};r(127)(o,"Object",function(){var t,e=this,r=e._k;do if(e._i>=r.length)return{value:void 0,done:!0};while(!((t=r[e._i++])in e._t));return{value:t,done:!1}}),n(n.S,"Reflect",{enumerate:function(t){return new o(t)}})},function(t,e,r){var n=r(20),i=r(0),o=r(3);i(i.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return n.f(o(t),e)}})},function(t,e,r){var n=r(0),i=r(21),o=r(3);n(n.S,"Reflect",{getPrototypeOf:function(t){return i(o(t))}})},function(t,e,r){function n(t,e){var r,f,h=arguments.length<3?t:arguments[2];return u(t)===h?t[e]:(r=i.f(t,e))?a(r,"value")?r.value:void 0!==r.get?r.get.call(h):void 0:s(f=o(t))?n(f,e,h):void 0}var i=r(20),o=r(21),a=r(12),f=r(0),s=r(6),u=r(3);f(f.S,"Reflect",{get:n})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{has:function(t,e){return e in t}})},function(t,e,r){var n=r(0),i=r(3),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function(t){return i(t),!o||o(t)}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{ownKeys:r(184)})},function(t,e,r){var n=r(0),i=r(3),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},function(t,e,r){var n=r(0),i=r(132);i&&n(n.S,"Reflect",{setPrototypeOf:function(t,e){i.check(t,e);try{return i.set(t,e),!0}catch(t){return!1}}})},function(t,e,r){function n(t,e,r){var s,d,l=arguments.length<4?t:arguments[3],p=o.f(h(t),e);if(!p){if(c(d=a(t)))return n(d,e,r,l);p=u(0)}return f(p,"value")?!(p.writable===!1||!c(l))&&(s=o.f(l,e)||u(0),s.value=r,i.f(l,e,s),!0):void 0!==p.set&&(p.set.call(l,r),!0)}var i=r(9),o=r(20),a=r(21),f=r(12),s=r(0),u=r(37),h=r(3),c=r(6);s(s.S,"Reflect",{set:n})},function(t,e,r){var n=r(4),i=r(124),o=r(9).f,a=r(43).f,f=r(83),s=r(81),u=n.RegExp,h=u,c=u.prototype,d=/a/g,l=/a/g,p=new u(d)!==d;if(r(8)&&(!p||r(5)(function(){return l[r(7)("match")]=!1,u(d)!=d||u(l)==l||"/a/i"!=u(d,"i")}))){u=function(t,e){var r=this instanceof u,n=f(t),o=void 0===e;return!r&&n&&t.constructor===u&&o?t:i(p?new h(n&&!o?t.source:t,e):h((n=t instanceof u)?t.source:t,n&&o?s.call(t):e),r?this:c,u)};for(var b=(function(t){t in u||o(u,t,{configurable:!0,get:function(){return h[t]},set:function(e){h[t]=e}})}),v=a(h),y=0;v.length>y;)b(v[y++]);c.constructor=u,u.prototype=c,r(15)(n,"RegExp",u)}r(46)("RegExp")},function(t,e,r){r(80)("match",1,function(t,e,r){return[function(r){"use strict";var n=t(this),i=void 0==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},r]})},function(t,e,r){
|
||
r(80)("replace",2,function(t,e,r){return[function(n,i){"use strict";var o=t(this),a=void 0==n?void 0:n[e];return void 0!==a?a.call(n,o,i):r.call(String(o),n,i)},r]})},function(t,e,r){r(80)("search",1,function(t,e,r){return[function(r){"use strict";var n=t(this),i=void 0==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},r]})},function(t,e,r){r(80)("split",2,function(t,e,n){"use strict";var i=r(83),o=n,a=[].push,f="split",s="length",u="lastIndex";if("c"=="abbc"[f](/(b)*/)[1]||4!="test"[f](/(?:)/,-1)[s]||2!="ab"[f](/(?:ab)*/)[s]||4!="."[f](/(.?)(.?)/)[s]||"."[f](/()()/)[s]>1||""[f](/.?/)[s]){var h=void 0===/()??/.exec("")[1];n=function(t,e){var r=String(this);if(void 0===t&&0===e)return[];if(!i(t))return o.call(r,t,e);var n,f,c,d,l,p=[],b=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),v=0,y=void 0===e?4294967295:e>>>0,m=new RegExp(t.source,b+"g");for(h||(n=new RegExp("^"+m.source+"$(?!\\s)",b));(f=m.exec(r))&&(c=f.index+f[0][s],!(c>v&&(p.push(r.slice(v,f.index)),!h&&f[s]>1&&f[0].replace(n,function(){for(l=1;l<arguments[s]-2;l++)void 0===arguments[l]&&(f[l]=void 0)}),f[s]>1&&f.index<r[s]&&a.apply(p,f.slice(1)),d=f[0][s],v=c,p[s]>=y)));)m[u]===f.index&&m[u]++;return v===r[s]?!d&&m.test("")||p.push(""):p.push(r.slice(v)),p[s]>y?p.slice(0,y):p}}else"0"[f](void 0,0)[s]&&(n=function(t,e){return void 0===t&&0===e?[]:o.call(this,t,e)});return[function(r,i){var o=t(this),a=void 0==r?void 0:r[e];return void 0!==a?a.call(r,o,i):n.call(String(o),r,i)},n]})},function(t,e,r){"use strict";r(191);var n=r(3),i=r(81),o=r(8),a="toString",f=/./[a],s=function(t){r(15)(RegExp.prototype,a,t,!0)};r(5)(function(){return"/a/b"!=f.call({source:"a",flags:"b"})})?s(function(){var t=n(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)}):f.name!=a&&s(function(){return f.call(this)})},function(t,e,r){"use strict";r(16)("anchor",function(t){return function(e){return t(this,"a","name",e)}})},function(t,e,r){"use strict";r(16)("big",function(t){return function(){return t(this,"big","","")}})},function(t,e,r){"use strict";r(16)("blink",function(t){return function(){return t(this,"blink","","")}})},function(t,e,r){"use strict";r(16)("bold",function(t){return function(){return t(this,"b","","")}})},function(t,e,r){"use strict";var n=r(0),i=r(135)(!1);n(n.P,"String",{codePointAt:function(t){return i(this,t)}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(136),a="endsWith",f=""[a];n(n.P+n.F*r(122)(a),"String",{endsWith:function(t){var e=o(this,t,a),r=arguments.length>1?arguments[1]:void 0,n=i(e.length),s=void 0===r?n:Math.min(i(r),n),u=String(t);return f?f.call(e,u,s):e.slice(s-u.length,s)===u}})},function(t,e,r){"use strict";r(16)("fixed",function(t){return function(){return t(this,"tt","","")}})},function(t,e,r){"use strict";r(16)("fontcolor",function(t){return function(e){return t(this,"font","color",e)}})},function(t,e,r){"use strict";r(16)("fontsize",function(t){return function(e){return t(this,"font","size",e)}})},function(t,e,r){var n=r(0),i=r(47),o=String.fromCharCode,a=String.fromCodePoint;n(n.S+n.F*(!!a&&1!=a.length),"String",{fromCodePoint:function(t){for(var e,r=[],n=arguments.length,a=0;n>a;){if(e=+arguments[a++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");r.push(e<65536?o(e):o(((e-=65536)>>10)+55296,e%1024+56320))}return r.join("")}})},function(t,e,r){"use strict";var n=r(0),i=r(136),o="includes";n(n.P+n.F*r(122)(o),"String",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,r){"use strict";r(16)("italics",function(t){return function(){return t(this,"i","","")}})},function(t,e,r){"use strict";var n=r(135)(!0);r(128)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,r=this._i;return r>=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})})},function(t,e,r){"use strict";r(16)("link",function(t){return function(e){return t(this,"a","href",e)}})},function(t,e,r){var n=r(0),i=r(17),o=r(10);n(n.S,"String",{raw:function(t){for(var e=i(t.raw),r=o(e.length),n=arguments.length,a=[],f=0;r>f;)a.push(String(e[f++])),f<n&&a.push(String(arguments[f]));return a.join("")}})},function(t,e,r){var n=r(0);n(n.P,"String",{repeat:r(137)})},function(t,e,r){"use strict";r(16)("small",function(t){return function(){return t(this,"small","","")}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(136),a="startsWith",f=""[a];n(n.P+n.F*r(122)(a),"String",{startsWith:function(t){var e=o(this,t,a),r=i(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),n=String(t);return f?f.call(e,n,r):e.slice(r,r+n.length)===n}})},function(t,e,r){"use strict";r(16)("strike",function(t){return function(){return t(this,"strike","","")}})},function(t,e,r){"use strict";r(16)("sub",function(t){return function(){return t(this,"sub","","")}})},function(t,e,r){"use strict";r(16)("sup",function(t){return function(){return t(this,"sup","","")}})},function(t,e,r){"use strict";r(58)("trim",function(t){return function(){return t(this,3)}})},function(t,e,r){"use strict";var n=r(4),i=r(12),o=r(8),a=r(0),f=r(15),s=r(36).KEY,u=r(5),h=r(87),c=r(57),d=r(48),l=r(7),p=r(189),b=r(141),v=r(286),y=r(285),m=r(126),g=r(3),w=r(17),_=r(29),M=r(37),S=r(42),E=r(181),A=r(20),k=r(9),x=r(44),I=A.f,B=k.f,O=E.f,R=n.Symbol,P=n.JSON,T=P&&P.stringify,j="prototype",C=l("_hidden"),N=l("toPrimitive"),L={}.propertyIsEnumerable,U=h("symbol-registry"),z=h("symbols"),D=h("op-symbols"),q=Object[j],F="function"==typeof R,K=n.QObject,G=!K||!K[j]||!K[j].findChild,V=o&&u(function(){return 7!=S(B({},"a",{get:function(){return B(this,"a",{value:7}).a}})).a})?function(t,e,r){var n=I(q,e);n&&delete q[e],B(t,e,r),n&&t!==q&&B(q,e,n)}:B,H=function(t){var e=z[t]=S(R[j]);return e._k=t,e},X=F&&"symbol"==typeof R.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof R},Y=function(t,e,r){return t===q&&Y(D,e,r),g(t),e=_(e,!0),g(r),i(z,e)?(r.enumerable?(i(t,C)&&t[C][e]&&(t[C][e]=!1),r=S(r,{enumerable:M(0,!1)})):(i(t,C)||B(t,C,M(1,{})),t[C][e]=!0),V(t,e,r)):B(t,e,r)},W=function(t,e){g(t);for(var r,n=y(e=w(e)),i=0,o=n.length;o>i;)Y(t,r=n[i++],e[r]);return t},Z=function(t,e){return void 0===e?S(t):W(S(t),e)},J=function(t){var e=L.call(this,t=_(t,!0));return!(this===q&&i(z,t)&&!i(D,t))&&(!(e||!i(this,t)||!i(z,t)||i(this,C)&&this[C][t])||e)},$=function(t,e){if(t=w(t),e=_(e,!0),t!==q||!i(z,e)||i(D,e)){var r=I(t,e);return!r||!i(z,e)||i(t,C)&&t[C][e]||(r.enumerable=!0),r}},Q=function(t){for(var e,r=O(w(t)),n=[],o=0;r.length>o;)i(z,e=r[o++])||e==C||e==s||n.push(e);return n},tt=function(t){for(var e,r=t===q,n=O(r?D:w(t)),o=[],a=0;n.length>a;)!i(z,e=n[a++])||r&&!i(q,e)||o.push(z[e]);return o};F||(R=function(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var t=d(arguments.length>0?arguments[0]:void 0),e=function(r){this===q&&e.call(D,r),i(this,C)&&i(this[C],t)&&(this[C][t]=!1),V(this,t,M(1,r))};return o&&G&&V(q,t,{configurable:!0,set:e}),H(t)},f(R[j],"toString",function(){return this._k}),A.f=$,k.f=Y,r(43).f=E.f=Q,r(66).f=J,r(86).f=tt,o&&!r(41)&&f(q,"propertyIsEnumerable",J,!0),p.f=function(t){return H(l(t))}),a(a.G+a.W+a.F*!F,{Symbol:R});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),rt=0;et.length>rt;)l(et[rt++]);for(var et=x(l.store),rt=0;et.length>rt;)b(et[rt++]);a(a.S+a.F*!F,"Symbol",{for:function(t){return i(U,t+="")?U[t]:U[t]=R(t)},keyFor:function(t){if(X(t))return v(U,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){G=!0},useSimple:function(){G=!1}}),a(a.S+a.F*!F,"Object",{create:Z,defineProperty:Y,defineProperties:W,getOwnPropertyDescriptor:$,getOwnPropertyNames:Q,getOwnPropertySymbols:tt}),P&&a(a.S+a.F*(!F||u(function(){var t=R();return"[null]"!=T([t])||"{}"!=T({a:t})||"{}"!=T(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!X(t)){for(var e,r,n=[t],i=1;arguments.length>i;)n.push(arguments[i++]);return e=n[1],"function"==typeof e&&(r=e),!r&&m(e)||(e=function(t,e){if(r&&(e=r.call(this,t,e)),!X(e))return e}),n[1]=e,T.apply(P,n)}}}),R[j][N]||r(14)(R[j],N,R[j].valueOf),c(R,"Symbol"),c(Math,"Math",!0),c(n.JSON,"JSON",!0)},function(t,e,r){"use strict";var n=r(0),i=r(88),o=r(140),a=r(3),f=r(47),s=r(10),u=r(6),h=r(4).ArrayBuffer,c=r(134),d=o.ArrayBuffer,l=o.DataView,p=i.ABV&&h.isView,b=d.prototype.slice,v=i.VIEW,y="ArrayBuffer";n(n.G+n.W+n.F*(h!==d),{ArrayBuffer:d}),n(n.S+n.F*!i.CONSTR,y,{isView:function(t){return p&&p(t)||u(t)&&v in t}}),n(n.P+n.U+n.F*r(5)(function(){return!new d(2).slice(1,void 0).byteLength}),y,{slice:function(t,e){if(void 0!==b&&void 0===e)return b.call(a(this),t);for(var r=a(this).byteLength,n=f(t,r),i=f(void 0===e?r:e,r),o=new(c(this,d))(s(i-n)),u=new l(this),h=new l(o),p=0;n<i;)h.setUint8(p++,u.getUint8(n++));return o}}),r(46)(y)},function(t,e,r){var n=r(0);n(n.G+n.W+n.F*!r(88).ABV,{DataView:r(140).DataView})},function(t,e,r){r(35)("Float32",4,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Float64",8,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Int16",2,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Int32",4,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Int8",1,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Uint16",2,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Uint32",4,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Uint8",1,function(t){return function(e,r,n){return t(this,e,r,n)}})},function(t,e,r){r(35)("Uint8",1,function(t){return function(e,r,n){return t(this,e,r,n)}},!0)},function(t,e,r){"use strict";var n=r(173);r(79)("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return n.def(this,t,!0)}},n,!1,!0)},function(t,e,r){"use strict";var n=r(0),i=r(78)(!0);n(n.P,"Array",{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(54)("includes")},function(t,e,r){var n=r(0),i=r(131)(),o=r(4).process,a="process"==r(23)(o);n(n.G,{asap:function(t){var e=a&&o.domain;i(e?e.bind(t):t)}})},function(t,e,r){var n=r(0),i=r(23);n(n.S,"Error",{isError:function(t){return"Error"===i(t)}})},function(t,e,r){var n=r(0);n(n.P+n.R,"Map",{toJSON:r(172)("Map")})},function(t,e,r){var n=r(0);n(n.S,"Math",{iaddh:function(t,e,r,n){var i=t>>>0,o=e>>>0,a=r>>>0;return o+(n>>>0)+((i&a|(i|a)&~(i+a>>>0))>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{imulh:function(t,e){var r=65535,n=+t,i=+e,o=n&r,a=i&r,f=n>>16,s=i>>16,u=(f*a>>>0)+(o*a>>>16);return f*s+(u>>16)+((o*s>>>0)+(u&r)>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{isubh:function(t,e,r,n){var i=t>>>0,o=e>>>0,a=r>>>0;return o-(n>>>0)-((~i&a|~(i^a)&i-a>>>0)>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{umulh:function(t,e){var r=65535,n=+t,i=+e,o=n&r,a=i&r,f=n>>>16,s=i>>>16,u=(f*a>>>0)+(o*a>>>16);return f*s+(u>>>16)+((o*s>>>0)+(u&r)>>>16)}})},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(13),a=r(9);r(8)&&n(n.P+r(85),"Object",{__defineGetter__:function(t,e){a.f(i(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(13),a=r(9);r(8)&&n(n.P+r(85),"Object",{__defineSetter__:function(t,e){a.f(i(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},function(t,e,r){var n=r(0),i=r(183)(!0);n(n.S,"Object",{entries:function(t){return i(t)}})},function(t,e,r){var n=r(0),i=r(184),o=r(17),a=r(20),f=r(119);n(n.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,r=o(t),n=a.f,s=i(r),u={},h=0;s.length>h;)f(u,e=s[h++],n(r,e));return u}})},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(29),a=r(21),f=r(20).f;r(8)&&n(n.P+r(85),"Object",{__lookupGetter__:function(t){var e,r=i(this),n=o(t,!0);do if(e=f(r,n))return e.get;while(r=a(r))}})},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(29),a=r(21),f=r(20).f;r(8)&&n(n.P+r(85),"Object",{__lookupSetter__:function(t){var e,r=i(this),n=o(t,!0);do if(e=f(r,n))return e.set;while(r=a(r))}})},function(t,e,r){var n=r(0),i=r(183)(!1);n(n.S,"Object",{values:function(t){return i(t)}})},function(t,e,r){"use strict";var n=r(0),i=r(4),o=r(32),a=r(131)(),f=r(7)("observable"),s=r(13),u=r(3),h=r(40),c=r(45),d=r(14),l=r(55),p=l.RETURN,b=function(t){return null==t?void 0:s(t)},v=function(t){var e=t._c;e&&(t._c=void 0,e())},y=function(t){return void 0===t._o},m=function(t){y(t)||(t._o=void 0,v(t))},g=function(t,e){u(t),this._c=void 0,this._o=t,t=new w(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:s(r),this._c=r)}catch(e){return void t.error(e)}y(this)&&v(this)};g.prototype=c({},{unsubscribe:function(){m(this)}});var w=function(t){this._s=t};w.prototype=c({},{next:function(t){var e=this._s;if(!y(e)){var r=e._o;try{var n=b(r.next);if(n)return n.call(r,t)}catch(t){try{m(e)}finally{throw t}}}},error:function(t){var e=this._s;if(y(e))throw t;var r=e._o;e._o=void 0;try{var n=b(r.error);if(!n)throw t;t=n.call(r,t)}catch(t){try{v(e)}finally{throw t}}return v(e),t},complete:function(t){var e=this._s;if(!y(e)){var r=e._o;e._o=void 0;try{var n=b(r.complete);t=n?n.call(r,t):void 0}catch(t){try{v(e)}finally{throw t}}return v(e),t}}});var _=function(t){h(this,_,"Observable","_f")._f=s(t)};c(_.prototype,{subscribe:function(t){return new g(t,this._f)},forEach:function(t){var e=this;return new(o.Promise||i.Promise)(function(r,n){s(t);var i=e.subscribe({next:function(e){try{return t(e)}catch(t){n(t),i.unsubscribe()}},error:n,complete:r})})}}),c(_,{from:function(t){var e="function"==typeof this?this:_,r=b(u(t)[f]);if(r){var n=u(r.call(t));return n.constructor===e?n:new e(function(t){return n.subscribe(t)})}return new e(function(e){var r=!1;return a(function(){if(!r){try{if(l(t,!1,function(t){if(e.next(t),r)return p})===p)return}catch(t){if(r)throw t;return void e.error(t)}e.complete()}}),function(){r=!0}})},of:function(){for(var t=0,e=arguments.length,r=Array(e);t<e;)r[t]=arguments[t++];return new("function"==typeof this?this:_)(function(t){var e=!1;return a(function(){if(!e){for(var n=0;n<r.length;++n)if(t.next(r[n]),e)return;t.complete()}}),function(){e=!0}})}}),d(_.prototype,f,function(){return this}),n(n.G,{Observable:_}),r(46)("Observable")},function(t,e,r){var n=r(34),i=r(3),o=n.key,a=n.set;n.exp({defineMetadata:function(t,e,r,n){a(t,e,i(r),o(n))}})},function(t,e,r){var n=r(34),i=r(3),o=n.key,a=n.map,f=n.store;n.exp({deleteMetadata:function(t,e){var r=arguments.length<3?void 0:o(arguments[2]),n=a(i(e),r,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var s=f.get(e);return s.delete(r),!!s.size||f.delete(e)}})},function(t,e,r){var n=r(192),i=r(168),o=r(34),a=r(3),f=r(21),s=o.keys,u=o.key,h=function(t,e){var r=s(t,e),o=f(t);if(null===o)return r;var a=h(o,e);return a.length?r.length?i(new n(r.concat(a))):a:r};o.exp({getMetadataKeys:function(t){return h(a(t),arguments.length<2?void 0:u(arguments[1]))}})},function(t,e,r){var n=r(34),i=r(3),o=r(21),a=n.has,f=n.get,s=n.key,u=function(t,e,r){var n=a(t,e,r);if(n)return f(t,e,r);var i=o(e);return null!==i?u(t,i,r):void 0};n.exp({getMetadata:function(t,e){return u(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(34),i=r(3),o=n.keys,a=n.key;n.exp({getOwnMetadataKeys:function(t){return o(i(t),arguments.length<2?void 0:a(arguments[1]))}})},function(t,e,r){var n=r(34),i=r(3),o=n.get,a=n.key;n.exp({getOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,r){var n=r(34),i=r(3),o=r(21),a=n.has,f=n.key,s=function(t,e,r){var n=a(t,e,r);if(n)return!0;var i=o(e);return null!==i&&s(t,i,r)};n.exp({hasMetadata:function(t,e){return s(t,i(e),arguments.length<3?void 0:f(arguments[2]))}})},function(t,e,r){var n=r(34),i=r(3),o=n.has,a=n.key;n.exp({hasOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,r){var n=r(34),i=r(3),o=r(13),a=n.key,f=n.set;n.exp({metadata:function(t,e){return function(r,n){f(t,e,(void 0!==n?i:o)(r),a(n))}}})},function(t,e,r){var n=r(0);n(n.P+n.R,"Set",{toJSON:r(172)("Set")})},function(t,e,r){"use strict";var n=r(0),i=r(135)(!0);n(n.P,"String",{at:function(t){return i(this,t)}})},function(t,e,r){"use strict";var n=r(0),i=r(24),o=r(10),a=r(83),f=r(81),s=RegExp.prototype,u=function(t,e){this._r=t,this._s=e};r(127)(u,"RegExp String",function(){var t=this._r.exec(this._s);return{value:t,done:null===t}}),n(n.P,"String",{matchAll:function(t){if(i(this),!a(t))throw TypeError(t+" is not a regexp!");var e=String(this),r="flags"in s?String(t.flags):f.call(t),n=new RegExp(t.source,~r.indexOf("g")?r:"g"+r);return n.lastIndex=o(t.lastIndex),new u(n,e)}})},function(t,e,r){"use strict";var n=r(0),i=r(188);n(n.P,"String",{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},function(t,e,r){"use strict";var n=r(0),i=r(188);n(n.P,"String",{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},function(t,e,r){"use strict";r(58)("trimLeft",function(t){return function(){return t(this,1)}},"trimStart")},function(t,e,r){"use strict";r(58)("trimRight",function(t){return function(){return t(this,2)}},"trimEnd")},function(t,e,r){r(141)("asyncIterator")},function(t,e,r){r(141)("observable")},function(t,e,r){var n=r(0);n(n.S,"System",{global:r(4)})},function(t,e,r){for(var n=r(143),i=r(15),o=r(4),a=r(14),f=r(56),s=r(7),u=s("iterator"),h=s("toStringTag"),c=f.Array,d=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],l=0;l<5;l++){var p,b=d[l],v=o[b],y=v&&v.prototype;if(y){y[u]||a(y,u,c),y[h]||a(y,h,b),f[b]=c;for(p in n)y[p]||i(y,p,n[p],!0)}}},function(t,e,r){var n=r(0),i=r(139);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},function(t,e,r){var n=r(4),i=r(0),o=r(82),a=r(287),f=n.navigator,s=!!f&&/MSIE .\./.test(f.userAgent),u=function(t){return s?function(e,r){return t(o(a,[].slice.call(arguments,2),"function"==typeof e?e:Function(e)),r)}:t};i(i.G+i.B+i.F*s,{setTimeout:u(n.setTimeout),setInterval:u(n.setInterval)})},function(t,e,r){r(410),r(349),r(351),r(350),r(353),r(355),r(360),r(354),r(352),r(362),r(361),r(357),r(358),r(356),r(348),r(359),r(363),r(364),r(316),r(318),r(317),r(366),r(365),r(336),r(346),r(347),r(337),r(338),r(339),r(340),r(341),r(342),r(343),r(344),r(345),r(319),r(320),r(321),r(322),r(323),r(324),r(325),r(326),r(327),r(328),r(329),r(330),r(331),r(332),r(333),r(334),r(335),r(397),r(402),r(409),r(400),r(392),r(393),r(398),r(403),r(405),r(388),r(389),r(390),r(391),r(394),r(395),r(396),r(399),r(401),r(404),r(406),r(407),r(408),r(311),r(313),r(312),r(315),r(314),r(300),r(298),r(304),r(301),r(307),r(309),r(297),r(303),r(294),r(308),r(292),r(306),r(305),r(299),r(302),r(291),r(293),r(296),r(295),r(310),r(143),r(382),r(387),r(191),r(383),r(384),r(385),r(386),r(367),r(190),r(192),r(193),r(422),r(411),r(412),r(417),r(420),r(421),r(415),r(418),r(416),r(419),r(413),r(414),r(368),r(369),r(370),r(371),r(372),r(375),r(373),r(374),r(376),r(377),r(378),r(379),r(381),r(380),r(423),r(449),r(452),r(451),r(453),r(454),r(450),r(455),r(456),r(434),r(437),r(433),r(431),r(432),r(435),r(436),r(426),r(448),r(457),r(425),r(427),r(429),r(428),r(430),r(439),r(440),r(442),r(441),r(444),r(443),r(445),r(446),r(447),r(424),r(438),r(460),r(459),r(458),t.exports=r(32)},function(t,e,r){t.exports=r(463)("ed25519")},function(t,e,r){(function(n,i){function o(t){"string"==typeof t?t={bindings:t}:t||(t={}),t.__proto__=c,t.module_root||(t.module_root=e.getRoot(e.getFileName())),".node"!=f.extname(t.bindings)&&(t.bindings+=".node");for(var r,n,i,o=[],a=0,u=t.try.length;a<u;a++){r=s.apply(null,t.try[a].map(function(e){return t[e]||e})),o.push(r);try{return n=t.path?!function(){var t=new Error('Cannot find module "."');throw t.code="MODULE_NOT_FOUND",t}():!function(){var t=new Error('Cannot find module "."');throw t.code="MODULE_NOT_FOUND",t}(),t.path||(n.path=r),n}catch(t){if(!/not find/i.test(t.message))throw t}}throw i=new Error("Could not locate the bindings file. Tried:\n"+o.map(function(e){return t.arrow+e}).join("\n")),i.tries=o,i}var a=r(489),f=r(594),s=f.join,u=f.dirname,h=a.existsSync||f.existsSync,c={arrow:n.env.NODE_BINDINGS_ARROW||" → ",compiled:n.env.NODE_BINDINGS_COMPILED_DIR||"compiled",platform:n.platform,arch:n.arch,version:n.versions.node,bindings:"bindings.node",try:[["module_root","build","bindings"],["module_root","build","Debug","bindings"],["module_root","build","Release","bindings"],["module_root","out","Debug","bindings"],["module_root","Debug","bindings"],["module_root","out","Release","bindings"],["module_root","Release","bindings"],["module_root","build","default","bindings"],["module_root","compiled","version","platform","arch","bindings"]]};t.exports=e=o,e.getFileName=function(t){var e,r=Error.prepareStackTrace,n=Error.stackTraceLimit,o={};return Error.stackTraceLimit=10,Error.prepareStackTrace=function(r,n){for(var o=0,a=n.length;o<a;o++)if(e=n[o].getFileName(),e!==i){if(!t)return;if(e!==t)return}},Error.captureStackTrace(o),o.stack,Error.prepareStackTrace=r,Error.stackTraceLimit=n,e},e.getRoot=function(t){for(var e,r=u(t);;){if("."===r&&(r=n.cwd()),h(s(r,"package.json"))||h(s(r,"node_modules")))return r;if(e===r)throw new Error('Could not find module root given file: "'+t+'". Do you have a `package.json` file? ');e=r,r=s(r,"..")}}}).call(e,r(26),"/index.js")},function(t,e){t.exports={O_RDONLY:0,O_WRONLY:1,O_RDWR:2,S_IFMT:61440,S_IFREG:32768,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960,S_IFSOCK:49152,O_CREAT:512,O_EXCL:2048,O_NOCTTY:131072,O_TRUNC:1024,O_APPEND:8,O_DIRECTORY:1048576,O_NOFOLLOW:256,O_SYNC:128,O_SYMLINK:2097152,O_NONBLOCK:4,S_IRWXU:448,S_IRUSR:256,S_IWUSR:128,S_IXUSR:64,S_IRWXG:56,S_IRGRP:32,S_IWGRP:16,S_IXGRP:8,S_IRWXO:7,S_IROTH:4,S_IWOTH:2,S_IXOTH:1,E2BIG:7,EACCES:13,EADDRINUSE:48,EADDRNOTAVAIL:49,EAFNOSUPPORT:47,EAGAIN:35,EALREADY:37,EBADF:9,EBADMSG:94,EBUSY:16,ECANCELED:89,ECHILD:10,ECONNABORTED:53,ECONNREFUSED:61,ECONNRESET:54,EDEADLK:11,EDESTADDRREQ:39,EDOM:33,EDQUOT:69,EEXIST:17,EFAULT:14,EFBIG:27,EHOSTUNREACH:65,EIDRM:90,EILSEQ:92,EINPROGRESS:36,EINTR:4,EINVAL:22,EIO:5,EISCONN:56,EISDIR:21,ELOOP:62,EMFILE:24,EMLINK:31,EMSGSIZE:40,EMULTIHOP:95,ENAMETOOLONG:63,ENETDOWN:50,ENETRESET:52,ENETUNREACH:51,ENFILE:23,ENOBUFS:55,ENODATA:96,ENODEV:19,ENOENT:2,ENOEXEC:8,ENOLCK:77,ENOLINK:97,ENOMEM:12,ENOMSG:91,ENOPROTOOPT:42,ENOSPC:28,ENOSR:98,ENOSTR:99,ENOSYS:78,ENOTCONN:57,ENOTDIR:20,ENOTEMPTY:66,ENOTSOCK:38,ENOTSUP:45,ENOTTY:25,ENXIO:6,EOPNOTSUPP:102,EOVERFLOW:84,EPERM:1,EPIPE:32,EPROTO:100,EPROTONOSUPPORT:43,EPROTOTYPE:41,ERANGE:34,EROFS:30,ESPIPE:29,ESRCH:3,ESTALE:70,ETIME:101,ETIMEDOUT:60,ETXTBSY:26,EWOULDBLOCK:35,EXDEV:18,SIGHUP:1,SIGINT:2,SIGQUIT:3,SIGILL:4,SIGTRAP:5,SIGABRT:6,SIGIOT:6,SIGBUS:10,SIGFPE:8,SIGKILL:9,SIGUSR1:30,SIGSEGV:11,SIGUSR2:31,SIGPIPE:13,SIGALRM:14,SIGTERM:15,SIGCHLD:20,SIGCONT:19,SIGSTOP:17,SIGTSTP:18,SIGTTIN:21,SIGTTOU:22,SIGURG:16,SIGXCPU:24,SIGXFSZ:25,SIGVTALRM:26,SIGPROF:27,SIGWINCH:28,SIGIO:23,SIGSYS:12,SSL_OP_ALL:2147486719,SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION:262144,SSL_OP_CIPHER_SERVER_PREFERENCE:4194304,SSL_OP_CISCO_ANYCONNECT:32768,SSL_OP_COOKIE_EXCHANGE:8192,SSL_OP_CRYPTOPRO_TLSEXT_BUG:2147483648,SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS:2048,SSL_OP_EPHEMERAL_RSA:0,SSL_OP_LEGACY_SERVER_CONNECT:4,SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER:32,SSL_OP_MICROSOFT_SESS_ID_BUG:1,SSL_OP_MSIE_SSLV2_RSA_PADDING:0,SSL_OP_NETSCAPE_CA_DN_BUG:536870912,SSL_OP_NETSCAPE_CHALLENGE_BUG:2,SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG:1073741824,SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG:8,SSL_OP_NO_COMPRESSION:131072,SSL_OP_NO_QUERY_MTU:4096,SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION:65536,SSL_OP_NO_SSLv2:16777216,SSL_OP_NO_SSLv3:33554432,SSL_OP_NO_TICKET:16384,SSL_OP_NO_TLSv1:67108864,SSL_OP_NO_TLSv1_1:268435456,SSL_OP_NO_TLSv1_2:134217728,SSL_OP_PKCS1_CHECK_1:0,SSL_OP_PKCS1_CHECK_2:0,SSL_OP_SINGLE_DH_USE:1048576,SSL_OP_SINGLE_ECDH_USE:524288,SSL_OP_SSLEAY_080_CLIENT_DH_BUG:128,SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG:0,SSL_OP_TLS_BLOCK_PADDING_BUG:512,SSL_OP_TLS_D5_BUG:256,SSL_OP_TLS_ROLLBACK_BUG:8388608,ENGINE_METHOD_DSA:2,ENGINE_METHOD_DH:4,ENGINE_METHOD_RAND:8,ENGINE_METHOD_ECDH:16,ENGINE_METHOD_ECDSA:32,ENGINE_METHOD_CIPHERS:64,ENGINE_METHOD_DIGESTS:128,ENGINE_METHOD_STORE:256,ENGINE_METHOD_PKEY_METHS:512,ENGINE_METHOD_PKEY_ASN1_METHS:1024,ENGINE_METHOD_ALL:65535,ENGINE_METHOD_NONE:0,DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6,F_OK:0,R_OK:4,W_OK:2,X_OK:1,UV_UDP_REUSEADDR:4}},function(t,e){t.exports={name:"elliptic",version:"6.3.2",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",lint:"npm run jscs && npm run jshint",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},keywords:["EC","Elliptic","curve","Cryptography"],author:{name:"Fedor Indutny",email:"fedor@indutny.com"},license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^1.4.3",coveralls:"^2.11.3",grunt:"^0.4.5","grunt-browserify":"^5.0.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^8.6.2",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},dependencies:{"bn.js":"^4.4.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},gitHead:"cbace4683a4a548dc0306ef36756151a20299cd5",_id:"elliptic@6.3.2",_shasum:"e4c81e0829cf0a65ab70e998b8232723b5c1bc48",_from:"elliptic@>=6.0.0 <7.0.0",_npmVersion:"3.10.3",_nodeVersion:"6.3.0",_npmUser:{name:"indutny",email:"fedor@indutny.com"},dist:{shasum:"e4c81e0829cf0a65ab70e998b8232723b5c1bc48",tarball:"https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz"},maintainers:[{name:"indutny",email:"fedor@indutny.com"}],_npmOperationalInternal:{host:"packages-16-east.internal.npmjs.com",tmp:"tmp/elliptic-6.3.2.tgz_1473938837205_0.3108903462998569"},directories:{},_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz"}},function(t,e){t.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}},function(t,e){t.exports={name:"elliptic",version:"6.3.2",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",lint:"npm run jscs && npm run jshint",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},keywords:["EC","Elliptic","curve","Cryptography"],author:{name:"Fedor Indutny",email:"fedor@indutny.com"},license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^1.4.3",coveralls:"^2.11.3",grunt:"^0.4.5","grunt-browserify":"^5.0.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^8.6.2",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},dependencies:{"bn.js":"^4.4.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},gitHead:"cbace4683a4a548dc0306ef36756151a20299cd5",_id:"elliptic@6.3.2",_shasum:"e4c81e0829cf0a65ab70e998b8232723b5c1bc48",_from:"elliptic@>=6.0.0 <7.0.0",_npmVersion:"3.10.3",_nodeVersion:"6.3.0",_npmUser:{name:"indutny",email:"fedor@indutny.com"},dist:{shasum:"e4c81e0829cf0a65ab70e998b8232723b5c1bc48",tarball:"https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz"},maintainers:[{name:"indutny",email:"fedor@indutny.com"}],_npmOperationalInternal:{host:"packages-16-east.internal.npmjs.com",tmp:"tmp/elliptic-6.3.2.tgz_1473938837205_0.3108903462998569"},directories:{},_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.3.2.tgz"}},function(t,e){t.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
|
||
},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},function(t,e){t.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(195),f=function(t){function e(){return n(this,e),i(this,Object.getPrototypeOf(e).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=r(195),f=function(t){function e(){return n(this,e),i(this,Object.getPrototypeOf(e).apply(this,arguments))}return o(e,t),e}(a);t.exports=f},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(196),a=function(){function t(){n(this,t),this.size=0}return i(t,[{key:"writeUInt",value:function(t,e){this.size+=e}},{key:"writeVarUInt",value:function(t){if(e.isBuffer(t))return void this.writeVarOctetString(t);if(!o(t))throw new Error("UInt must be an integer");if(t<0)throw new Error("UInt must be positive");var r=Math.ceil(t.toString(2).length/8);this.writeVarOctetString({length:r})}},{key:"writeOctetString",value:function(t,e){this.skip(e)}},{key:"writeVarOctetString",value:function(t){if(this.skip(1),t.length>127){var e=Math.ceil(t.length.toString(2).length/8);this.skip(e)}this.skip(t.length)}},{key:"write",value:function(t){this.size+=t.length}},{key:"skip",value:function(t){this.size+=t}},{key:"getSize",value:function(){return this.size}}]),t}();[1,2,4,8].forEach(function(t){a.prototype["writeUInt"+8*t]=function(e){return this.writeUInt(e,t)}}),t.exports=a}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(471),a=r(470),f=function(){function t(e){n(this,t),this.buffer=e,this.cursor=0,this.bookmarks=[]}return i(t,[{key:"bookmark",value:function(){this.bookmarks.push(this.cursor)}},{key:"restore",value:function(){this.cursor=this.bookmarks.pop()}},{key:"ensureAvailable",value:function(t){if(this.buffer.length<this.cursor+t)throw new o("Tried to read "+t+" bytes, but only "+(this.buffer.length-this.cursor)+" bytes available")}},{key:"readUInt",value:function(t){var e=this.peekUInt(t);return this.cursor+=t,e}},{key:"peekUInt",value:function(e){if(0===e)return 0;if(e<0)throw new Error("Tried to read integer with negative length (provided: "+e+")");if(e>t.MAX_INT_BYTES)throw new Error("Tried to read too large integer (requested: "+e+", max: "+t.MAX_INT_BYTES+")");this.ensureAvailable(e);var r=this.buffer.readUIntBE(this.cursor,e);return r}},{key:"skipUInt",value:function(t){this.skip(t)}},{key:"readUInt64",value:function(){return[this.readUInt32(),this.readUInt32()]}},{key:"peekUInt64",value:function(){this.bookmark();var t=this.readUInt64();return this.restore(),t}},{key:"skipUInt64",value:function(){this.skip(8)}},{key:"readVarUInt",value:function(){var e=this.readVarOctetString();if(e.length>t.MAX_INT_BYTES)throw new a("UInt of length "+e.length+" too large to parse as integer (max: "+t.MAX_INT_BYTES+")");if(0===e.length)throw new a("UInt of length 0 is invalid");return e.readUIntBE(0,e.length)}},{key:"peekVarUInt",value:function(){this.bookmark();var t=this.readVarUInt();return this.restore(),t}},{key:"skipVarUInt",value:function(){this.skipVarOctetString()}},{key:"readOctetString",value:function(t){return this.read(t)}},{key:"peekOctetString",value:function(t){return this.peek(t)}},{key:"skipOctetString",value:function(t){return this.skip(t)}},{key:"readLengthPrefix",value:function(){var e=this.readUInt8();if(e&t.HIGH_BIT){var r=e&t.LOWER_SEVEN_BITS,n=this.readUInt(r),i=Math.max(128,1<<8*(r-1));if(n<i)throw new a("Length prefix encoding is not canonical: "+n+" encoded in "+r+" bytes");return n}return e}},{key:"readVarOctetString",value:function(){var t=this.readLengthPrefix();return this.read(t)}},{key:"peekVarOctetString",value:function(){this.bookmark();var t=this.readVarOctetString();return this.restore(),t}},{key:"skipVarOctetString",value:function(){var t=this.readLengthPrefix();return this.skip(t)}},{key:"read",value:function(t){this.ensureAvailable(t);var e=this.buffer.slice(this.cursor,this.cursor+t);return this.cursor+=t,e}},{key:"peek",value:function(t){return this.ensureAvailable(t),this.buffer.slice(this.cursor,this.cursor+t)}},{key:"skip",value:function(t){this.ensureAvailable(t),this.cursor+=t}}],[{key:"from",value:function(r){if(e.isBuffer(r))return new t(r);if(r instanceof t)return new t(r.buffer.slice(r.cursor));throw new Error("Reader must be given a Buffer")}}]),t}();f.HIGH_BIT=128,f.LOWER_SEVEN_BITS=127,f.MAX_INT_BYTES=6,["read","peek","skip"].forEach(function(t){[1,2,4].forEach(function(e){f.prototype[t+"UInt"+8*e]=function(){return this[t+"UInt"](e)}})}),t.exports=f}).call(e,r(1).Buffer)},function(t,e,r){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=r(196),a=function(){function t(){n(this,t),this.components=[]}return i(t,[{key:"writeUInt",value:function(t,r){if(!o(t))throw new Error("UInt must be an integer");if(t<0)throw new Error("UInt must be positive");if(r<=0)throw new Error("UInt length must be greater than zero");if(t.toString(2).length>8*r)throw new Error("UInt "+t+" does not fit in "+r+" bytes");var n=new e(r);n.writeUIntBE(t,0,r),this.write(n)}},{key:"writeVarUInt",value:function(r){if(e.isBuffer(r))return void this.writeVarOctetString(r);if(!o(r))throw new Error("UInt must be an integer");if(r<0)throw new Error("UInt must be positive");if(r>t.MAX_SAFE_INTEGER)throw new Error("UInt is too large");var n=Math.ceil(r.toString(2).length/8),i=new e(n);i.writeUIntBE(r,0,n),this.writeVarOctetString(i)}},{key:"writeUInt64",value:function(e){if(o(e)&&e<=t.MAX_SAFE_INTEGER)return this.writeUInt32(Math.floor(e/4294967296)),void this.writeUInt32(4294967295&e);if(!Array.isArray(e)||2!==e.length||!o(e[0])||!o(e[1]))throw new TypeError("Expected 64-bit integer as an array of two 32-bit words");this.writeUInt32(e[0]),this.writeUInt32(e[1])}},{key:"writeOctetString",value:function(t,e){if(t.length!==e)throw new Error("Incorrect length for octet string (actual: "+t.length+", expected: "+e+")");this.write(t)}},{key:"writeVarOctetString",value:function(t){if(!e.isBuffer(t))throw new TypeError("Expects a buffer");var r=128;if(t.length<=127)this.writeUInt8(t.length);else{var n=Math.ceil(t.length.toString(2).length/8);this.writeUInt8(r|n),this.writeUInt(t.length,n)}this.write(t)}},{key:"write",value:function(t){this.components.push(t)}},{key:"getBuffer",value:function(){return e.concat(this.components)}}]),t}();a.MAX_SAFE_INTEGER=r(475),[1,2,4].forEach(function(t){a.prototype["writeUInt"+8*t]=function(e){this.writeUInt(e,t)}}),t.exports=a}).call(e,r(1).Buffer)},function(t,e,r){r(487),t.exports=9007199254740991},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(89);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e,r){var n=r(476);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e,r){var n=r(89),i=r(200).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,r){var n=r(483),i=r(484);t.exports=r(144)?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){t.exports=!r(144)&&!r(199)(function(){return 7!=Object.defineProperty(r(479)("div"),"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(89),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},function(t,e,r){var n=r(477),i=r(481),o=r(485),a=Object.defineProperty;e.f=r(144)?Object.defineProperty:function(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return a(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,r){var n=r(89);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,r){var n=r(198);n(n.S,"Number",{isInteger:r(482)})},function(t,e,r){var n=r(198);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,r){!function(t){"use strict";function e(t,e,r,n){t[e]=r>>24&255,t[e+1]=r>>16&255,t[e+2]=r>>8&255,t[e+3]=255&r,t[e+4]=n>>24&255,t[e+5]=n>>16&255,t[e+6]=n>>8&255,t[e+7]=255&n}function n(t,e,r,n,i){var o,a=0;for(o=0;o<i;o++)a|=t[e+o]^r[n+o];return(1&a-1>>>8)-1}function i(t,e,r,i){return n(t,e,r,i,16)}function o(t,e,r,i){return n(t,e,r,i,32)}function a(t,e,r,n){for(var i,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,f=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,s=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,u=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,h=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,c=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,d=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,l=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,p=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,b=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,v=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,y=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,m=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,g=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,w=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,_=o,M=a,S=f,E=s,A=u,k=h,x=c,I=d,B=l,O=p,R=b,P=v,T=y,j=m,C=g,N=w,L=0;L<20;L+=2)i=_+T|0,A^=i<<7|i>>>25,i=A+_|0,B^=i<<9|i>>>23,i=B+A|0,T^=i<<13|i>>>19,i=T+B|0,_^=i<<18|i>>>14,i=k+M|0,O^=i<<7|i>>>25,i=O+k|0,j^=i<<9|i>>>23,i=j+O|0,M^=i<<13|i>>>19,i=M+j|0,k^=i<<18|i>>>14,i=R+x|0,C^=i<<7|i>>>25,i=C+R|0,S^=i<<9|i>>>23,i=S+C|0,x^=i<<13|i>>>19,i=x+S|0,R^=i<<18|i>>>14,i=N+P|0,E^=i<<7|i>>>25,i=E+N|0,I^=i<<9|i>>>23,i=I+E|0,P^=i<<13|i>>>19,i=P+I|0,N^=i<<18|i>>>14,i=_+E|0,M^=i<<7|i>>>25,i=M+_|0,S^=i<<9|i>>>23,i=S+M|0,E^=i<<13|i>>>19,i=E+S|0,_^=i<<18|i>>>14,i=k+A|0,x^=i<<7|i>>>25,i=x+k|0,I^=i<<9|i>>>23,i=I+x|0,A^=i<<13|i>>>19,i=A+I|0,k^=i<<18|i>>>14,i=R+O|0,P^=i<<7|i>>>25,i=P+R|0,B^=i<<9|i>>>23,i=B+P|0,O^=i<<13|i>>>19,i=O+B|0,R^=i<<18|i>>>14,i=N+C|0,T^=i<<7|i>>>25,i=T+N|0,j^=i<<9|i>>>23,i=j+T|0,C^=i<<13|i>>>19,i=C+j|0,N^=i<<18|i>>>14;_=_+o|0,M=M+a|0,S=S+f|0,E=E+s|0,A=A+u|0,k=k+h|0,x=x+c|0,I=I+d|0,B=B+l|0,O=O+p|0,R=R+b|0,P=P+v|0,T=T+y|0,j=j+m|0,C=C+g|0,N=N+w|0,t[0]=_>>>0&255,t[1]=_>>>8&255,t[2]=_>>>16&255,t[3]=_>>>24&255,t[4]=M>>>0&255,t[5]=M>>>8&255,t[6]=M>>>16&255,t[7]=M>>>24&255,t[8]=S>>>0&255,t[9]=S>>>8&255,t[10]=S>>>16&255,t[11]=S>>>24&255,t[12]=E>>>0&255,t[13]=E>>>8&255,t[14]=E>>>16&255,t[15]=E>>>24&255,t[16]=A>>>0&255,t[17]=A>>>8&255,t[18]=A>>>16&255,t[19]=A>>>24&255,t[20]=k>>>0&255,t[21]=k>>>8&255,t[22]=k>>>16&255,t[23]=k>>>24&255,t[24]=x>>>0&255,t[25]=x>>>8&255,t[26]=x>>>16&255,t[27]=x>>>24&255,t[28]=I>>>0&255,t[29]=I>>>8&255,t[30]=I>>>16&255,t[31]=I>>>24&255,t[32]=B>>>0&255,t[33]=B>>>8&255,t[34]=B>>>16&255,t[35]=B>>>24&255,t[36]=O>>>0&255,t[37]=O>>>8&255,t[38]=O>>>16&255,t[39]=O>>>24&255,t[40]=R>>>0&255,t[41]=R>>>8&255,t[42]=R>>>16&255,t[43]=R>>>24&255,t[44]=P>>>0&255,t[45]=P>>>8&255,t[46]=P>>>16&255,t[47]=P>>>24&255,t[48]=T>>>0&255,t[49]=T>>>8&255,t[50]=T>>>16&255,t[51]=T>>>24&255,t[52]=j>>>0&255,t[53]=j>>>8&255,t[54]=j>>>16&255,t[55]=j>>>24&255,t[56]=C>>>0&255,t[57]=C>>>8&255,t[58]=C>>>16&255,t[59]=C>>>24&255,t[60]=N>>>0&255,t[61]=N>>>8&255,t[62]=N>>>16&255,t[63]=N>>>24&255}function f(t,e,r,n){for(var i,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,f=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,s=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,u=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,h=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,c=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,d=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,l=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,p=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,b=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,v=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,y=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,m=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,g=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,w=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,_=o,M=a,S=f,E=s,A=u,k=h,x=c,I=d,B=l,O=p,R=b,P=v,T=y,j=m,C=g,N=w,L=0;L<20;L+=2)i=_+T|0,A^=i<<7|i>>>25,i=A+_|0,B^=i<<9|i>>>23,i=B+A|0,T^=i<<13|i>>>19,i=T+B|0,_^=i<<18|i>>>14,i=k+M|0,O^=i<<7|i>>>25,i=O+k|0,j^=i<<9|i>>>23,i=j+O|0,M^=i<<13|i>>>19,i=M+j|0,k^=i<<18|i>>>14,i=R+x|0,C^=i<<7|i>>>25,i=C+R|0,S^=i<<9|i>>>23,i=S+C|0,x^=i<<13|i>>>19,i=x+S|0,R^=i<<18|i>>>14,i=N+P|0,E^=i<<7|i>>>25,i=E+N|0,I^=i<<9|i>>>23,i=I+E|0,P^=i<<13|i>>>19,i=P+I|0,N^=i<<18|i>>>14,i=_+E|0,M^=i<<7|i>>>25,i=M+_|0,S^=i<<9|i>>>23,i=S+M|0,E^=i<<13|i>>>19,i=E+S|0,_^=i<<18|i>>>14,i=k+A|0,x^=i<<7|i>>>25,i=x+k|0,I^=i<<9|i>>>23,i=I+x|0,A^=i<<13|i>>>19,i=A+I|0,k^=i<<18|i>>>14,i=R+O|0,P^=i<<7|i>>>25,i=P+R|0,B^=i<<9|i>>>23,i=B+P|0,O^=i<<13|i>>>19,i=O+B|0,R^=i<<18|i>>>14,i=N+C|0,T^=i<<7|i>>>25,i=T+N|0,j^=i<<9|i>>>23,i=j+T|0,C^=i<<13|i>>>19,i=C+j|0,N^=i<<18|i>>>14;t[0]=_>>>0&255,t[1]=_>>>8&255,t[2]=_>>>16&255,t[3]=_>>>24&255,t[4]=k>>>0&255,t[5]=k>>>8&255,t[6]=k>>>16&255,t[7]=k>>>24&255,t[8]=R>>>0&255,t[9]=R>>>8&255,t[10]=R>>>16&255,t[11]=R>>>24&255,t[12]=N>>>0&255,t[13]=N>>>8&255,t[14]=N>>>16&255,t[15]=N>>>24&255,t[16]=x>>>0&255,t[17]=x>>>8&255,t[18]=x>>>16&255,t[19]=x>>>24&255,t[20]=I>>>0&255,t[21]=I>>>8&255,t[22]=I>>>16&255,t[23]=I>>>24&255,t[24]=B>>>0&255,t[25]=B>>>8&255,t[26]=B>>>16&255,t[27]=B>>>24&255,t[28]=O>>>0&255,t[29]=O>>>8&255,t[30]=O>>>16&255,t[31]=O>>>24&255}function s(t,e,r,n){a(t,e,r,n)}function u(t,e,r,n){f(t,e,r,n)}function h(t,e,r,n,i,o,a){var f,u,h=new Uint8Array(16),c=new Uint8Array(64);for(u=0;u<16;u++)h[u]=0;for(u=0;u<8;u++)h[u]=o[u];for(;i>=64;){for(s(c,h,a,dt),u=0;u<64;u++)t[e+u]=r[n+u]^c[u];for(f=1,u=8;u<16;u++)f=f+(255&h[u])|0,h[u]=255&f,f>>>=8;i-=64,e+=64,n+=64}if(i>0)for(s(c,h,a,dt),u=0;u<i;u++)t[e+u]=r[n+u]^c[u];return 0}function c(t,e,r,n,i){var o,a,f=new Uint8Array(16),u=new Uint8Array(64);for(a=0;a<16;a++)f[a]=0;for(a=0;a<8;a++)f[a]=n[a];for(;r>=64;){for(s(u,f,i,dt),a=0;a<64;a++)t[e+a]=u[a];for(o=1,a=8;a<16;a++)o=o+(255&f[a])|0,f[a]=255&o,o>>>=8;r-=64,e+=64}if(r>0)for(s(u,f,i,dt),a=0;a<r;a++)t[e+a]=u[a];return 0}function d(t,e,r,n,i){var o=new Uint8Array(32);u(o,n,i,dt);for(var a=new Uint8Array(8),f=0;f<8;f++)a[f]=n[f+16];return c(t,e,r,a,o)}function l(t,e,r,n,i,o,a){var f=new Uint8Array(32);u(f,o,a,dt);for(var s=new Uint8Array(8),c=0;c<8;c++)s[c]=o[c+16];return h(t,e,r,n,i,s,f)}function p(t,e,r,n,i,o){var a=new lt(o);return a.update(r,n,i),a.finish(t,e),0}function b(t,e,r,n,o,a){var f=new Uint8Array(16);return p(f,0,r,n,o,a),i(t,e,f,0)}function v(t,e,r,n,i){var o;if(r<32)return-1;for(l(t,0,e,0,r,n,i),p(t,16,t,32,r-32,t),o=0;o<16;o++)t[o]=0;return 0}function y(t,e,r,n,i){var o,a=new Uint8Array(32);if(r<32)return-1;if(d(a,0,32,n,i),0!==b(e,16,e,32,r-32,a))return-1;for(l(t,0,e,0,r,n,i),o=0;o<32;o++)t[o]=0;return 0}function m(t,e){var r;for(r=0;r<16;r++)t[r]=0|e[r]}function g(t){var e,r,n=1;for(e=0;e<16;e++)r=t[e]+n+65535,n=Math.floor(r/65536),t[e]=r-65536*n;t[0]+=n-1+37*(n-1)}function w(t,e,r){for(var n,i=~(r-1),o=0;o<16;o++)n=i&(t[o]^e[o]),t[o]^=n,e[o]^=n}function _(t,e){var r,n,i,o=tt(),a=tt();for(r=0;r<16;r++)a[r]=e[r];for(g(a),g(a),g(a),n=0;n<2;n++){for(o[0]=a[0]-65517,r=1;r<15;r++)o[r]=a[r]-65535-(o[r-1]>>16&1),o[r-1]&=65535;o[15]=a[15]-32767-(o[14]>>16&1),i=o[15]>>16&1,o[14]&=65535,w(a,o,1-i)}for(r=0;r<16;r++)t[2*r]=255&a[r],t[2*r+1]=a[r]>>8}function M(t,e){var r=new Uint8Array(32),n=new Uint8Array(32);return _(r,t),_(n,e),o(r,0,n,0)}function S(t){var e=new Uint8Array(32);return _(e,t),1&e[0]}function E(t,e){var r;for(r=0;r<16;r++)t[r]=e[2*r]+(e[2*r+1]<<8);t[15]&=32767}function A(t,e,r){for(var n=0;n<16;n++)t[n]=e[n]+r[n]}function k(t,e,r){for(var n=0;n<16;n++)t[n]=e[n]-r[n]}function x(t,e,r){var n,i,o=0,a=0,f=0,s=0,u=0,h=0,c=0,d=0,l=0,p=0,b=0,v=0,y=0,m=0,g=0,w=0,_=0,M=0,S=0,E=0,A=0,k=0,x=0,I=0,B=0,O=0,R=0,P=0,T=0,j=0,C=0,N=r[0],L=r[1],U=r[2],z=r[3],D=r[4],q=r[5],F=r[6],K=r[7],G=r[8],V=r[9],H=r[10],X=r[11],Y=r[12],W=r[13],Z=r[14],J=r[15];n=e[0],o+=n*N,a+=n*L,f+=n*U,s+=n*z,u+=n*D,h+=n*q,c+=n*F,d+=n*K,l+=n*G,p+=n*V,b+=n*H,v+=n*X,y+=n*Y,m+=n*W,g+=n*Z,w+=n*J,n=e[1],a+=n*N,f+=n*L,s+=n*U,u+=n*z,h+=n*D,c+=n*q,d+=n*F,l+=n*K,p+=n*G,b+=n*V,v+=n*H,y+=n*X,m+=n*Y,g+=n*W,w+=n*Z,_+=n*J,n=e[2],f+=n*N,s+=n*L,u+=n*U,h+=n*z,c+=n*D,d+=n*q,l+=n*F,p+=n*K,b+=n*G,v+=n*V,y+=n*H,m+=n*X,g+=n*Y,w+=n*W,_+=n*Z,M+=n*J,n=e[3],s+=n*N,u+=n*L,h+=n*U,c+=n*z,d+=n*D,l+=n*q,p+=n*F,b+=n*K,v+=n*G,y+=n*V,m+=n*H,g+=n*X,w+=n*Y,_+=n*W,M+=n*Z,S+=n*J,n=e[4],u+=n*N,h+=n*L,c+=n*U,d+=n*z,l+=n*D,p+=n*q,b+=n*F,v+=n*K,y+=n*G,m+=n*V,g+=n*H,w+=n*X,_+=n*Y,M+=n*W,S+=n*Z,E+=n*J,n=e[5],h+=n*N,c+=n*L,d+=n*U,l+=n*z,p+=n*D,b+=n*q,v+=n*F,y+=n*K,m+=n*G,g+=n*V,w+=n*H,_+=n*X,M+=n*Y,S+=n*W,E+=n*Z,A+=n*J,n=e[6],c+=n*N,d+=n*L,l+=n*U,p+=n*z,b+=n*D,v+=n*q,y+=n*F,m+=n*K,g+=n*G,w+=n*V,_+=n*H,M+=n*X,S+=n*Y,E+=n*W,A+=n*Z,k+=n*J,n=e[7],d+=n*N,l+=n*L,p+=n*U,b+=n*z,v+=n*D,y+=n*q,m+=n*F,g+=n*K,w+=n*G,_+=n*V,M+=n*H,S+=n*X,E+=n*Y,A+=n*W,k+=n*Z,x+=n*J,n=e[8],l+=n*N,p+=n*L,b+=n*U,v+=n*z,y+=n*D,m+=n*q,g+=n*F,w+=n*K,_+=n*G,M+=n*V,S+=n*H,E+=n*X,A+=n*Y,k+=n*W,x+=n*Z,I+=n*J,n=e[9],p+=n*N,b+=n*L,v+=n*U,y+=n*z,m+=n*D,g+=n*q,w+=n*F,_+=n*K,M+=n*G,S+=n*V,E+=n*H,A+=n*X,k+=n*Y,x+=n*W,I+=n*Z,B+=n*J,n=e[10],b+=n*N,v+=n*L,y+=n*U,m+=n*z,g+=n*D,w+=n*q,_+=n*F,M+=n*K,S+=n*G,E+=n*V,A+=n*H,k+=n*X,x+=n*Y,I+=n*W,B+=n*Z,O+=n*J,n=e[11],v+=n*N,y+=n*L,m+=n*U,g+=n*z,w+=n*D,_+=n*q,M+=n*F,S+=n*K,E+=n*G,A+=n*V,k+=n*H,x+=n*X;I+=n*Y;B+=n*W,O+=n*Z,R+=n*J,n=e[12],y+=n*N,m+=n*L,g+=n*U,w+=n*z,_+=n*D,M+=n*q,S+=n*F,E+=n*K,A+=n*G,k+=n*V,x+=n*H,I+=n*X,B+=n*Y,O+=n*W,R+=n*Z,P+=n*J,n=e[13],m+=n*N,g+=n*L,w+=n*U,_+=n*z,M+=n*D,S+=n*q,E+=n*F,A+=n*K,k+=n*G,x+=n*V,I+=n*H,B+=n*X,O+=n*Y,R+=n*W,P+=n*Z,T+=n*J,n=e[14],g+=n*N,w+=n*L,_+=n*U,M+=n*z,S+=n*D,E+=n*q,A+=n*F,k+=n*K,x+=n*G,I+=n*V,B+=n*H,O+=n*X,R+=n*Y,P+=n*W,T+=n*Z,j+=n*J,n=e[15],w+=n*N,_+=n*L,M+=n*U,S+=n*z,E+=n*D,A+=n*q,k+=n*F,x+=n*K,I+=n*G,B+=n*V,O+=n*H,R+=n*X,P+=n*Y,T+=n*W,j+=n*Z,C+=n*J,o+=38*_,a+=38*M,f+=38*S,s+=38*E,u+=38*A,h+=38*k,c+=38*x,d+=38*I,l+=38*B,p+=38*O,b+=38*R,v+=38*P,y+=38*T,m+=38*j,g+=38*C,i=1,n=o+i+65535,i=Math.floor(n/65536),o=n-65536*i,n=a+i+65535,i=Math.floor(n/65536),a=n-65536*i,n=f+i+65535,i=Math.floor(n/65536),f=n-65536*i,n=s+i+65535,i=Math.floor(n/65536),s=n-65536*i,n=u+i+65535,i=Math.floor(n/65536),u=n-65536*i,n=h+i+65535,i=Math.floor(n/65536),h=n-65536*i,n=c+i+65535,i=Math.floor(n/65536),c=n-65536*i,n=d+i+65535,i=Math.floor(n/65536),d=n-65536*i,n=l+i+65535,i=Math.floor(n/65536),l=n-65536*i,n=p+i+65535,i=Math.floor(n/65536),p=n-65536*i,n=b+i+65535,i=Math.floor(n/65536),b=n-65536*i,n=v+i+65535,i=Math.floor(n/65536),v=n-65536*i,n=y+i+65535,i=Math.floor(n/65536),y=n-65536*i,n=m+i+65535,i=Math.floor(n/65536),m=n-65536*i,n=g+i+65535,i=Math.floor(n/65536),g=n-65536*i,n=w+i+65535,i=Math.floor(n/65536),w=n-65536*i,o+=i-1+37*(i-1),i=1,n=o+i+65535,i=Math.floor(n/65536),o=n-65536*i,n=a+i+65535,i=Math.floor(n/65536),a=n-65536*i,n=f+i+65535,i=Math.floor(n/65536),f=n-65536*i,n=s+i+65535,i=Math.floor(n/65536),s=n-65536*i,n=u+i+65535,i=Math.floor(n/65536),u=n-65536*i,n=h+i+65535,i=Math.floor(n/65536),h=n-65536*i,n=c+i+65535,i=Math.floor(n/65536),c=n-65536*i,n=d+i+65535,i=Math.floor(n/65536),d=n-65536*i,n=l+i+65535,i=Math.floor(n/65536),l=n-65536*i,n=p+i+65535,i=Math.floor(n/65536),p=n-65536*i,n=b+i+65535,i=Math.floor(n/65536),b=n-65536*i,n=v+i+65535,i=Math.floor(n/65536),v=n-65536*i,n=y+i+65535,i=Math.floor(n/65536),y=n-65536*i,n=m+i+65535,i=Math.floor(n/65536),m=n-65536*i,n=g+i+65535,i=Math.floor(n/65536),g=n-65536*i,n=w+i+65535,i=Math.floor(n/65536),w=n-65536*i,o+=i-1+37*(i-1),t[0]=o,t[1]=a,t[2]=f,t[3]=s,t[4]=u,t[5]=h,t[6]=c,t[7]=d,t[8]=l,t[9]=p,t[10]=b,t[11]=v,t[12]=y,t[13]=m;t[14]=g;t[15]=w}function I(t,e){x(t,e,e)}function B(t,e){var r,n=tt();for(r=0;r<16;r++)n[r]=e[r];for(r=253;r>=0;r--)I(n,n),2!==r&&4!==r&&x(n,n,e);for(r=0;r<16;r++)t[r]=n[r]}function O(t,e){var r,n=tt();for(r=0;r<16;r++)n[r]=e[r];for(r=250;r>=0;r--)I(n,n),1!==r&&x(n,n,e);for(r=0;r<16;r++)t[r]=n[r]}function R(t,e,r){var n,i,o=new Uint8Array(32),a=new Float64Array(80),f=tt(),s=tt(),u=tt(),h=tt(),c=tt(),d=tt();for(i=0;i<31;i++)o[i]=e[i];for(o[31]=127&e[31]|64,o[0]&=248,E(a,r),i=0;i<16;i++)s[i]=a[i],h[i]=f[i]=u[i]=0;for(f[0]=h[0]=1,i=254;i>=0;--i)n=o[i>>>3]>>>(7&i)&1,w(f,s,n),w(u,h,n),A(c,f,u),k(f,f,u),A(u,s,h),k(s,s,h),I(h,c),I(d,f),x(f,u,f),x(u,s,c),A(c,f,u),k(f,f,u),I(s,f),k(u,h,d),x(f,u,at),A(f,f,h),x(u,u,f),x(f,h,d),x(h,s,a),I(s,c),w(f,s,n),w(u,h,n);for(i=0;i<16;i++)a[i+16]=f[i],a[i+32]=u[i],a[i+48]=s[i],a[i+64]=h[i];var l=a.subarray(32),p=a.subarray(16);return B(l,l),x(p,p,l),_(t,p),0}function P(t,e){return R(t,e,nt)}function T(t,e){return et(e,32),P(t,e)}function j(t,e,r){var n=new Uint8Array(32);return R(n,r,e),u(t,rt,n,dt)}function C(t,e,r,n,i,o){var a=new Uint8Array(32);return j(a,i,o),pt(t,e,r,n,a)}function N(t,e,r,n,i,o){var a=new Uint8Array(32);return j(a,i,o),bt(t,e,r,n,a)}function L(t,e,r,n){for(var i,o,a,f,s,u,h,c,d,l,p,b,v,y,m,g,w,_,M,S,E,A,k,x,I,B,O=new Int32Array(16),R=new Int32Array(16),P=t[0],T=t[1],j=t[2],C=t[3],N=t[4],L=t[5],U=t[6],z=t[7],D=e[0],q=e[1],F=e[2],K=e[3],G=e[4],V=e[5],H=e[6],X=e[7],Y=0;n>=128;){for(M=0;M<16;M++)S=8*M+Y,O[M]=r[S+0]<<24|r[S+1]<<16|r[S+2]<<8|r[S+3],R[M]=r[S+4]<<24|r[S+5]<<16|r[S+6]<<8|r[S+7];for(M=0;M<80;M++)if(i=P,o=T,a=j,f=C,s=N,u=L,h=U,c=z,d=D,l=q,p=F,b=K,v=G,y=V,m=H,g=X,E=z,A=X,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=(N>>>14|G<<18)^(N>>>18|G<<14)^(G>>>9|N<<23),A=(G>>>14|N<<18)^(G>>>18|N<<14)^(N>>>9|G<<23),k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,E=N&L^~N&U,A=G&V^~G&H,k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,E=vt[2*M],A=vt[2*M+1],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,E=O[M%16],A=R[M%16],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,w=65535&I|B<<16,_=65535&k|x<<16,E=w,A=_,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=(P>>>28|D<<4)^(D>>>2|P<<30)^(D>>>7|P<<25),A=(D>>>28|P<<4)^(P>>>2|D<<30)^(P>>>7|D<<25),k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,E=P&T^P&j^T&j,A=D&q^D&F^q&F,k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,c=65535&I|B<<16,g=65535&k|x<<16,E=f,A=b,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=w,A=_,k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,f=65535&I|B<<16,b=65535&k|x<<16,T=i,j=o,C=a,N=f,L=s,U=u,z=h,P=c,q=d,F=l,K=p,G=b,V=v,H=y,X=m,D=g,M%16===15)for(S=0;S<16;S++)E=O[S],A=R[S],k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=O[(S+9)%16],A=R[(S+9)%16],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,w=O[(S+1)%16],_=R[(S+1)%16],E=(w>>>1|_<<31)^(w>>>8|_<<24)^w>>>7,A=(_>>>1|w<<31)^(_>>>8|w<<24)^(_>>>7|w<<25),k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,w=O[(S+14)%16],_=R[(S+14)%16],E=(w>>>19|_<<13)^(_>>>29|w<<3)^w>>>6,A=(_>>>19|w<<13)^(w>>>29|_<<3)^(_>>>6|w<<26),k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,O[S]=65535&I|B<<16,R[S]=65535&k|x<<16;E=P,A=D,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[0],A=e[0],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[0]=P=65535&I|B<<16,e[0]=D=65535&k|x<<16,E=T,A=q,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[1],A=e[1],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[1]=T=65535&I|B<<16,e[1]=q=65535&k|x<<16,E=j,A=F,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[2],A=e[2],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[2]=j=65535&I|B<<16,e[2]=F=65535&k|x<<16,E=C,A=K,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[3],A=e[3],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[3]=C=65535&I|B<<16,e[3]=K=65535&k|x<<16,E=N,A=G,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[4],A=e[4],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[4]=N=65535&I|B<<16,e[4]=G=65535&k|x<<16,E=L,A=V,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[5],A=e[5],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[5]=L=65535&I|B<<16,e[5]=V=65535&k|x<<16,E=U,A=H,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[6],A=e[6],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[6]=U=65535&I|B<<16,e[6]=H=65535&k|x<<16,E=z,A=X,k=65535&A,x=A>>>16,I=65535&E,B=E>>>16,E=t[7],A=e[7],k+=65535&A,x+=A>>>16,I+=65535&E,B+=E>>>16,x+=k>>>16,I+=x>>>16,B+=I>>>16,t[7]=z=65535&I|B<<16,e[7]=X=65535&k|x<<16,Y+=128,n-=128}return n}function U(t,r,n){var i,o=new Int32Array(8),a=new Int32Array(8),f=new Uint8Array(256),s=n;for(o[0]=1779033703,o[1]=3144134277,o[2]=1013904242,o[3]=2773480762,o[4]=1359893119,o[5]=2600822924,o[6]=528734635,o[7]=1541459225,a[0]=4089235720,a[1]=2227873595,a[2]=4271175723,a[3]=1595750129,a[4]=2917565137,a[5]=725511199,a[6]=4215389547,a[7]=327033209,L(o,a,r,n),n%=128,i=0;i<n;i++)f[i]=r[s-n+i];for(f[n]=128,n=256-128*(n<112?1:0),f[n-9]=0,e(f,n-8,s/536870912|0,s<<3),L(o,a,f,n),i=0;i<8;i++)e(t,8*i,o[i],a[i]);return 0}function z(t,e){var r=tt(),n=tt(),i=tt(),o=tt(),a=tt(),f=tt(),s=tt(),u=tt(),h=tt();k(r,t[1],t[0]),k(h,e[1],e[0]),x(r,r,h),A(n,t[0],t[1]),A(h,e[0],e[1]),x(n,n,h),x(i,t[3],e[3]),x(i,i,st),x(o,t[2],e[2]),A(o,o,o),k(a,n,r),k(f,o,i),A(s,o,i),A(u,n,r),x(t[0],a,f),x(t[1],u,s),x(t[2],s,f),x(t[3],a,u)}function D(t,e,r){var n;for(n=0;n<4;n++)w(t[n],e[n],r)}function q(t,e){var r=tt(),n=tt(),i=tt();B(i,e[2]),x(r,e[0],i),x(n,e[1],i),_(t,n),t[31]^=S(r)<<7}function F(t,e,r){var n,i;for(m(t[0],it),m(t[1],ot),m(t[2],ot),m(t[3],it),i=255;i>=0;--i)n=r[i/8|0]>>(7&i)&1,D(t,e,n),z(e,t),z(t,t),D(t,e,n)}function K(t,e){var r=[tt(),tt(),tt(),tt()];
|
||
m(r[0],ut),m(r[1],ht),m(r[2],ot),x(r[3],ut,ht),F(t,r,e)}function G(t,e,r){var n,i=new Uint8Array(64),o=[tt(),tt(),tt(),tt()];for(r||et(e,32),U(i,e,32),i[0]&=248,i[31]&=127,i[31]|=64,K(o,i),q(t,o),n=0;n<32;n++)e[n+32]=t[n];return 0}function V(t,e){var r,n,i,o;for(n=63;n>=32;--n){for(r=0,i=n-32,o=n-12;i<o;++i)e[i]+=r-16*e[n]*yt[i-(n-32)],r=e[i]+128>>8,e[i]-=256*r;e[i]+=r,e[n]=0}for(r=0,i=0;i<32;i++)e[i]+=r-(e[31]>>4)*yt[i],r=e[i]>>8,e[i]&=255;for(i=0;i<32;i++)e[i]-=r*yt[i];for(n=0;n<32;n++)e[n+1]+=e[n]>>8,t[n]=255&e[n]}function H(t){var e,r=new Float64Array(64);for(e=0;e<64;e++)r[e]=t[e];for(e=0;e<64;e++)t[e]=0;V(t,r)}function X(t,e,r,n){var i,o,a=new Uint8Array(64),f=new Uint8Array(64),s=new Uint8Array(64),u=new Float64Array(64),h=[tt(),tt(),tt(),tt()];U(a,n,32),a[0]&=248,a[31]&=127,a[31]|=64;var c=r+64;for(i=0;i<r;i++)t[64+i]=e[i];for(i=0;i<32;i++)t[32+i]=a[32+i];for(U(s,t.subarray(32),r+32),H(s),K(h,s),q(t,h),i=32;i<64;i++)t[i]=n[i];for(U(f,t,r+64),H(f),i=0;i<64;i++)u[i]=0;for(i=0;i<32;i++)u[i]=s[i];for(i=0;i<32;i++)for(o=0;o<32;o++)u[i+o]+=f[i]*a[o];return V(t.subarray(32),u),c}function Y(t,e){var r=tt(),n=tt(),i=tt(),o=tt(),a=tt(),f=tt(),s=tt();return m(t[2],ot),E(t[1],e),I(i,t[1]),x(o,i,ft),k(i,i,t[2]),A(o,t[2],o),I(a,o),I(f,a),x(s,f,a),x(r,s,i),x(r,r,o),O(r,r),x(r,r,i),x(r,r,o),x(r,r,o),x(t[0],r,o),I(n,t[0]),x(n,n,o),M(n,i)&&x(t[0],t[0],ct),I(n,t[0]),x(n,n,o),M(n,i)?-1:(S(t[0])===e[31]>>7&&k(t[0],it,t[0]),x(t[3],t[0],t[1]),0)}function W(t,e,r,n){var i,a,f=new Uint8Array(32),s=new Uint8Array(64),u=[tt(),tt(),tt(),tt()],h=[tt(),tt(),tt(),tt()];if(a=-1,r<64)return-1;if(Y(h,n))return-1;for(i=0;i<r;i++)t[i]=e[i];for(i=0;i<32;i++)t[i+32]=n[i];if(U(s,t,r),H(s),F(u,h,s),K(h,e.subarray(32)),z(u,h),q(f,u),r-=64,o(e,0,f,0)){for(i=0;i<r;i++)t[i]=0;return-1}for(i=0;i<r;i++)t[i]=e[i+64];return a=r}function Z(t,e){if(t.length!==mt)throw new Error("bad key size");if(e.length!==gt)throw new Error("bad nonce size")}function J(t,e){if(t.length!==Et)throw new Error("bad public key size");if(e.length!==At)throw new Error("bad secret key size")}function $(){var t,e;for(e=0;e<arguments.length;e++)if("[object Uint8Array]"!==(t=Object.prototype.toString.call(arguments[e])))throw new TypeError("unexpected type "+t+", use Uint8Array")}function Q(t){for(var e=0;e<t.length;e++)t[e]=0}var tt=function(t){var e,r=new Float64Array(16);if(t)for(e=0;e<t.length;e++)r[e]=t[e];return r},et=function(){throw new Error("no PRNG")},rt=new Uint8Array(16),nt=new Uint8Array(32);nt[0]=9;var it=tt(),ot=tt([1]),at=tt([56129,1]),ft=tt([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),st=tt([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),ut=tt([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),ht=tt([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),ct=tt([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]),dt=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]),lt=function(t){this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.leftover=0,this.fin=0;var e,r,n,i,o,a,f,s;e=255&t[0]|(255&t[1])<<8,this.r[0]=8191&e,r=255&t[2]|(255&t[3])<<8,this.r[1]=8191&(e>>>13|r<<3),n=255&t[4]|(255&t[5])<<8,this.r[2]=7939&(r>>>10|n<<6),i=255&t[6]|(255&t[7])<<8,this.r[3]=8191&(n>>>7|i<<9),o=255&t[8]|(255&t[9])<<8,this.r[4]=255&(i>>>4|o<<12),this.r[5]=o>>>1&8190,a=255&t[10]|(255&t[11])<<8,this.r[6]=8191&(o>>>14|a<<2),f=255&t[12]|(255&t[13])<<8,this.r[7]=8065&(a>>>11|f<<5),s=255&t[14]|(255&t[15])<<8,this.r[8]=8191&(f>>>8|s<<8),this.r[9]=s>>>5&127,this.pad[0]=255&t[16]|(255&t[17])<<8,this.pad[1]=255&t[18]|(255&t[19])<<8,this.pad[2]=255&t[20]|(255&t[21])<<8,this.pad[3]=255&t[22]|(255&t[23])<<8,this.pad[4]=255&t[24]|(255&t[25])<<8,this.pad[5]=255&t[26]|(255&t[27])<<8,this.pad[6]=255&t[28]|(255&t[29])<<8,this.pad[7]=255&t[30]|(255&t[31])<<8};lt.prototype.blocks=function(t,e,r){for(var n,i,o,a,f,s,u,h,c,d,l,p,b,v,y,m,g,w,_,M=this.fin?0:2048,S=this.h[0],E=this.h[1],A=this.h[2],k=this.h[3],x=this.h[4],I=this.h[5],B=this.h[6],O=this.h[7],R=this.h[8],P=this.h[9],T=this.r[0],j=this.r[1],C=this.r[2],N=this.r[3],L=this.r[4],U=this.r[5],z=this.r[6],D=this.r[7],q=this.r[8],F=this.r[9];r>=16;)n=255&t[e+0]|(255&t[e+1])<<8,S+=8191&n,i=255&t[e+2]|(255&t[e+3])<<8,E+=8191&(n>>>13|i<<3),o=255&t[e+4]|(255&t[e+5])<<8,A+=8191&(i>>>10|o<<6),a=255&t[e+6]|(255&t[e+7])<<8,k+=8191&(o>>>7|a<<9),f=255&t[e+8]|(255&t[e+9])<<8,x+=8191&(a>>>4|f<<12),I+=f>>>1&8191,s=255&t[e+10]|(255&t[e+11])<<8,B+=8191&(f>>>14|s<<2),u=255&t[e+12]|(255&t[e+13])<<8,O+=8191&(s>>>11|u<<5),h=255&t[e+14]|(255&t[e+15])<<8,R+=8191&(u>>>8|h<<8),P+=h>>>5|M,c=0,d=c,d+=S*T,d+=E*(5*F),d+=A*(5*q),d+=k*(5*D),d+=x*(5*z),c=d>>>13,d&=8191,d+=I*(5*U),d+=B*(5*L),d+=O*(5*N),d+=R*(5*C),d+=P*(5*j),c+=d>>>13,d&=8191,l=c,l+=S*j,l+=E*T,l+=A*(5*F),l+=k*(5*q),l+=x*(5*D),c=l>>>13,l&=8191,l+=I*(5*z),l+=B*(5*U),l+=O*(5*L),l+=R*(5*N),l+=P*(5*C),c+=l>>>13,l&=8191,p=c,p+=S*C,p+=E*j,p+=A*T,p+=k*(5*F),p+=x*(5*q),c=p>>>13,p&=8191,p+=I*(5*D),p+=B*(5*z),p+=O*(5*U),p+=R*(5*L),p+=P*(5*N),c+=p>>>13,p&=8191,b=c,b+=S*N,b+=E*C,b+=A*j,b+=k*T,b+=x*(5*F),c=b>>>13,b&=8191,b+=I*(5*q),b+=B*(5*D),b+=O*(5*z),b+=R*(5*U),b+=P*(5*L),c+=b>>>13,b&=8191,v=c,v+=S*L,v+=E*N,v+=A*C,v+=k*j,v+=x*T,c=v>>>13,v&=8191,v+=I*(5*F),v+=B*(5*q),v+=O*(5*D),v+=R*(5*z),v+=P*(5*U),c+=v>>>13,v&=8191,y=c,y+=S*U,y+=E*L,y+=A*N,y+=k*C,y+=x*j,c=y>>>13,y&=8191,y+=I*T,y+=B*(5*F),y+=O*(5*q),y+=R*(5*D),y+=P*(5*z),c+=y>>>13,y&=8191,m=c,m+=S*z,m+=E*U,m+=A*L,m+=k*N,m+=x*C,c=m>>>13,m&=8191,m+=I*j,m+=B*T,m+=O*(5*F),m+=R*(5*q),m+=P*(5*D),c+=m>>>13,m&=8191,g=c,g+=S*D,g+=E*z,g+=A*U,g+=k*L,g+=x*N,c=g>>>13,g&=8191,g+=I*C,g+=B*j,g+=O*T,g+=R*(5*F),g+=P*(5*q),c+=g>>>13,g&=8191,w=c,w+=S*q,w+=E*D,w+=A*z,w+=k*U,w+=x*L,c=w>>>13,w&=8191,w+=I*N,w+=B*C,w+=O*j,w+=R*T,w+=P*(5*F),c+=w>>>13,w&=8191,_=c,_+=S*F,_+=E*q,_+=A*D,_+=k*z,_+=x*U,c=_>>>13,_&=8191,_+=I*L,_+=B*N,_+=O*C,_+=R*j,_+=P*T,c+=_>>>13,_&=8191,c=(c<<2)+c|0,c=c+d|0,d=8191&c,c>>>=13,l+=c,S=d,E=l,A=p,k=b,x=v,I=y,B=m,O=g,R=w,P=_,e+=16,r-=16;this.h[0]=S,this.h[1]=E,this.h[2]=A,this.h[3]=k,this.h[4]=x,this.h[5]=I,this.h[6]=B,this.h[7]=O,this.h[8]=R,this.h[9]=P},lt.prototype.finish=function(t,e){var r,n,i,o,a=new Uint16Array(10);if(this.leftover){for(o=this.leftover,this.buffer[o++]=1;o<16;o++)this.buffer[o]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(r=this.h[1]>>>13,this.h[1]&=8191,o=2;o<10;o++)this.h[o]+=r,r=this.h[o]>>>13,this.h[o]&=8191;for(this.h[0]+=5*r,r=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=r,r=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=r,a[0]=this.h[0]+5,r=a[0]>>>13,a[0]&=8191,o=1;o<10;o++)a[o]=this.h[o]+r,r=a[o]>>>13,a[o]&=8191;for(a[9]-=8192,n=(1^r)-1,o=0;o<10;o++)a[o]&=n;for(n=~n,o=0;o<10;o++)this.h[o]=this.h[o]&n|a[o];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),i=this.h[0]+this.pad[0],this.h[0]=65535&i,o=1;o<8;o++)i=(this.h[o]+this.pad[o]|0)+(i>>>16)|0,this.h[o]=65535&i;t[e+0]=this.h[0]>>>0&255,t[e+1]=this.h[0]>>>8&255,t[e+2]=this.h[1]>>>0&255,t[e+3]=this.h[1]>>>8&255,t[e+4]=this.h[2]>>>0&255,t[e+5]=this.h[2]>>>8&255,t[e+6]=this.h[3]>>>0&255,t[e+7]=this.h[3]>>>8&255,t[e+8]=this.h[4]>>>0&255,t[e+9]=this.h[4]>>>8&255,t[e+10]=this.h[5]>>>0&255,t[e+11]=this.h[5]>>>8&255,t[e+12]=this.h[6]>>>0&255,t[e+13]=this.h[6]>>>8&255,t[e+14]=this.h[7]>>>0&255,t[e+15]=this.h[7]>>>8&255},lt.prototype.update=function(t,e,r){var n,i;if(this.leftover){for(i=16-this.leftover,i>r&&(i=r),n=0;n<i;n++)this.buffer[this.leftover+n]=t[e+n];if(r-=i,e+=i,this.leftover+=i,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(r>=16&&(i=r-r%16,this.blocks(t,e,i),e+=i,r-=i),r){for(n=0;n<r;n++)this.buffer[this.leftover+n]=t[e+n];this.leftover+=r}};var pt=v,bt=y,vt=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],yt=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]),mt=32,gt=24,wt=32,_t=16,Mt=32,St=32,Et=32,At=32,kt=32,xt=gt,It=wt,Bt=_t,Ot=64,Rt=32,Pt=64,Tt=32,jt=64;t.lowlevel={crypto_core_hsalsa20:u,crypto_stream_xor:l,crypto_stream:d,crypto_stream_salsa20_xor:h,crypto_stream_salsa20:c,crypto_onetimeauth:p,crypto_onetimeauth_verify:b,crypto_verify_16:i,crypto_verify_32:o,crypto_secretbox:v,crypto_secretbox_open:y,crypto_scalarmult:R,crypto_scalarmult_base:P,crypto_box_beforenm:j,crypto_box_afternm:pt,crypto_box:C,crypto_box_open:N,crypto_box_keypair:T,crypto_hash:U,crypto_sign:X,crypto_sign_keypair:G,crypto_sign_open:W,crypto_secretbox_KEYBYTES:mt,crypto_secretbox_NONCEBYTES:gt,crypto_secretbox_ZEROBYTES:wt,crypto_secretbox_BOXZEROBYTES:_t,crypto_scalarmult_BYTES:Mt,crypto_scalarmult_SCALARBYTES:St,crypto_box_PUBLICKEYBYTES:Et,crypto_box_SECRETKEYBYTES:At,crypto_box_BEFORENMBYTES:kt,crypto_box_NONCEBYTES:xt,crypto_box_ZEROBYTES:It,crypto_box_BOXZEROBYTES:Bt,crypto_sign_BYTES:Ot,crypto_sign_PUBLICKEYBYTES:Rt,crypto_sign_SECRETKEYBYTES:Pt,crypto_sign_SEEDBYTES:Tt,crypto_hash_BYTES:jt},t.util||(t.util={},t.util.decodeUTF8=t.util.encodeUTF8=t.util.encodeBase64=t.util.decodeBase64=function(){throw new Error("nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js")}),t.randomBytes=function(t){var e=new Uint8Array(t);return et(e,t),e},t.secretbox=function(t,e,r){$(t,e,r),Z(r,e);for(var n=new Uint8Array(wt+t.length),i=new Uint8Array(n.length),o=0;o<t.length;o++)n[o+wt]=t[o];return v(i,n,n.length,e,r),i.subarray(_t)},t.secretbox.open=function(t,e,r){$(t,e,r),Z(r,e);for(var n=new Uint8Array(_t+t.length),i=new Uint8Array(n.length),o=0;o<t.length;o++)n[o+_t]=t[o];return!(n.length<32)&&(0===y(i,n,n.length,e,r)&&i.subarray(wt))},t.secretbox.keyLength=mt,t.secretbox.nonceLength=gt,t.secretbox.overheadLength=_t,t.scalarMult=function(t,e){if($(t,e),t.length!==St)throw new Error("bad n size");if(e.length!==Mt)throw new Error("bad p size");var r=new Uint8Array(Mt);return R(r,t,e),r},t.scalarMult.base=function(t){if($(t),t.length!==St)throw new Error("bad n size");var e=new Uint8Array(Mt);return P(e,t),e},t.scalarMult.scalarLength=St,t.scalarMult.groupElementLength=Mt,t.box=function(e,r,n,i){var o=t.box.before(n,i);return t.secretbox(e,r,o)},t.box.before=function(t,e){$(t,e),J(t,e);var r=new Uint8Array(kt);return j(r,t,e),r},t.box.after=t.secretbox,t.box.open=function(e,r,n,i){var o=t.box.before(n,i);return t.secretbox.open(e,r,o)},t.box.open.after=t.secretbox.open,t.box.keyPair=function(){var t=new Uint8Array(Et),e=new Uint8Array(At);return T(t,e),{publicKey:t,secretKey:e}},t.box.keyPair.fromSecretKey=function(t){if($(t),t.length!==At)throw new Error("bad secret key size");var e=new Uint8Array(Et);return P(e,t),{publicKey:e,secretKey:new Uint8Array(t)}},t.box.publicKeyLength=Et,t.box.secretKeyLength=At,t.box.sharedKeyLength=kt,t.box.nonceLength=xt,t.box.overheadLength=t.secretbox.overheadLength,t.sign=function(t,e){if($(t,e),e.length!==Pt)throw new Error("bad secret key size");var r=new Uint8Array(Ot+t.length);return X(r,t,t.length,e),r},t.sign.open=function(t,e){if(2!==arguments.length)throw new Error("nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?");if($(t,e),e.length!==Rt)throw new Error("bad public key size");var r=new Uint8Array(t.length),n=W(r,t,t.length,e);if(n<0)return null;for(var i=new Uint8Array(n),o=0;o<i.length;o++)i[o]=r[o];return i},t.sign.detached=function(e,r){for(var n=t.sign(e,r),i=new Uint8Array(Ot),o=0;o<i.length;o++)i[o]=n[o];return i},t.sign.detached.verify=function(t,e,r){if($(t,e,r),e.length!==Ot)throw new Error("bad signature size");if(r.length!==Rt)throw new Error("bad public key size");var n,i=new Uint8Array(Ot+t.length),o=new Uint8Array(Ot+t.length);for(n=0;n<Ot;n++)i[n]=e[n];for(n=0;n<t.length;n++)i[n+Ot]=t[n];return W(o,i,i.length,r)>=0},t.sign.keyPair=function(){var t=new Uint8Array(Rt),e=new Uint8Array(Pt);return G(t,e),{publicKey:t,secretKey:e}},t.sign.keyPair.fromSecretKey=function(t){if($(t),t.length!==Pt)throw new Error("bad secret key size");for(var e=new Uint8Array(Rt),r=0;r<e.length;r++)e[r]=t[32+r];return{publicKey:e,secretKey:new Uint8Array(t)}},t.sign.keyPair.fromSeed=function(t){if($(t),t.length!==Tt)throw new Error("bad seed size");for(var e=new Uint8Array(Rt),r=new Uint8Array(Pt),n=0;n<32;n++)r[n]=t[n];return G(e,r,!0),{publicKey:e,secretKey:r}},t.sign.publicKeyLength=Rt,t.sign.secretKeyLength=Pt,t.sign.seedLength=Tt,t.sign.signatureLength=Ot,t.hash=function(t){$(t);var e=new Uint8Array(jt);return U(e,t,t.length),e},t.hash.hashLength=jt,t.verify=function(t,e){return $(t,e),0!==t.length&&0!==e.length&&(t.length===e.length&&0===n(t,0,e,0,t.length))},t.setPRNG=function(t){et=t},function(){var e="undefined"!=typeof self?self.crypto||self.msCrypto:null;if(e&&e.getRandomValues){var n=65536;t.setPRNG(function(t,r){var i,o=new Uint8Array(r);for(i=0;i<r;i+=n)e.getRandomValues(o.subarray(i,i+Math.min(r-i,n)));for(i=0;i<r;i++)t[i]=o[i];Q(o)})}else e=r(608),e&&e.randomBytes&&t.setPRNG(function(t,r){var n,i=e.randomBytes(r);for(n=0;n<r;n++)t[n]=i[n];Q(i)})}()}("undefined"!=typeof t&&t.exports?t.exports:self.nacl=self.nacl||{})},function(t,e){},function(t,e){"use strict";function r(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function n(t){return 3*t.length/4-r(t)}function i(t){var e,n,i,o,a,f,s=t.length;a=r(t),f=new h(3*s/4-a),i=a>0?s-4:s;var c=0;for(e=0,n=0;e<i;e+=4,n+=3)o=u[t.charCodeAt(e)]<<18|u[t.charCodeAt(e+1)]<<12|u[t.charCodeAt(e+2)]<<6|u[t.charCodeAt(e+3)],f[c++]=o>>16&255,f[c++]=o>>8&255,f[c++]=255&o;return 2===a?(o=u[t.charCodeAt(e)]<<2|u[t.charCodeAt(e+1)]>>4,f[c++]=255&o):1===a&&(o=u[t.charCodeAt(e)]<<10|u[t.charCodeAt(e+1)]<<4|u[t.charCodeAt(e+2)]>>2,f[c++]=o>>8&255,f[c++]=255&o),f}function o(t){return s[t>>18&63]+s[t>>12&63]+s[t>>6&63]+s[63&t]}function a(t,e,r){for(var n,i=[],a=e;a<r;a+=3)n=(t[a]<<16)+(t[a+1]<<8)+t[a+2],i.push(o(n));return i.join("")}function f(t){for(var e,r=t.length,n=r%3,i="",o=[],f=16383,u=0,h=r-n;u<h;u+=f)o.push(a(t,u,u+f>h?h:u+f));return 1===n?(e=t[r-1],i+=s[e>>2],i+=s[e<<4&63],i+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],i+=s[e>>10],i+=s[e>>4&63],i+=s[e<<2&63],i+="="),o.push(i),o.join("")}e.byteLength=n,e.toByteArray=i,e.fromByteArray=f;for(var s=[],u=[],h="undefined"!=typeof Uint8Array?Uint8Array:Array,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d=0,l=c.length;d<l;++d)s[d]=c[d],u[c.charCodeAt(d)]=d;u["-".charCodeAt(0)]=62,u["_".charCodeAt(0)]=63},function(t,e){e.read=function(t,e,r,n,i){var o,a,f=8*i-n-1,s=(1<<f)-1,u=s>>1,h=-7,c=r?i-1:0,d=r?-1:1,l=t[e+c];for(c+=d,o=l&(1<<-h)-1,l>>=-h,h+=f;h>0;o=256*o+t[e+c],c+=d,h-=8);for(a=o&(1<<-h)-1,o>>=-h,h+=n;h>0;a=256*a+t[e+c],c+=d,h-=8);if(0===o)o=1-u;else{if(o===s)return a?NaN:(l?-1:1)*(1/0);a+=Math.pow(2,n),o-=u}return(l?-1:1)*a*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var a,f,s,u=8*o-i-1,h=(1<<u)-1,c=h>>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,p=n?1:-1,b=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(f=isNaN(e)?1:0,a=h):(a=Math.floor(Math.log(e)/Math.LN2),e*(s=Math.pow(2,-a))<1&&(a--,s*=2),e+=a+c>=1?d/s:d*Math.pow(2,1-c),e*s>=2&&(a++,s/=2),a+c>=h?(f=0,a=h):a+c>=1?(f=(e*s-1)*Math.pow(2,i),a+=c):(f=e*Math.pow(2,c-1)*Math.pow(2,i),a=0));i>=8;t[r+l]=255&f,l+=p,f/=256,i-=8);for(a=a<<i|f,u+=i;u>0;t[r+l]=255&a,l+=p,a/=256,u-=8);t[r+l-p]|=128*b}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){function n(t,e){var r,n;if(t=t.toLowerCase(),d[t])r=d[t].key,n=d[t].iv;else{if(!c[t])throw new TypeError("invalid suite type");r=8*c[t].key,n=c[t].iv}var i=s(e,!1,r,n);return o(t,i.key,i.iv)}function i(t,e){var r,n;if(t=t.toLowerCase(),d[t])r=d[t].key,n=d[t].iv;else{if(!c[t])throw new TypeError("invalid suite type");r=8*c[t].key,n=c[t].iv}var i=s(e,!1,r,n);return a(t,i.key,i.iv)}function o(t,e,r){if(t=t.toLowerCase(),d[t])return u.createCipheriv(t,e,r);if(c[t])return new h({key:e,iv:r,mode:t});throw new TypeError("invalid suite type")}function a(t,e,r){if(t=t.toLowerCase(),d[t])return u.createDecipheriv(t,e,r);if(c[t])return new h({key:e,iv:r,mode:t,decrypt:!0});throw new TypeError("invalid suite type")}function f(){return Object.keys(c).concat(u.getCiphers())}var s=r(146),u=r(494),h=r(498),c=r(499),d=r(95);e.createCipher=e.Cipher=n,e.createCipheriv=e.Cipheriv=o,e.createDecipher=e.Decipher=i,e.createDecipheriv=e.Decipheriv=a,e.listCiphers=e.getCiphers=f},function(t,e,r){function n(){return Object.keys(a)}var i=r(496);e.createCipher=e.Cipher=i.createCipher,e.createCipheriv=e.Cipheriv=i.createCipheriv;var o=r(495);e.createDecipher=e.Decipher=o.createDecipher,e.createDecipheriv=e.Decipheriv=o.createDecipheriv;var a=r(95);e.listCiphers=e.getCiphers=n},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(u.call(this),this._cache=new i,this._last=void 0,this._cipher=new s.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(t){for(var e=t[15],r=-1;++r<e;)if(t[r+(16-e)]!==e)throw new Error("unable to decrypt data");if(16!==e)return t.slice(0,16-e)}function a(e,r,i){var o=c[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(b[o.mode],r,i,!0):"auth"===o.type?new l(b[o.mode],r,i,!0):new n(b[o.mode],r,i)}function f(t,e){var r=c[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=p(e,!1,r.key,r.iv);return a(t,n.key,n.iv)}var s=r(94),u=r(97),h=r(2),c=r(95),d=r(210),l=r(203),p=r(146);h(n,u),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get(this._autopadding);)n=this._mode.decrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return o(this._mode.decrypt(this,t));if(t)throw new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(t){var e;if(t){if(this.cache.length>16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},i.prototype.flush=function(){if(this.cache.length)return this.cache};var b={ECB:r(208),CBC:r(204),CFB:r(205),CFB8:r(207),CFB1:r(206),OFB:r(209),CTR:r(96),GCM:r(96)};e.createDecipher=f,e.createDecipheriv=a}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(s.call(this),this._cache=new i,this._cipher=new f.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(e,r,i){var o=h[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(p[o.mode],r,i):"auth"===o.type?new l(p[o.mode],r,i):new n(p[o.mode],r,i)}function a(t,e){var r=h[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=c(e,!1,r.key,r.iv);return o(t,n.key,n.iv)}var f=r(94),s=r(97),u=r(2),h=r(95),c=r(146),d=r(210),l=r(203);u(n,s),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get();)n=this._mode.encrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return t=this._mode.encrypt(this,t),this._cipher.scrub(),t;if("10101010101010101010101010101010"!==t.toString("hex"))throw this._cipher.scrub(),new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(){if(this.cache.length>15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},i.prototype.flush=function(){for(var e=16-this.cache.length,r=new t(e),n=-1;++n<e;)r.writeUInt8(e,n);var i=t.concat([this.cache,r]);return i};var p={ECB:r(208),CBC:r(204),CFB:r(205),CFB8:r(207),CFB1:r(206),OFB:r(209),CTR:r(96),GCM:r(96)};e.createCipheriv=o,e.createCipher=a}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function r(t){this.h=t,this.state=new e(16),this.state.fill(0),this.cache=new e("")}function n(t){return[t.readUInt32BE(0),t.readUInt32BE(4),t.readUInt32BE(8),t.readUInt32BE(12)]}function i(t){t=t.map(o);var r=new e(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r}function o(t){var e,r;return e=t>s||t<0?(r=Math.abs(t)%s,t<0?s-r:r):t}function a(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}var f=new e(16);f.fill(0),t.exports=r,r.prototype.ghash=function(t){for(var e=-1;++e<t.length;)this.state[e]^=t[e];this._multiply()},r.prototype._multiply=function(){for(var t,e,r,o=n(this.h),f=[0,0,0,0],s=-1;++s<128;){for(e=0!==(this.state[~~(s/8)]&1<<7-s%8),e&&(f=a(f,o)),r=0!==(1&o[3]),t=3;t>0;t--)o[t]=o[t]>>>1|(1&o[t-1])<<31;o[0]=o[0]>>>1,r&&(o[0]=o[0]^225<<24)}this.state=i(f)},r.prototype.update=function(t){this.cache=e.concat([this.cache,t]);for(var r;this.cache.length>=16;)r=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(r)},r.prototype.final=function(t,r){return this.cache.length&&this.ghash(e.concat([this.cache,f],16)),this.ghash(i([0,t,0,r])),this.state};var s=Math.pow(2,32)}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){i.call(this);var r,n=t.mode.toLowerCase(),o=f[n];r=t.decrypt?"decrypt":"encrypt";var a=t.key;"des-ede"!==n&&"des-ede-cbc"!==n||(a=e.concat([a,a.slice(0,8)]));var s=t.iv;this._des=o.create({key:a,iv:s,type:r})}var i=r(500),o=r(145),a=r(2),f={"des-ede3-cbc":o.CBC.instantiate(o.EDE),"des-ede3":o.EDE,"des-ede-cbc":o.CBC.instantiate(o.EDE),"des-ede":o.EDE,"des-cbc":o.CBC.instantiate(o.DES),"des-ecb":o.DES};f.des=f["des-cbc"],f.des3=f["des-ede3-cbc"],t.exports=n,a(n,i),n.prototype._update=function(t){return new e(this._des.update(t))},n.prototype._final=function(){return new e(this._des.final())}}).call(e,r(1).Buffer)},function(t,e){e["des-ecb"]={key:8,iv:0},e["des-cbc"]=e.des={key:8,iv:8},e["des-ede3-cbc"]=e.des3={key:24,iv:8},e["des-ede3"]={key:24,iv:0},e["des-ede-cbc"]={key:16,iv:8},e["des-ede"]={key:16,iv:0}},function(t,e,r){(function(e){function n(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=r(31).Transform,o=r(2),a=r(52).StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(t,r,n){"string"==typeof t&&(t=new e(t,r));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},n.prototype._flush=function(t){var e;try{this.push(this._final())}catch(t){e=t}finally{t(e)}},n.prototype._finalOrDigest=function(t){var r=this._final()||new e("");return t&&(r=this._toString(r,t,!0)),r},n.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new a(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n}}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t){o.equal(t.length,8,"Invalid IV length"),this.iv=new Array(8);for(var e=0;e<this.iv.length;e++)this.iv[e]=t[e]}function i(t){function e(e){t.call(this,e),this._cbcInit()}a(e,t);for(var r=Object.keys(f),n=0;n<r.length;n++){var i=r[n];e.prototype[i]=f[i]}return e.create=function(t){return new e(t)},e}var o=r(98),a=r(2),f={};e.instantiate=i,f._cbcInit=function(){var t=new n(this.options.iv);this._cbcState=t},f._update=function(t,e,r,n){var i=this._cbcState,o=this.constructor.super_.prototype,a=i.iv;if("encrypt"===this.type){for(var f=0;f<this.blockSize;f++)a[f]^=t[e+f];o._update.call(this,a,0,r,n);for(var f=0;f<this.blockSize;f++)a[f]=r[n+f]}else{o._update.call(this,t,e,r,n);for(var f=0;f<this.blockSize;f++)r[n+f]^=a[f];for(var f=0;f<this.blockSize;f++)a[f]=t[e+f]}}},function(t,e,r){"use strict";function n(t){this.options=t,this.type=this.options.type,this.blockSize=8,this._init(),this.buffer=new Array(this.blockSize),this.bufferOff=0}var i=r(98);t.exports=n,n.prototype._init=function(){},n.prototype.update=function(t){return 0===t.length?[]:"decrypt"===this.type?this._updateDecrypt(t):this._updateEncrypt(t)},n.prototype._buffer=function(t,e){for(var r=Math.min(this.buffer.length-this.bufferOff,t.length-e),n=0;n<r;n++)this.buffer[this.bufferOff+n]=t[e+n];return this.bufferOff+=r,r},n.prototype._flushBuffer=function(t,e){return this._update(this.buffer,0,t,e),this.bufferOff=0,this.blockSize},n.prototype._updateEncrypt=function(t){var e=0,r=0,n=(this.bufferOff+t.length)/this.blockSize|0,i=new Array(n*this.blockSize);0!==this.bufferOff&&(e+=this._buffer(t,e),this.bufferOff===this.buffer.length&&(r+=this._flushBuffer(i,r)));for(var o=t.length-(t.length-e)%this.blockSize;e<o;e+=this.blockSize)this._update(t,e,i,r),r+=this.blockSize;for(;e<t.length;e++,this.bufferOff++)this.buffer[this.bufferOff]=t[e];return i},n.prototype._updateDecrypt=function(t){for(var e=0,r=0,n=Math.ceil((this.bufferOff+t.length)/this.blockSize)-1,i=new Array(n*this.blockSize);n>0;n--)e+=this._buffer(t,e),r+=this._flushBuffer(i,r);return e+=this._buffer(t,e),i},n.prototype.final=function(t){var e;t&&(e=this.update(t));var r;return r="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),e?e.concat(r):r},n.prototype._pad=function(t,e){if(0===e)return!1;for(;e<t.length;)t[e++]=0;return!0},n.prototype._finalEncrypt=function(){if(!this._pad(this.buffer,this.bufferOff))return[];var t=new Array(this.blockSize);return this._update(this.buffer,0,t,0),t},n.prototype._unpad=function(t){return t},n.prototype._finalDecrypt=function(){i.equal(this.bufferOff,this.blockSize,"Not enough data to decrypt");var t=new Array(this.blockSize);return this._flushBuffer(t,0),this._unpad(t)}},function(t,e,r){"use strict";function n(){this.tmp=new Array(2),this.keys=null}function i(t){u.call(this,t);var e=new n;this._desState=e,this.deriveKeys(e,t.key)}var o=r(98),a=r(2),f=r(145),s=f.utils,u=f.Cipher;a(i,u),t.exports=i,i.create=function(t){return new i(t)};var h=[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];i.prototype.deriveKeys=function(t,e){t.keys=new Array(32),o.equal(e.length,this.blockSize,"Invalid key length");var r=s.readUInt32BE(e,0),n=s.readUInt32BE(e,4);s.pc1(r,n,t.tmp,0),r=t.tmp[0],n=t.tmp[1];for(var i=0;i<t.keys.length;i+=2){var a=h[i>>>1];r=s.r28shl(r,a),n=s.r28shl(n,a),s.pc2(r,n,t.keys,i)}},i.prototype._update=function(t,e,r,n){var i=this._desState,o=s.readUInt32BE(t,e),a=s.readUInt32BE(t,e+4);s.ip(o,a,i.tmp,0),o=i.tmp[0],a=i.tmp[1],"encrypt"===this.type?this._encrypt(i,o,a,i.tmp,0):this._decrypt(i,o,a,i.tmp,0),o=i.tmp[0],a=i.tmp[1],s.writeUInt32BE(r,o,n),s.writeUInt32BE(r,a,n+4)},i.prototype._pad=function(t,e){for(var r=t.length-e,n=e;n<t.length;n++)t[n]=r;return!0},i.prototype._unpad=function(t){for(var e=t[t.length-1],r=t.length-e;r<t.length;r++)o.equal(t[r],e);return t.slice(0,t.length-e)},i.prototype._encrypt=function(t,e,r,n,i){for(var o=e,a=r,f=0;f<t.keys.length;f+=2){var u=t.keys[f],h=t.keys[f+1];s.expand(a,t.tmp,0),u^=t.tmp[0],h^=t.tmp[1];var c=s.substitute(u,h),d=s.permute(c),l=a;a=(o^d)>>>0,o=l}s.rip(a,o,n,i)},i.prototype._decrypt=function(t,e,r,n,i){for(var o=r,a=e,f=t.keys.length-2;f>=0;f-=2){var u=t.keys[f],h=t.keys[f+1];s.expand(o,t.tmp,0),u^=t.tmp[0],h^=t.tmp[1];var c=s.substitute(u,h),d=s.permute(c),l=o;o=(a^d)>>>0,a=l}s.rip(o,a,n,i)}},function(t,e,r){"use strict";function n(t,e){o.equal(e.length,24,"Invalid key length");var r=e.slice(0,8),n=e.slice(8,16),i=e.slice(16,24);"encrypt"===t?this.ciphers=[u.create({type:"encrypt",key:r}),u.create({type:"decrypt",key:n}),u.create({type:"encrypt",key:i})]:this.ciphers=[u.create({type:"decrypt",key:i}),u.create({type:"encrypt",key:n}),u.create({type:"decrypt",key:r})]}function i(t){s.call(this,t);var e=new n(this.type,this.options.key);this._edeState=e}var o=r(98),a=r(2),f=r(145),s=f.Cipher,u=f.DES;a(i,s),t.exports=i,i.create=function(t){return new i(t)},i.prototype._update=function(t,e,r,n){var i=this._edeState;i.ciphers[0]._update(t,e,r,n),i.ciphers[1]._update(r,n,r,n),i.ciphers[2]._update(r,n,r,n)},i.prototype._pad=u.prototype._pad,i.prototype._unpad=u.prototype._unpad},function(t,e){"use strict";e.readUInt32BE=function(t,e){var r=t[0+e]<<24|t[1+e]<<16|t[2+e]<<8|t[3+e];return r>>>0},e.writeUInt32BE=function(t,e,r){t[0+r]=e>>>24,t[1+r]=e>>>16&255,t[2+r]=e>>>8&255,t[3+r]=255&e},e.ip=function(t,e,r,n){for(var i=0,o=0,a=6;a>=0;a-=2){for(var f=0;f<=24;f+=8)i<<=1,i|=e>>>f+a&1;for(var f=0;f<=24;f+=8)i<<=1,i|=t>>>f+a&1}for(var a=6;a>=0;a-=2){for(var f=1;f<=25;f+=8)o<<=1,o|=e>>>f+a&1;for(var f=1;f<=25;f+=8)o<<=1,o|=t>>>f+a&1}r[n+0]=i>>>0,r[n+1]=o>>>0},e.rip=function(t,e,r,n){for(var i=0,o=0,a=0;a<4;a++)for(var f=24;f>=0;f-=8)i<<=1,i|=e>>>f+a&1,i<<=1,i|=t>>>f+a&1;for(var a=4;a<8;a++)for(var f=24;f>=0;f-=8)o<<=1,o|=e>>>f+a&1,o<<=1,o|=t>>>f+a&1;r[n+0]=i>>>0,r[n+1]=o>>>0},e.pc1=function(t,e,r,n){for(var i=0,o=0,a=7;a>=5;a--){
|
||
for(var f=0;f<=24;f+=8)i<<=1,i|=e>>f+a&1;for(var f=0;f<=24;f+=8)i<<=1,i|=t>>f+a&1}for(var f=0;f<=24;f+=8)i<<=1,i|=e>>f+a&1;for(var a=1;a<=3;a++){for(var f=0;f<=24;f+=8)o<<=1,o|=e>>f+a&1;for(var f=0;f<=24;f+=8)o<<=1,o|=t>>f+a&1}for(var f=0;f<=24;f+=8)o<<=1,o|=t>>f+a&1;r[n+0]=i>>>0,r[n+1]=o>>>0},e.r28shl=function(t,e){return t<<e&268435455|t>>>28-e};var r=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];e.pc2=function(t,e,n,i){for(var o=0,a=0,f=r.length>>>1,s=0;s<f;s++)o<<=1,o|=t>>>r[s]&1;for(var s=f;s<r.length;s++)a<<=1,a|=e>>>r[s]&1;n[i+0]=o>>>0,n[i+1]=a>>>0},e.expand=function(t,e,r){var n=0,i=0;n=(1&t)<<5|t>>>27;for(var o=23;o>=15;o-=4)n<<=6,n|=t>>>o&63;for(var o=11;o>=3;o-=4)i|=t>>>o&63,i<<=6;i|=(31&t)<<1|t>>>31,e[r+0]=n>>>0,e[r+1]=i>>>0};var n=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];e.substitute=function(t,e){for(var r=0,i=0;i<4;i++){var o=t>>>18-6*i&63,a=n[64*i+o];r<<=4,r|=a}for(var i=0;i<4;i++){var o=e>>>18-6*i&63,a=n[256+64*i+o];r<<=4,r|=a}return r>>>0};var i=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];e.permute=function(t){for(var e=0,r=0;r<i.length;r++)e<<=1,e|=t>>>i[r]&1;return e>>>0},e.padSplit=function(t,e,r){for(var n=t.toString(2);n.length<e;)n="0"+n;for(var i=[],o=0;o<e;o+=r)i.push(n.slice(o,o+r));return i.join(" ")}},function(t,e,r){(function(e){function n(t){c.Writable.call(this);var e=l[t];if(!e)throw new Error("Unknown message digest");this._hashType=e.hash,this._hash=s(e.hash),this._tag=e.id,this._signType=e.sign}function i(t){c.Writable.call(this);var e=l[t];if(!e)throw new Error("Unknown message digest");this._hash=s(e.hash),this._tag=e.id,this._signType=e.sign}function o(t){return new n(t)}function a(t){return new i(t)}var f=r(211),s=r(59),u=r(2),h=r(542),c=r(31),d=r(543),l={};Object.keys(f).forEach(function(t){l[t]=l[t.toLowerCase()]=f[t]}),u(n,c.Writable),n.prototype._write=function(t,e,r){this._hash.update(t),r()},n.prototype.update=function(t,r){return"string"==typeof t&&(t=new e(t,r)),this._hash.update(t),this},n.prototype.sign=function(t,r){this.end();var n=this._hash.digest(),i=h(e.concat([this._tag,n]),t,this._hashType,this._signType);return r?i.toString(r):i},u(i,c.Writable),i.prototype._write=function(t,e,r){this._hash.update(t),r()},i.prototype.update=function(t,r){return"string"==typeof t&&(t=new e(t,r)),this._hash.update(t),this},i.prototype.verify=function(t,r,n){"string"==typeof r&&(r=new e(r,n)),this.end();var i=this._hash.digest();return d(r,e.concat([this._tag,i]),t,this._signType)},t.exports={Sign:o,Verify:a,createSign:o,createVerify:a}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){var e=o(t),r=e.toRed(a.mont(t.modulus)).redPow(new a(t.publicExponent)).fromRed();return{blinder:r,unblinder:e.invm(t.modulus)}}function i(t,r){var i=n(r),o=r.modulus.byteLength(),f=(a.mont(r.modulus),new a(t).mul(i.blinder).umod(r.modulus)),s=f.toRed(a.mont(r.prime1)),u=f.toRed(a.mont(r.prime2)),h=r.coefficient,c=r.prime1,d=r.prime2,l=s.redPow(r.exponent1),p=u.redPow(r.exponent2);l=l.fromRed(),p=p.fromRed();var b=l.isub(p).imul(h).umod(c);return b.imul(d),p.iadd(b),new e(p.imul(i.unblinder).umod(r.modulus).toArray(!1,o))}function o(t){for(var e=t.modulus.byteLength(),r=new a(f(e));r.cmp(t.modulus)>=0||!r.umod(t.prime1)||!r.umod(t.prime2);)r=new a(f(e));return r}var a=r(18),f=r(61);t.exports=i,i.getr=o}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t,e){this.type=t,this.p=new o(e.p,16),this.red=e.prime?o.red(e.prime):o.mont(this.p),this.zero=new o(0).toRed(this.red),this.one=new o(1).toRed(this.red),this.two=new o(2).toRed(this.red),this.n=e.n&&new o(e.n,16),this.g=e.g&&this.pointFromJSON(e.g,e.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function i(t,e){this.curve=t,this.type=e,this.precomputed=null}var o=r(18),a=r(19),f=a.utils,s=f.getNAF,u=f.getJSF,h=f.assert;t.exports=n,n.prototype.point=function(){throw new Error("Not implemented")},n.prototype.validate=function(){throw new Error("Not implemented")},n.prototype._fixedNafMul=function(t,e){h(t.precomputed);var r=t._getDoubles(),n=s(e,1),i=(1<<r.step+1)-(r.step%2===0?2:1);i/=3;for(var o=[],a=0;a<n.length;a+=r.step){for(var f=0,e=a+r.step-1;e>=a;e--)f=(f<<1)+n[e];o.push(f)}for(var u=this.jpoint(null,null,null),c=this.jpoint(null,null,null),d=i;d>0;d--){for(var a=0;a<o.length;a++){var f=o[a];f===d?c=c.mixedAdd(r.points[a]):f===-d&&(c=c.mixedAdd(r.points[a].neg()))}u=u.add(c)}return u.toP()},n.prototype._wnafMul=function(t,e){var r=4,n=t._getNAFPoints(r);r=n.wnd;for(var i=n.points,o=s(e,r),a=this.jpoint(null,null,null),f=o.length-1;f>=0;f--){for(var e=0;f>=0&&0===o[f];f--)e++;if(f>=0&&e++,a=a.dblp(e),f<0)break;var u=o[f];h(0!==u),a="affine"===t.type?u>0?a.mixedAdd(i[u-1>>1]):a.mixedAdd(i[-u-1>>1].neg()):u>0?a.add(i[u-1>>1]):a.add(i[-u-1>>1].neg())}return"affine"===t.type?a.toP():a},n.prototype._wnafMulAdd=function(t,e,r,n,i){for(var o=this._wnafT1,a=this._wnafT2,f=this._wnafT3,h=0,c=0;c<n;c++){var d=e[c],l=d._getNAFPoints(t);o[c]=l.wnd,a[c]=l.points}for(var c=n-1;c>=1;c-=2){var p=c-1,b=c;if(1===o[p]&&1===o[b]){var v=[e[p],null,null,e[b]];0===e[p].y.cmp(e[b].y)?(v[1]=e[p].add(e[b]),v[2]=e[p].toJ().mixedAdd(e[b].neg())):0===e[p].y.cmp(e[b].y.redNeg())?(v[1]=e[p].toJ().mixedAdd(e[b]),v[2]=e[p].add(e[b].neg())):(v[1]=e[p].toJ().mixedAdd(e[b]),v[2]=e[p].toJ().mixedAdd(e[b].neg()));var y=[-3,-1,-5,-7,0,7,5,1,3],m=u(r[p],r[b]);h=Math.max(m[0].length,h),f[p]=new Array(h),f[b]=new Array(h);for(var g=0;g<h;g++){var w=0|m[0][g],_=0|m[1][g];f[p][g]=y[3*(w+1)+(_+1)],f[b][g]=0,a[p]=v}}else f[p]=s(r[p],o[p]),f[b]=s(r[b],o[b]),h=Math.max(f[p].length,h),h=Math.max(f[b].length,h)}for(var M=this.jpoint(null,null,null),S=this._wnafT4,c=h;c>=0;c--){for(var E=0;c>=0;){for(var A=!0,g=0;g<n;g++)S[g]=0|f[g][c],0!==S[g]&&(A=!1);if(!A)break;E++,c--}if(c>=0&&E++,M=M.dblp(E),c<0)break;for(var g=0;g<n;g++){var d,k=S[g];0!==k&&(k>0?d=a[g][k-1>>1]:k<0&&(d=a[g][-k-1>>1].neg()),M="affine"===d.type?M.mixedAdd(d):M.add(d))}}for(var c=0;c<n;c++)a[c]=null;return i?M:M.toP()},n.BasePoint=i,i.prototype.eq=function(){throw new Error("Not implemented")},i.prototype.validate=function(){return this.curve.validate(this)},n.prototype.decodePoint=function(t,e){t=f.toArray(t,e);var r=this.p.byteLength();if((4===t[0]||6===t[0]||7===t[0])&&t.length-1===2*r){6===t[0]?h(t[t.length-1]%2===0):7===t[0]&&h(t[t.length-1]%2===1);var n=this.point(t.slice(1,1+r),t.slice(1+r,1+2*r));return n}if((2===t[0]||3===t[0])&&t.length-1===r)return this.pointFromX(t.slice(1,1+r),3===t[0]);throw new Error("Unknown point format")},i.prototype.encodeCompressed=function(t){return this.encode(t,!0)},i.prototype._encode=function(t){var e=this.curve.p.byteLength(),r=this.getX().toArray("be",e);return t?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray("be",e))},i.prototype.encode=function(t,e){return f.encode(this._encode(e),t)},i.prototype.precompute=function(t){if(this.precomputed)return this;var e={doubles:null,naf:null,beta:null};return e.naf=this._getNAFPoints(8),e.doubles=this._getDoubles(4,t),e.beta=this._getBeta(),this.precomputed=e,this},i.prototype._hasDoubles=function(t){if(!this.precomputed)return!1;var e=this.precomputed.doubles;return!!e&&e.points.length>=Math.ceil((t.bitLength()+1)/e.step)},i.prototype._getDoubles=function(t,e){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i<e;i+=t){for(var o=0;o<t;o++)n=n.dbl();r.push(n)}return{step:t,points:r}},i.prototype._getNAFPoints=function(t){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var e=[this],r=(1<<t)-1,n=1===r?null:this.dbl(),i=1;i<r;i++)e[i]=e[i-1].add(n);return{wnd:t,points:e}},i.prototype._getBeta=function(){return null},i.prototype.dblp=function(t){for(var e=this,r=0;r<t;r++)e=e.dbl();return e}},function(t,e,r){"use strict";function n(t){this.twisted=1!==(0|t.a),this.mOneA=this.twisted&&(0|t.a)===-1,this.extended=this.mOneA,u.call(this,"edwards",t),this.a=new f(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new f(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new f(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),h(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|t.c)}function i(t,e,r,n,i){u.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new f(e,16),this.y=new f(r,16),this.z=n?new f(n,16):this.curve.one,this.t=i&&new f(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var o=r(99),a=r(19),f=r(18),s=r(2),u=o.base,h=a.utils.assert;s(n,u),t.exports=n,n.prototype._mulA=function(t){return this.mOneA?t.redNeg():this.a.redMul(t)},n.prototype._mulC=function(t){return this.oneC?t:this.c.redMul(t)},n.prototype.jpoint=function(t,e,r,n){return this.point(t,e,r,n)},n.prototype.pointFromX=function(t,e){t=new f(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),o=n.redMul(i.redInvm()),a=o.redSqrt();if(0!==a.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");var s=a.fromRed().isOdd();return(e&&!s||!e&&s)&&(a=a.redNeg()),this.point(t,a)},n.prototype.pointFromY=function(t,e){t=new f(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr(),n=r.redSub(this.one),i=r.redMul(this.d).redAdd(this.one),o=n.redMul(i.redInvm());if(0===o.cmp(this.zero)){if(e)throw new Error("invalid point");return this.point(this.zero,t)}var a=o.redSqrt();if(0!==a.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");return a.isOdd()!==e&&(a=a.redNeg()),this.point(a,t)},n.prototype.validate=function(t){if(t.isInfinity())return!0;t.normalize();var e=t.x.redSqr(),r=t.y.redSqr(),n=e.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(e).redMul(r)));return 0===n.cmp(i)},s(i,u.BasePoint),n.prototype.pointFromJSON=function(t){return i.fromJSON(this,t)},n.prototype.point=function(t,e,r,n){return new i(this,t,e,r,n)},i.fromJSON=function(t,e){return new i(t,e[0],e[1],e[2])},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},i.prototype._extDbl=function(){var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(t),i=this.x.redAdd(this.y).redSqr().redISub(t).redISub(e),o=n.redAdd(e),a=o.redSub(r),f=n.redSub(e),s=i.redMul(a),u=o.redMul(f),h=i.redMul(f),c=a.redMul(o);return this.curve.point(s,u,c,h)},i.prototype._projDbl=function(){var t,e,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var a=this.curve._mulA(i),f=a.redAdd(o);if(this.zOne)t=n.redSub(i).redSub(o).redMul(f.redSub(this.curve.two)),e=f.redMul(a.redSub(o)),r=f.redSqr().redSub(f).redSub(f);else{var s=this.z.redSqr(),u=f.redSub(s).redISub(s);t=n.redSub(i).redISub(o).redMul(u),e=f.redMul(a.redSub(o)),r=f.redMul(u)}}else{var a=i.redAdd(o),s=this.curve._mulC(this.c.redMul(this.z)).redSqr(),u=a.redSub(s).redSub(s);t=this.curve._mulC(n.redISub(a)).redMul(u),e=this.curve._mulC(a).redMul(i.redISub(o)),r=a.redMul(u)}return this.curve.point(t,e,r)},i.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},i.prototype._extAdd=function(t){var e=this.y.redSub(this.x).redMul(t.y.redSub(t.x)),r=this.y.redAdd(this.x).redMul(t.y.redAdd(t.x)),n=this.t.redMul(this.curve.dd).redMul(t.t),i=this.z.redMul(t.z.redAdd(t.z)),o=r.redSub(e),a=i.redSub(n),f=i.redAdd(n),s=r.redAdd(e),u=o.redMul(a),h=f.redMul(s),c=o.redMul(s),d=a.redMul(f);return this.curve.point(u,h,d,c)},i.prototype._projAdd=function(t){var e,r,n=this.z.redMul(t.z),i=n.redSqr(),o=this.x.redMul(t.x),a=this.y.redMul(t.y),f=this.curve.d.redMul(o).redMul(a),s=i.redSub(f),u=i.redAdd(f),h=this.x.redAdd(this.y).redMul(t.x.redAdd(t.y)).redISub(o).redISub(a),c=n.redMul(s).redMul(h);return this.curve.twisted?(e=n.redMul(u).redMul(a.redSub(this.curve._mulA(o))),r=s.redMul(u)):(e=n.redMul(u).redMul(a.redSub(o)),r=this.curve._mulC(s).redMul(u)),this.curve.point(c,e,r)},i.prototype.add=function(t){return this.isInfinity()?t:t.isInfinity()?this:this.curve.extended?this._extAdd(t):this._projAdd(t)},i.prototype.mul=function(t){return this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve._wnafMul(this,t)},i.prototype.mulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!1)},i.prototype.jmulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!0)},i.prototype.normalize=function(){if(this.zOne)return this;var t=this.z.redInvm();return this.x=this.x.redMul(t),this.y=this.y.redMul(t),this.t&&(this.t=this.t.redMul(t)),this.z=this.curve.one,this.zOne=!0,this},i.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()},i.prototype.getY=function(){return this.normalize(),this.y.fromRed()},i.prototype.eq=function(t){return this===t||0===this.getX().cmp(t.getX())&&0===this.getY().cmp(t.getY())},i.prototype.eqXToP=function(t){var e=t.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(e))return!0;for(var r=t.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(e.redIAdd(n),0===this.x.cmp(e))return!0}return!1},i.prototype.toP=i.prototype.normalize,i.prototype.mixedAdd=i.prototype.add},function(t,e,r){"use strict";function n(t){s.call(this,"mont",t),this.a=new a(t.a,16).toRed(this.red),this.b=new a(t.b,16).toRed(this.red),this.i4=new a(4).toRed(this.red).redInvm(),this.two=new a(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function i(t,e,r){s.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new a(e,16),this.z=new a(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var o=r(99),a=r(18),f=r(2),s=o.base,u=r(19),h=u.utils;f(n,s),t.exports=n,n.prototype.validate=function(t){var e=t.normalize().x,r=e.redSqr(),n=r.redMul(e).redAdd(r.redMul(this.a)).redAdd(e),i=n.redSqrt();return 0===i.redSqr().cmp(n)},f(i,s.BasePoint),n.prototype.decodePoint=function(t,e){return this.point(h.toArray(t,e),1)},n.prototype.point=function(t,e){return new i(this,t,e)},n.prototype.pointFromJSON=function(t){return i.fromJSON(this,t)},i.prototype.precompute=function(){},i.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},i.fromJSON=function(t,e){return new i(t,e[0],e[1]||t.one)},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},i.prototype.dbl=function(){var t=this.x.redAdd(this.z),e=t.redSqr(),r=this.x.redSub(this.z),n=r.redSqr(),i=e.redSub(n),o=e.redMul(n),a=i.redMul(n.redAdd(this.curve.a24.redMul(i)));return this.curve.point(o,a)},i.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.diffAdd=function(t,e){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=t.x.redAdd(t.z),o=t.x.redSub(t.z),a=o.redMul(r),f=i.redMul(n),s=e.z.redMul(a.redAdd(f).redSqr()),u=e.x.redMul(a.redISub(f).redSqr());return this.curve.point(s,u)},i.prototype.mul=function(t){for(var e=t.clone(),r=this,n=this.curve.point(null,null),i=this,o=[];0!==e.cmpn(0);e.iushrn(1))o.push(e.andln(1));for(var a=o.length-1;a>=0;a--)0===o[a]?(r=r.diffAdd(n,i),n=n.dbl()):(n=r.diffAdd(n,i),r=r.dbl());return n},i.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.eq=function(t){return 0===this.getX().cmp(t.getX())},i.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(t,e,r){"use strict";function n(t){h.call(this,"short",t),this.a=new s(t.a,16).toRed(this.red),this.b=new s(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function i(t,e,r,n){h.BasePoint.call(this,t,"affine"),null===e&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new s(e,16),this.y=new s(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function o(t,e,r,n){h.BasePoint.call(this,t,"jacobian"),null===e&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new s(0)):(this.x=new s(e,16),this.y=new s(r,16),this.z=new s(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var a=r(99),f=r(19),s=r(18),u=r(2),h=a.base,c=f.utils.assert;u(n,h),t.exports=n,n.prototype._getEndomorphism=function(t){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var e,r;if(t.beta)e=new s(t.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);e=n[0].cmp(n[1])<0?n[0]:n[1],e=e.toRed(this.red)}if(t.lambda)r=new s(t.lambda,16);else{var i=this._getEndoRoots(this.n);0===this.g.mul(i[0]).x.cmp(this.g.x.redMul(e))?r=i[0]:(r=i[1],c(0===this.g.mul(r).x.cmp(this.g.x.redMul(e))))}var o;return o=t.basis?t.basis.map(function(t){return{a:new s(t.a,16),b:new s(t.b,16)}}):this._getEndoBasis(r),{beta:e,lambda:r,basis:o}}},n.prototype._getEndoRoots=function(t){var e=t===this.p?this.red:s.mont(t),r=new s(2).toRed(e).redInvm(),n=r.redNeg(),i=new s(3).toRed(e).redNeg().redSqrt().redMul(r),o=n.redAdd(i).fromRed(),a=n.redSub(i).fromRed();return[o,a]},n.prototype._getEndoBasis=function(t){for(var e,r,n,i,o,a,f,u,h,c=this.n.ushrn(Math.floor(this.n.bitLength()/2)),d=t,l=this.n.clone(),p=new s(1),b=new s(0),v=new s(0),y=new s(1),m=0;0!==d.cmpn(0);){var g=l.div(d);u=l.sub(g.mul(d)),h=v.sub(g.mul(p));var w=y.sub(g.mul(b));if(!n&&u.cmp(c)<0)e=f.neg(),r=p,n=u.neg(),i=h;else if(n&&2===++m)break;f=u,l=d,d=u,v=p,p=h,y=b,b=w}o=u.neg(),a=h;var _=n.sqr().add(i.sqr()),M=o.sqr().add(a.sqr());return M.cmp(_)>=0&&(o=e,a=r),n.negative&&(n=n.neg(),i=i.neg()),o.negative&&(o=o.neg(),a=a.neg()),[{a:n,b:i},{a:o,b:a}]},n.prototype._endoSplit=function(t){var e=this.endo.basis,r=e[0],n=e[1],i=n.b.mul(t).divRound(this.n),o=r.b.neg().mul(t).divRound(this.n),a=i.mul(r.a),f=o.mul(n.a),s=i.mul(r.b),u=o.mul(n.b),h=t.sub(a).sub(f),c=s.add(u).neg();return{k1:h,k2:c}},n.prototype.pointFromX=function(t,e){t=new s(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var i=n.fromRed().isOdd();return(e&&!i||!e&&i)&&(n=n.redNeg()),this.point(t,n)},n.prototype.validate=function(t){if(t.inf)return!0;var e=t.x,r=t.y,n=this.a.redMul(e),i=e.redSqr().redMul(e).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},n.prototype._endoWnafMulAdd=function(t,e,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o<t.length;o++){var a=this._endoSplit(e[o]),f=t[o],s=f._getBeta();a.k1.negative&&(a.k1.ineg(),f=f.neg(!0)),a.k2.negative&&(a.k2.ineg(),s=s.neg(!0)),n[2*o]=f,n[2*o+1]=s,i[2*o]=a.k1,i[2*o+1]=a.k2}for(var u=this._wnafMulAdd(1,n,i,2*o,r),h=0;h<2*o;h++)n[h]=null,i[h]=null;return u},u(i,h.BasePoint),n.prototype.point=function(t,e,r){return new i(this,t,e,r)},n.prototype.pointFromJSON=function(t,e){return i.fromJSON(this,t,e)},i.prototype._getBeta=function(){if(this.curve.endo){var t=this.precomputed;if(t&&t.beta)return t.beta;var e=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(t){var r=this.curve,n=function(t){return r.point(t.x.redMul(r.endo.beta),t.y)};t.beta=e,e.precomputed={beta:null,naf:t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(n)},doubles:t.doubles&&{step:t.doubles.step,points:t.doubles.points.map(n)}}}return e}},i.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},i.fromJSON=function(t,e,r){function n(e){return t.point(e[0],e[1],r)}"string"==typeof e&&(e=JSON.parse(e));var i=t.point(e[0],e[1],r);if(!e[2])return i;var o=e[2];return i.precomputed={beta:null,doubles:o.doubles&&{step:o.doubles.step,points:[i].concat(o.doubles.points.map(n))},naf:o.naf&&{wnd:o.naf.wnd,points:[i].concat(o.naf.points.map(n))}},i},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return this.inf},i.prototype.add=function(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return this.curve.point(null,null);if(0===this.x.cmp(t.x))return this.curve.point(null,null);var e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));var r=e.redSqr().redISub(this.x).redISub(t.x),n=e.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},i.prototype.dbl=function(){if(this.inf)return this;var t=this.y.redAdd(this.y);if(0===t.cmpn(0))return this.curve.point(null,null);var e=this.curve.a,r=this.x.redSqr(),n=t.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,a)},i.prototype.getX=function(){return this.x.fromRed()},i.prototype.getY=function(){return this.y.fromRed()},i.prototype.mul=function(t){return t=new s(t,16),this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve.endo?this.curve._endoWnafMulAdd([this],[t]):this.curve._wnafMul(this,t)},i.prototype.mulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},i.prototype.jmulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},i.prototype.eq=function(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))},i.prototype.neg=function(t){if(this.inf)return this;var e=this.curve.point(this.x,this.y.redNeg());if(t&&this.precomputed){var r=this.precomputed,n=function(t){return t.neg()};e.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return e},i.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var t=this.curve.jpoint(this.x,this.y,this.curve.one);return t},u(o,h.BasePoint),n.prototype.jpoint=function(t,e,r){return new o(this,t,e,r)},o.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),n=this.y.redMul(e).redMul(t);return this.curve.point(r,n)},o.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},o.prototype.add=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;var e=t.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(e),i=t.x.redMul(r),o=this.y.redMul(e.redMul(t.z)),a=t.y.redMul(r.redMul(this.z)),f=n.redSub(i),s=o.redSub(a);if(0===f.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=f.redSqr(),h=u.redMul(f),c=n.redMul(u),d=s.redSqr().redIAdd(h).redISub(c).redISub(c),l=s.redMul(c.redISub(d)).redISub(o.redMul(h)),p=this.z.redMul(t.z).redMul(f);return this.curve.jpoint(d,l,p)},o.prototype.mixedAdd=function(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;var e=this.z.redSqr(),r=this.x,n=t.x.redMul(e),i=this.y,o=t.y.redMul(e).redMul(this.z),a=r.redSub(n),f=i.redSub(o);if(0===a.cmpn(0))return 0!==f.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var s=a.redSqr(),u=s.redMul(a),h=r.redMul(s),c=f.redSqr().redIAdd(u).redISub(h).redISub(h),d=f.redMul(h.redISub(c)).redISub(i.redMul(u)),l=this.z.redMul(a);return this.curve.jpoint(c,d,l)},o.prototype.dblp=function(t){if(0===t)return this;if(this.isInfinity())return this;if(!t)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var e=this,r=0;r<t;r++)e=e.dbl();return e}for(var n=this.curve.a,i=this.curve.tinv,o=this.x,a=this.y,f=this.z,s=f.redSqr().redSqr(),u=a.redAdd(a),r=0;r<t;r++){var h=o.redSqr(),c=u.redSqr(),d=c.redSqr(),l=h.redAdd(h).redIAdd(h).redIAdd(n.redMul(s)),p=o.redMul(c),b=l.redSqr().redISub(p.redAdd(p)),v=p.redISub(b),y=l.redMul(v);y=y.redIAdd(y).redISub(d);var m=u.redMul(f);r+1<t&&(s=s.redMul(d)),o=b,f=m,u=y}return this.curve.jpoint(o,u.redMul(i),f)},o.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},o.prototype._zeroDbl=function(){var t,e,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),a=this.x.redAdd(i).redSqr().redISub(n).redISub(o);a=a.redIAdd(a);var f=n.redAdd(n).redIAdd(n),s=f.redSqr().redISub(a).redISub(a),u=o.redIAdd(o);u=u.redIAdd(u),u=u.redIAdd(u),t=s,e=f.redMul(a.redISub(s)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.x.redSqr(),c=this.y.redSqr(),d=c.redSqr(),l=this.x.redAdd(c).redSqr().redISub(h).redISub(d);l=l.redIAdd(l);var p=h.redAdd(h).redIAdd(h),b=p.redSqr(),v=d.redIAdd(d);v=v.redIAdd(v),v=v.redIAdd(v),t=b.redISub(l).redISub(l),e=p.redMul(l.redISub(t)).redISub(v),r=this.y.redMul(this.z),r=r.redIAdd(r)}return this.curve.jpoint(t,e,r)},o.prototype._threeDbl=function(){var t,e,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),a=this.x.redAdd(i).redSqr().redISub(n).redISub(o);a=a.redIAdd(a);var f=n.redAdd(n).redIAdd(n).redIAdd(this.curve.a),s=f.redSqr().redISub(a).redISub(a);t=s;var u=o.redIAdd(o);u=u.redIAdd(u),u=u.redIAdd(u),e=f.redMul(a.redISub(s)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.z.redSqr(),c=this.y.redSqr(),d=this.x.redMul(c),l=this.x.redSub(h).redMul(this.x.redAdd(h));l=l.redAdd(l).redIAdd(l);var p=d.redIAdd(d);p=p.redIAdd(p);var b=p.redAdd(p);t=l.redSqr().redISub(b),r=this.y.redAdd(this.z).redSqr().redISub(c).redISub(h);var v=c.redSqr();v=v.redIAdd(v),v=v.redIAdd(v),v=v.redIAdd(v),e=l.redMul(p.redISub(t)).redISub(v)}return this.curve.jpoint(t,e,r)},o.prototype._dbl=function(){var t=this.curve.a,e=this.x,r=this.y,n=this.z,i=n.redSqr().redSqr(),o=e.redSqr(),a=r.redSqr(),f=o.redAdd(o).redIAdd(o).redIAdd(t.redMul(i)),s=e.redAdd(e);s=s.redIAdd(s);var u=s.redMul(a),h=f.redSqr().redISub(u.redAdd(u)),c=u.redISub(h),d=a.redSqr();d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=f.redMul(c).redISub(d),p=r.redAdd(r).redMul(n);return this.curve.jpoint(h,l,p)},o.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr(),n=e.redSqr(),i=t.redAdd(t).redIAdd(t),o=i.redSqr(),a=this.x.redAdd(e).redSqr().redISub(t).redISub(n);a=a.redIAdd(a),a=a.redAdd(a).redIAdd(a),a=a.redISub(o);var f=a.redSqr(),s=n.redIAdd(n);s=s.redIAdd(s),s=s.redIAdd(s),s=s.redIAdd(s);var u=i.redIAdd(a).redSqr().redISub(o).redISub(f).redISub(s),h=e.redMul(u);h=h.redIAdd(h),h=h.redIAdd(h);var c=this.x.redMul(f).redISub(h);c=c.redIAdd(c),c=c.redIAdd(c);var d=this.y.redMul(u.redMul(s.redISub(u)).redISub(a.redMul(f)));d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=this.z.redAdd(a).redSqr().redISub(r).redISub(f);return this.curve.jpoint(c,d,l)},o.prototype.mul=function(t,e){return t=new s(t,e),this.curve._wnafMul(this,t)},o.prototype.eq=function(t){if("affine"===t.type)return this.eq(t.toJ());if(this===t)return!0;var e=this.z.redSqr(),r=t.z.redSqr();if(0!==this.x.redMul(r).redISub(t.x.redMul(e)).cmpn(0))return!1;var n=e.redMul(this.z),i=r.redMul(t.z);return 0===this.y.redMul(i).redISub(t.y.redMul(n)).cmpn(0)},o.prototype.eqXToP=function(t){var e=this.z.redSqr(),r=t.toRed(this.curve.red).redMul(e);if(0===this.x.cmp(r))return!0;for(var n=t.clone(),i=this.curve.redN.redMul(e);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}return!1},o.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},o.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(t,e,r){"use strict";function n(t){"short"===t.type?this.curve=new f.curve.short(t):"edwards"===t.type?this.curve=new f.curve.edwards(t):this.curve=new f.curve.mont(t),this.g=this.curve.g,this.n=this.curve.n,this.hash=t.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function i(t,e){Object.defineProperty(o,t,{configurable:!0,enumerable:!0,get:function(){var r=new n(e);return Object.defineProperty(o,t,{configurable:!0,enumerable:!0,value:r}),r}})}var o=e,a=r(49),f=r(19),s=f.utils.assert;o.PresetCurve=n,i("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:a.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),i("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:a.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),i("p256",{
|
||
type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:a.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),i("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:a.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),i("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:a.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),i("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"0",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["9"]}),i("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var u;try{u=r(520)}catch(t){u=void 0}i("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:a.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",u]})},function(t,e,r){"use strict";function n(t){return this instanceof n?("string"==typeof t&&(f(o.curves.hasOwnProperty(t),"Unknown curve "+t),t=o.curves[t]),t instanceof o.curves.PresetCurve&&(t={curve:t}),this.curve=t.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=t.curve.g,this.g.precompute(t.curve.n.bitLength()+1),void(this.hash=t.hash||t.curve.hash)):new n(t)}var i=r(18),o=r(19),a=o.utils,f=a.assert,s=r(514),u=r(515);t.exports=n,n.prototype.keyPair=function(t){return new s(this,t)},n.prototype.keyFromPrivate=function(t,e){return s.fromPrivate(this,t,e)},n.prototype.keyFromPublic=function(t,e){return s.fromPublic(this,t,e)},n.prototype.genKeyPair=function(t){t||(t={});for(var e=new o.hmacDRBG({hash:this.hash,pers:t.pers,entropy:t.entropy||o.rand(this.hash.hmacStrength),nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var a=new i(e.generate(r));if(!(a.cmp(n)>0))return a.iaddn(1),this.keyFromPrivate(a)}},n.prototype._truncateToN=function(t,e){var r=8*t.byteLength()-this.n.bitLength();return r>0&&(t=t.ushrn(r)),!e&&t.cmp(this.n)>=0?t.sub(this.n):t},n.prototype.sign=function(t,e,r,n){"object"==typeof r&&(n=r,r=null),n||(n={}),e=this.keyFromPrivate(e,r),t=this._truncateToN(new i(t,16));for(var a=this.n.byteLength(),f=e.getPrivate().toArray("be",a),s=t.toArray("be",a),h=new o.hmacDRBG({hash:this.hash,entropy:f,nonce:s,pers:n.pers,persEnc:n.persEnc}),c=this.n.sub(new i(1)),d=0;!0;d++){var l=n.k?n.k(d):new i(h.generate(this.n.byteLength()));if(l=this._truncateToN(l,!0),!(l.cmpn(1)<=0||l.cmp(c)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var b=p.getX(),v=b.umod(this.n);if(0!==v.cmpn(0)){var y=l.invm(this.n).mul(v.mul(e.getPrivate()).iadd(t));if(y=y.umod(this.n),0!==y.cmpn(0)){var m=(p.getY().isOdd()?1:0)|(0!==b.cmp(v)?2:0);return n.canonical&&y.cmp(this.nh)>0&&(y=this.n.sub(y),m^=1),new u({r:v,s:y,recoveryParam:m})}}}}}},n.prototype.verify=function(t,e,r,n){t=this._truncateToN(new i(t,16)),r=this.keyFromPublic(r,n),e=new u(e,"hex");var o=e.r,a=e.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var f=a.invm(this.n),s=f.mul(t).umod(this.n),h=f.mul(o).umod(this.n);if(!this.curve._maxwellTrick){var c=this.g.mulAdd(s,r.getPublic(),h);return!c.isInfinity()&&0===c.getX().umod(this.n).cmp(o)}var c=this.g.jmulAdd(s,r.getPublic(),h);return!c.isInfinity()&&c.eqXToP(o)},n.prototype.recoverPubKey=function(t,e,r,n){f((3&r)===r,"The recovery param is more than two bits"),e=new u(e,n);var o=this.n,a=new i(t),s=e.r,h=e.s,c=1&r,d=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");s=d?this.curve.pointFromX(s.add(this.curve.n),c):this.curve.pointFromX(s,c);var l=e.r.invm(o),p=o.sub(a).mul(l).umod(o),b=h.mul(l).umod(o);return this.g.mulAdd(p,s,b)},n.prototype.getKeyRecoveryParam=function(t,e,r,n){if(e=new u(e,n),null!==e.recoveryParam)return e.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(t,e,i)}catch(t){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},function(t,e,r){"use strict";function n(t,e){this.ec=t,this.priv=null,this.pub=null,e.priv&&this._importPrivate(e.priv,e.privEnc),e.pub&&this._importPublic(e.pub,e.pubEnc)}var i=r(18);t.exports=n,n.fromPublic=function(t,e,r){return e instanceof n?e:new n(t,{pub:e,pubEnc:r})},n.fromPrivate=function(t,e,r){return e instanceof n?e:new n(t,{priv:e,privEnc:r})},n.prototype.validate=function(){var t=this.getPublic();return t.isInfinity()?{result:!1,reason:"Invalid public key"}:t.validate()?t.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},n.prototype.getPublic=function(t,e){return"string"==typeof t&&(e=t,t=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),e?this.pub.encode(e,t):this.pub},n.prototype.getPrivate=function(t){return"hex"===t?this.priv.toString(16,2):this.priv},n.prototype._importPrivate=function(t,e){this.priv=new i(t,e||16),this.priv=this.priv.umod(this.ec.curve.n)},n.prototype._importPublic=function(t,e){return t.x||t.y?void(this.pub=this.ec.curve.point(t.x,t.y)):void(this.pub=this.ec.curve.decodePoint(t,e))},n.prototype.derive=function(t){return t.mul(this.priv).getX()},n.prototype.sign=function(t,e,r){return this.ec.sign(t,this,e,r)},n.prototype.verify=function(t,e){return this.ec.verify(t,e,this)},n.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}},function(t,e,r){"use strict";function n(t,e){return t instanceof n?t:void(this._importDER(t,e)||(c(t.r&&t.s,"Signature without r or s"),this.r=new s(t.r,16),this.s=new s(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam))}function i(){this.place=0}function o(t,e){var r=t[e.place++];if(!(128&r))return r;for(var n=15&r,i=0,o=0,a=e.place;o<n;o++,a++)i<<=8,i|=t[a];return e.place=a,i}function a(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e<r;)e++;return 0===e?t:t.slice(e)}function f(t,e){if(e<128)return void t.push(e);var r=1+(Math.log(e)/Math.LN2>>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}var s=r(18),u=r(19),h=u.utils,c=h.assert;t.exports=n,n.prototype._importDER=function(t,e){t=h.toArray(t,e);var r=new i;if(48!==t[r.place++])return!1;var n=o(t,r);if(n+r.place!==t.length)return!1;if(2!==t[r.place++])return!1;var a=o(t,r),f=t.slice(r.place,a+r.place);if(r.place+=a,2!==t[r.place++])return!1;var u=o(t,r);if(t.length!==u+r.place)return!1;var c=t.slice(r.place,u+r.place);return 0===f[0]&&128&f[1]&&(f=f.slice(1)),0===c[0]&&128&c[1]&&(c=c.slice(1)),this.r=new s(f),this.s=new s(c),this.recoveryParam=null,!0},n.prototype.toDER=function(t){var e=this.r.toArray(),r=this.s.toArray();for(128&e[0]&&(e=[0].concat(e)),128&r[0]&&(r=[0].concat(r)),e=a(e),r=a(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];f(n,e.length),n=n.concat(e),n.push(2),f(n,r.length);var i=n.concat(r),o=[48];return f(o,i.length),o=o.concat(i),h.encode(o,t)}},function(t,e,r){"use strict";function n(t){if(f("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof n))return new n(t);var t=o.curves[t].curve;this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=i.sha512}var i=r(49),o=r(19),a=o.utils,f=a.assert,s=a.parseBytes,u=r(517),h=r(518);t.exports=n,n.prototype.sign=function(t,e){t=s(t);var r=this.keyFromSecret(e),n=this.hashInt(r.messagePrefix(),t),i=this.g.mul(n),o=this.encodePoint(i),a=this.hashInt(o,r.pubBytes(),t).mul(r.priv()),f=n.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:f,Rencoded:o})},n.prototype.verify=function(t,e,r){t=s(t),e=this.makeSignature(e);var n=this.keyFromPublic(r),i=this.hashInt(e.Rencoded(),n.pubBytes(),t),o=this.g.mul(e.S()),a=e.R().add(n.pub().mul(i));return a.eq(o)},n.prototype.hashInt=function(){for(var t=this.hash(),e=0;e<arguments.length;e++)t.update(arguments[e]);return a.intFromLE(t.digest()).umod(this.curve.n)},n.prototype.keyFromPublic=function(t){return u.fromPublic(this,t)},n.prototype.keyFromSecret=function(t){return u.fromSecret(this,t)},n.prototype.makeSignature=function(t){return t instanceof h?t:new h(this,t)},n.prototype.encodePoint=function(t){var e=t.getY().toArray("le",this.encodingLength);return e[this.encodingLength-1]|=t.getX().isOdd()?128:0,e},n.prototype.decodePoint=function(t){t=a.parseBytes(t);var e=t.length-1,r=t.slice(0,e).concat(t[e]&-129),n=0!==(128&t[e]),i=a.intFromLE(r);return this.curve.pointFromY(i,n)},n.prototype.encodeInt=function(t){return t.toArray("le",this.encodingLength)},n.prototype.decodeInt=function(t){return a.intFromLE(t)},n.prototype.isPoint=function(t){return t instanceof this.pointClass}},function(t,e,r){"use strict";function n(t,e){this.eddsa=t,this._secret=f(e.secret),t.isPoint(e.pub)?this._pub=e.pub:this._pubBytes=f(e.pub)}var i=r(19),o=i.utils,a=o.assert,f=o.parseBytes,s=o.cachedProperty;n.fromPublic=function(t,e){return e instanceof n?e:new n(t,{pub:e})},n.fromSecret=function(t,e){return e instanceof n?e:new n(t,{secret:e})},n.prototype.secret=function(){return this._secret},s(n,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),s(n,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),s(n,"privBytes",function(){var t=this.eddsa,e=this.hash(),r=t.encodingLength-1,n=e.slice(0,t.encodingLength);return n[0]&=248,n[r]&=127,n[r]|=64,n}),s(n,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),s(n,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),s(n,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),n.prototype.sign=function(t){return a(this._secret,"KeyPair can only verify"),this.eddsa.sign(t,this)},n.prototype.verify=function(t,e){return this.eddsa.verify(t,e,this)},n.prototype.getSecret=function(t){return a(this._secret,"KeyPair is public only"),o.encode(this.secret(),t)},n.prototype.getPublic=function(t){return o.encode(this.pubBytes(),t)},t.exports=n},function(t,e,r){"use strict";function n(t,e){this.eddsa=t,"object"!=typeof e&&(e=u(e)),Array.isArray(e)&&(e={R:e.slice(0,t.encodingLength),S:e.slice(t.encodingLength)}),f(e.R&&e.S,"Signature without R or S"),t.isPoint(e.R)&&(this._R=e.R),e.S instanceof i&&(this._S=e.S),this._Rencoded=Array.isArray(e.R)?e.R:e.Rencoded,this._Sencoded=Array.isArray(e.S)?e.S:e.Sencoded}var i=r(18),o=r(19),a=o.utils,f=a.assert,s=a.cachedProperty,u=a.parseBytes;s(n,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),s(n,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),s(n,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),s(n,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),n.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},n.prototype.toHex=function(){return a.encode(this.toBytes(),"hex").toUpperCase()},t.exports=n},function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this.reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=a.toArray(t.entropy,t.entropyEnc),r=a.toArray(t.nonce,t.nonceEnc),i=a.toArray(t.pers,t.persEnc);f(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,i)}var i=r(49),o=r(19),a=o.utils,f=a.assert;t.exports=n,n.prototype._init=function(t,e,r){var n=t.concat(e).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i<this.V.length;i++)this.K[i]=0,this.V[i]=1;this._update(n),this.reseed=1,this.reseedInterval=281474976710656},n.prototype._hmac=function(){return new i.hmac(this.hash,this.K)},n.prototype._update=function(t){var e=this._hmac().update(this.V).update([0]);t&&(e=e.update(t)),this.K=e.digest(),this.V=this._hmac().update(this.V).digest(),t&&(this.K=this._hmac().update(this.V).update([1]).update(t).digest(),this.V=this._hmac().update(this.V).digest())},n.prototype.reseed=function(t,e,r,n){"string"!=typeof e&&(n=r,r=e,e=null),t=a.toBuffer(t,e),r=a.toBuffer(r,n),f(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(t.concat(r||[])),this.reseed=1},n.prototype.generate=function(t,e,r,n){if(this.reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof e&&(n=r,r=e,e=null),r&&(r=a.toArray(r,n),this._update(r));for(var i=[];i.length<t;)this.V=this._hmac().update(this.V).digest(),i=i.concat(this.V);var o=i.slice(0,t);return this._update(r),this.reseed++,a.encode(o,e)}},function(t,e){t.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]
|
||
}}},function(t,e,r){"use strict";function n(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"!=typeof t){for(var n=0;n<t.length;n++)r[n]=0|t[n];return r}if(e){if("hex"===e){t=t.replace(/[^a-z0-9]+/gi,""),t.length%2!==0&&(t="0"+t);for(var n=0;n<t.length;n+=2)r.push(parseInt(t[n]+t[n+1],16))}}else for(var n=0;n<t.length;n++){var i=t.charCodeAt(n),o=i>>8,a=255&i;o?r.push(o,a):r.push(a)}return r}function i(t){return 1===t.length?"0"+t:t}function o(t){for(var e="",r=0;r<t.length;r++)e+=i(t[r].toString(16));return e}function a(t,e){for(var r=[],n=1<<e+1,i=t.clone();i.cmpn(1)>=0;){var o;if(i.isOdd()){var a=i.andln(n-1);o=a>(n>>1)-1?(n>>1)-a:a,i.isubn(o)}else o=0;r.push(o);for(var f=0!==i.cmpn(0)&&0===i.andln(n-1)?e+1:1,s=1;s<f;s++)r.push(0);i.iushrn(f)}return r}function f(t,e){var r=[[],[]];t=t.clone(),e=e.clone();for(var n=0,i=0;t.cmpn(-n)>0||e.cmpn(-i)>0;){var o=t.andln(3)+n&3,a=e.andln(3)+i&3;3===o&&(o=-1),3===a&&(a=-1);var f;if(0===(1&o))f=0;else{var s=t.andln(7)+n&7;f=3!==s&&5!==s||2!==a?o:-o}r[0].push(f);var u;if(0===(1&a))u=0;else{var s=e.andln(7)+i&7;u=3!==s&&5!==s||2!==o?a:-a}r[1].push(u),2*n===f+1&&(n=1-n),2*i===u+1&&(i=1-i),t.iushrn(1),e.iushrn(1)}return r}function s(t,e,r){var n="_"+e;t.prototype[e]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}}function u(t){return"string"==typeof t?c.toArray(t,"hex"):t}function h(t){return new d(t,"hex","le")}var c=e,d=r(18);c.assert=function(t,e){if(!t)throw new Error(e||"Assertion failed")},c.toArray=n,c.zero2=i,c.toHex=o,c.encode=function(t,e){return"hex"===e?o(t):t},c.getNAF=a,c.getJSF=f,c.cachedProperty=s,c.parseBytes=u,c.intFromLE=h},function(t,e,r){function n(t){this.rand=t}var i;if(t.exports=function(t){return i||(i=new n(null)),i.generate(t)},t.exports.Rand=n,n.prototype.generate=function(t){return this._rand(t)},"object"==typeof window)window.crypto&&window.crypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.crypto.getRandomValues(e),e}:window.msCrypto&&window.msCrypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.msCrypto.getRandomValues(e),e}:n.prototype._rand=function(){throw new Error("Not implemented yet")};else try{var o=r(609);n.prototype._rand=function(t){return o.randomBytes(t)}}catch(t){n.prototype._rand=function(t){for(var e=new Uint8Array(t),r=0;r<e.length;r++)e[r]=this.rand.getByte();return e}}},function(t,e,r){function n(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}var i=r(49),o=i.utils,a=o.assert;e.BlockHash=n,n.prototype.update=function(t,e){if(t=o.toArray(t,e),this.pending?this.pending=this.pending.concat(t):this.pending=t,this.pendingTotal+=t.length,this.pending.length>=this._delta8){t=this.pending;var r=t.length%this._delta8;this.pending=t.slice(t.length-r,t.length),0===this.pending.length&&(this.pending=null),t=o.join32(t,0,t.length-r,this.endian);for(var n=0;n<t.length;n+=this._delta32)this._update(t,n,n+this._delta32)}return this},n.prototype.digest=function(t){return this.update(this._pad()),a(null===this.pending),this._digest(t)},n.prototype._pad=function(){var t=this.pendingTotal,e=this._delta8,r=e-(t+this.padLength)%e,n=new Array(r+this.padLength);n[0]=128;for(var i=1;i<r;i++)n[i]=0;if(t<<=3,"big"===this.endian){for(var o=8;o<this.padLength;o++)n[i++]=0;n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=t>>>24&255,n[i++]=t>>>16&255,n[i++]=t>>>8&255,n[i++]=255&t}else{n[i++]=255&t,n[i++]=t>>>8&255,n[i++]=t>>>16&255,n[i++]=t>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0;for(var o=8;o<this.padLength;o++)n[i++]=0}return n}},function(t,e,r){function n(t,e,r){return this instanceof n?(this.Hash=t,this.blockSize=t.blockSize/8,this.outSize=t.outSize/8,this.inner=null,this.outer=null,void this._init(o.toArray(e,r))):new n(t,e,r)}var i=r(49),o=i.utils,a=o.assert;t.exports=n,n.prototype._init=function(t){t.length>this.blockSize&&(t=(new this.Hash).update(t).digest()),a(t.length<=this.blockSize);for(var e=t.length;e<this.blockSize;e++)t.push(0);for(var e=0;e<t.length;e++)t[e]^=54;this.inner=(new this.Hash).update(t);for(var e=0;e<t.length;e++)t[e]^=106;this.outer=(new this.Hash).update(t)},n.prototype.update=function(t,e){return this.inner.update(t,e),this},n.prototype.digest=function(t){return this.outer.update(this.inner.digest()),this.outer.digest(t)}},function(t,e,r){function n(){return this instanceof n?(l.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.endian="little")):new n}function i(t,e,r,n){return t<=15?e^r^n:t<=31?e&r|~e&n:t<=47?(e|~r)^n:t<=63?e&n|r&~n:e^(r|~n)}function o(t){return t<=15?0:t<=31?1518500249:t<=47?1859775393:t<=63?2400959708:2840853838}function a(t){return t<=15?1352829926:t<=31?1548603684:t<=47?1836072691:t<=63?2053994217:0}var f=r(49),s=f.utils,u=s.rotl32,h=s.sum32,c=s.sum32_3,d=s.sum32_4,l=f.common.BlockHash;s.inherits(n,l),e.ripemd160=n,n.blockSize=512,n.outSize=160,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(t,e){for(var r=this.h[0],n=this.h[1],f=this.h[2],s=this.h[3],l=this.h[4],m=r,g=n,w=f,_=s,M=l,S=0;S<80;S++){var E=h(u(d(r,i(S,n,f,s),t[p[S]+e],o(S)),v[S]),l);r=l,l=s,s=u(f,10),f=n,n=E,E=h(u(d(m,i(79-S,g,w,_),t[b[S]+e],a(S)),y[S]),M),m=M,M=_,_=u(w,10),w=g,g=E}E=c(this.h[1],f,_),this.h[1]=c(this.h[2],s,M),this.h[2]=c(this.h[3],l,m),this.h[3]=c(this.h[4],r,g),this.h[4]=c(this.h[0],n,w),this.h[0]=E},n.prototype._digest=function(t){return"hex"===t?s.toHex32(this.h,"little"):s.split32(this.h,"little")};var p=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],b=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],v=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],y=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},function(t,e,r){function n(){return this instanceof n?(X.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=Y,void(this.W=new Array(64))):new n}function i(){return this instanceof i?(n.call(this),void(this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])):new i}function o(){return this instanceof o?(X.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=W,void(this.W=new Array(160))):new o}function a(){return this instanceof a?(o.call(this),void(this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428])):new a}function f(){return this instanceof f?(X.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.W=new Array(80))):new f}function s(t,e,r){return t&e^~t&r}function u(t,e,r){return t&e^t&r^e&r}function h(t,e,r){return t^e^r}function c(t){return R(t,2)^R(t,13)^R(t,22)}function d(t){return R(t,6)^R(t,11)^R(t,25)}function l(t){return R(t,7)^R(t,18)^t>>>3}function p(t){return R(t,17)^R(t,19)^t>>>10}function b(t,e,r,n){return 0===t?s(e,r,n):1===t||3===t?h(e,r,n):2===t?u(e,r,n):void 0}function v(t,e,r,n,i,o){var a=t&r^~t&i;return a<0&&(a+=4294967296),a}function y(t,e,r,n,i,o){var a=e&n^~e&o;return a<0&&(a+=4294967296),a}function m(t,e,r,n,i,o){var a=t&r^t&i^r&i;return a<0&&(a+=4294967296),a}function g(t,e,r,n,i,o){var a=e&n^e&o^n&o;return a<0&&(a+=4294967296),a}function w(t,e){var r=N(t,e,28),n=N(e,t,2),i=N(e,t,7),o=r^n^i;return o<0&&(o+=4294967296),o}function _(t,e){var r=L(t,e,28),n=L(e,t,2),i=L(e,t,7),o=r^n^i;return o<0&&(o+=4294967296),o}function M(t,e){var r=N(t,e,14),n=N(t,e,18),i=N(e,t,9),o=r^n^i;return o<0&&(o+=4294967296),o}function S(t,e){var r=L(t,e,14),n=L(t,e,18),i=L(e,t,9),o=r^n^i;return o<0&&(o+=4294967296),o}function E(t,e){var r=N(t,e,1),n=N(t,e,8),i=U(t,e,7),o=r^n^i;return o<0&&(o+=4294967296),o}function A(t,e){var r=L(t,e,1),n=L(t,e,8),i=z(t,e,7),o=r^n^i;return o<0&&(o+=4294967296),o}function k(t,e){var r=N(t,e,19),n=N(e,t,29),i=U(t,e,6),o=r^n^i;return o<0&&(o+=4294967296),o}function x(t,e){var r=L(t,e,19),n=L(e,t,29),i=z(t,e,6),o=r^n^i;return o<0&&(o+=4294967296),o}var I=r(49),B=I.utils,O=B.assert,R=B.rotr32,P=B.rotl32,T=B.sum32,j=B.sum32_4,C=B.sum32_5,N=B.rotr64_hi,L=B.rotr64_lo,U=B.shr64_hi,z=B.shr64_lo,D=B.sum64,q=B.sum64_hi,F=B.sum64_lo,K=B.sum64_4_hi,G=B.sum64_4_lo,V=B.sum64_5_hi,H=B.sum64_5_lo,X=I.common.BlockHash,Y=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],W=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],Z=[1518500249,1859775393,2400959708,3395469782];B.inherits(n,X),e.sha256=n,n.blockSize=512,n.outSize=256,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n<r.length;n++)r[n]=j(p(r[n-2]),r[n-7],l(r[n-15]),r[n-16]);var i=this.h[0],o=this.h[1],a=this.h[2],f=this.h[3],h=this.h[4],b=this.h[5],v=this.h[6],y=this.h[7];O(this.k.length===r.length);for(var n=0;n<r.length;n++){var m=C(y,d(h),s(h,b,v),this.k[n],r[n]),g=T(c(i),u(i,o,a));y=v,v=b,b=h,h=T(f,m),f=a,a=o,o=i,i=T(m,g)}this.h[0]=T(this.h[0],i),this.h[1]=T(this.h[1],o),this.h[2]=T(this.h[2],a),this.h[3]=T(this.h[3],f),this.h[4]=T(this.h[4],h),this.h[5]=T(this.h[5],b),this.h[6]=T(this.h[6],v),this.h[7]=T(this.h[7],y)},n.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")},B.inherits(i,n),e.sha224=i,i.blockSize=512,i.outSize=224,i.hmacStrength=192,i.padLength=64,i.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h.slice(0,7),"big"):B.split32(this.h.slice(0,7),"big")},B.inherits(o,X),e.sha512=o,o.blockSize=1024,o.outSize=512,o.hmacStrength=192,o.padLength=128,o.prototype._prepareBlock=function(t,e){for(var r=this.W,n=0;n<32;n++)r[n]=t[e+n];for(;n<r.length;n+=2){var i=k(r[n-4],r[n-3]),o=x(r[n-4],r[n-3]),a=r[n-14],f=r[n-13],s=E(r[n-30],r[n-29]),u=A(r[n-30],r[n-29]),h=r[n-32],c=r[n-31];r[n]=K(i,o,a,f,s,u,h,c),r[n+1]=G(i,o,a,f,s,u,h,c)}},o.prototype._update=function(t,e){this._prepareBlock(t,e);var r=this.W,n=this.h[0],i=this.h[1],o=this.h[2],a=this.h[3],f=this.h[4],s=this.h[5],u=this.h[6],h=this.h[7],c=this.h[8],d=this.h[9],l=this.h[10],p=this.h[11],b=this.h[12],E=this.h[13],A=this.h[14],k=this.h[15];O(this.k.length===r.length);for(var x=0;x<r.length;x+=2){var I=A,B=k,R=M(c,d),P=S(c,d),T=v(c,d,l,p,b,E),j=y(c,d,l,p,b,E),C=this.k[x],N=this.k[x+1],L=r[x],U=r[x+1],z=V(I,B,R,P,T,j,C,N,L,U),K=H(I,B,R,P,T,j,C,N,L,U),I=w(n,i),B=_(n,i),R=m(n,i,o,a,f,s),P=g(n,i,o,a,f,s),G=q(I,B,R,P),X=F(I,B,R,P);A=b,k=E,b=l,E=p,l=c,p=d,c=q(u,h,z,K),d=F(h,h,z,K),u=f,h=s,f=o,s=a,o=n,a=i,n=q(z,K,G,X),i=F(z,K,G,X)}D(this.h,0,n,i),D(this.h,2,o,a),D(this.h,4,f,s),D(this.h,6,u,h),D(this.h,8,c,d),D(this.h,10,l,p),D(this.h,12,b,E),D(this.h,14,A,k)},o.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")},B.inherits(a,o),e.sha384=a,a.blockSize=1024,a.outSize=384,a.hmacStrength=192,a.padLength=128,a.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h.slice(0,12),"big"):B.split32(this.h.slice(0,12),"big")},B.inherits(f,X),e.sha1=f,f.blockSize=512,f.outSize=160,f.hmacStrength=80,f.padLength=64,f.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n<r.length;n++)r[n]=P(r[n-3]^r[n-8]^r[n-14]^r[n-16],1);for(var i=this.h[0],o=this.h[1],a=this.h[2],f=this.h[3],s=this.h[4],n=0;n<r.length;n++){var u=~~(n/20),h=C(P(i,5),b(u,o,a,f),s,r[n],Z[u]);s=f,f=a,a=P(o,30),o=i,i=h}this.h[0]=T(this.h[0],i),this.h[1]=T(this.h[1],o),this.h[2]=T(this.h[2],a),this.h[3]=T(this.h[3],f),this.h[4]=T(this.h[4],s)},f.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")}},function(t,e,r){function n(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"==typeof t)if(e){if("hex"===e){t=t.replace(/[^a-z0-9]+/gi,""),t.length%2!==0&&(t="0"+t);for(var n=0;n<t.length;n+=2)r.push(parseInt(t[n]+t[n+1],16))}}else for(var n=0;n<t.length;n++){var i=t.charCodeAt(n),o=i>>8,a=255&i;o?r.push(o,a):r.push(a)}else for(var n=0;n<t.length;n++)r[n]=0|t[n];return r}function i(t){for(var e="",r=0;r<t.length;r++)e+=f(t[r].toString(16));return e}function o(t){var e=t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24;return e>>>0}function a(t,e){for(var r="",n=0;n<t.length;n++){var i=t[n];"little"===e&&(i=o(i)),r+=s(i.toString(16))}return r}function f(t){return 1===t.length?"0"+t:t}function s(t){return 7===t.length?"0"+t:6===t.length?"00"+t:5===t.length?"000"+t:4===t.length?"0000"+t:3===t.length?"00000"+t:2===t.length?"000000"+t:1===t.length?"0000000"+t:t}function u(t,e,r,n){var i=r-e;y(i%4===0);for(var o=new Array(i/4),a=0,f=e;a<o.length;a++,f+=4){var s;s="big"===n?t[f]<<24|t[f+1]<<16|t[f+2]<<8|t[f+3]:t[f+3]<<24|t[f+2]<<16|t[f+1]<<8|t[f],o[a]=s>>>0}return o}function h(t,e){for(var r=new Array(4*t.length),n=0,i=0;n<t.length;n++,i+=4){var o=t[n];"big"===e?(r[i]=o>>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r}function c(t,e){return t>>>e|t<<32-e}function d(t,e){return t<<e|t>>>32-e}function l(t,e){return t+e>>>0}function p(t,e,r){return t+e+r>>>0}function b(t,e,r,n){return t+e+r+n>>>0}function v(t,e,r,n,i){return t+e+r+n+i>>>0}function y(t,e){if(!t)throw new Error(e||"Assertion failed")}function m(t,e,r,n){var i=t[e],o=t[e+1],a=n+o>>>0,f=(a<n?1:0)+r+i;t[e]=f>>>0,t[e+1]=a}function g(t,e,r,n){var i=e+n>>>0,o=(i<e?1:0)+t+r;return o>>>0}function w(t,e,r,n){var i=e+n;return i>>>0}function _(t,e,r,n,i,o,a,f){var s=0,u=e;u=u+n>>>0,s+=u<e?1:0,u=u+o>>>0,s+=u<o?1:0,u=u+f>>>0,s+=u<f?1:0;var h=t+r+i+a+s;return h>>>0}function M(t,e,r,n,i,o,a,f){var s=e+n+o+f;return s>>>0}function S(t,e,r,n,i,o,a,f,s,u){var h=0,c=e;c=c+n>>>0,h+=c<e?1:0,c=c+o>>>0,h+=c<o?1:0,c=c+f>>>0,h+=c<f?1:0,c=c+u>>>0,h+=c<u?1:0;var d=t+r+i+a+s+h;return d>>>0}function E(t,e,r,n,i,o,a,f,s,u){var h=e+n+o+f+u;return h>>>0}function A(t,e,r){var n=e<<32-r|t>>>r;return n>>>0}function k(t,e,r){var n=t<<32-r|e>>>r;return n>>>0}function x(t,e,r){return t>>>r}function I(t,e,r){var n=t<<32-r|e>>>r;return n>>>0}var B=e,O=r(2);B.toArray=n,B.toHex=i,B.htonl=o,B.toHex32=a,B.zero2=f,B.zero8=s,B.join32=u,B.split32=h,B.rotr32=c,B.rotl32=d,B.sum32=l,B.sum32_3=p,B.sum32_4=b,B.sum32_5=v,B.assert=y,B.inherits=O,e.sum64=m,e.sum64_hi=g,e.sum64_lo=w,e.sum64_4_hi=_,e.sum64_4_lo=M,e.sum64_5_hi=S,e.sum64_5_lo=E,e.rotr64_hi=A,e.rotr64_lo=k,e.shr64_hi=x,e.shr64_lo=I},function(t,e,r){var n=r(100),i=n.define("RSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())});e.RSAPrivateKey=i;var o=n.define("RSAPublicKey",function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())});e.RSAPublicKey=o;var a=n.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(f),this.key("subjectPublicKey").bitstr())});e.PublicKey=a;var f=n.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())}),s=n.define("PrivateKeyInfo",function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(f),this.key("subjectPrivateKey").octstr())});e.PrivateKey=s;var u=n.define("EncryptedPrivateKeyInfo",function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())});e.EncryptedPrivateKey=u;var h=n.define("DSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())});e.DSAPrivateKey=h,e.DSAparam=n.define("DSAparam",function(){this.int()});var c=n.define("ECPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(d),this.key("publicKey").optional().explicit(1).bitstr())});e.ECPrivateKey=c;var d=n.define("ECParameters",function(){this.choice({namedCurve:this.objid()})});e.signature=n.define("signature",function(){this.seq().obj(this.key("r").int(),this.key("s").int())})},function(t,e,r){(function(e){var n=/Proc-Type: 4,ENCRYPTED\r?\nDEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\r?\n\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n/m,i=/^-----BEGIN (.*) KEY-----\r?\n/m,o=/^-----BEGIN (.*) KEY-----\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n-----END \1 KEY-----$/m,a=r(148),f=r(219);t.exports=function(t,r){var s,u=t.toString(),h=u.match(n);if(h){var c="aes"+h[1],d=new e(h[2],"hex"),l=new e(h[3].replace(/\r?\n/g,""),"base64"),p=a(r,d.slice(0,8),parseInt(h[1],10)).key,b=[],v=f.createDecipheriv(c,p,d);b.push(v.update(l)),b.push(v.final()),s=e.concat(b)}else{var y=u.match(o);s=new e(y[2].replace(/\r?\n/g,""),"base64")}var m=u.match(i)[1]+" KEY";return{tag:m,data:s}}}).call(e,r(1).Buffer)},function(t,e,r){function n(t,e){this.name=t,this.body=e,this.decoders={},this.encoders={}}var i=r(100),o=r(2),a=e;a.define=function(t,e){return new n(t,e)},n.prototype._createNamed=function(t){var e;try{e=r(251).runInThisContext("(function "+this.name+"(entity) {\n this._initNamed(entity);\n})")}catch(t){e=function(t){this._initNamed(t)}}return o(e,t),e.prototype._initNamed=function(e){t.call(this,e)},new e(this)},n.prototype._getDecoder=function(t){return t=t||"der",this.decoders.hasOwnProperty(t)||(this.decoders[t]=this._createNamed(i.decoders[t])),this.decoders[t]},n.prototype.decode=function(t,e,r){return this._getDecoder(e).decode(t,r)},n.prototype._getEncoder=function(t){return t=t||"der",this.encoders.hasOwnProperty(t)||(this.encoders[t]=this._createNamed(i.encoders[t])),this.encoders[t]},n.prototype.encode=function(t,e,r){return this._getEncoder(e).encode(t,r)}},function(t,e,r){function n(t,e){var r={};this._baseState=r,r.enc=t,r.parent=e||null,r.children=null,r.tag=null,r.args=null,r.reverseArgs=null,r.choice=null,r.optional=!1,r.any=!1,r.obj=!1,r.use=null,r.useDecoder=null,r.key=null,r.default=null,r.explicit=null,r.implicit=null,r.contains=null,r.parent||(r.children=[],this._wrap())}var i=r(68).Reporter,o=r(68).EncoderBuffer,a=r(68).DecoderBuffer,f=r(538),s=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],u=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(s),h=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];t.exports=n;var c=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];n.prototype.clone=function(){var t=this._baseState,e={};c.forEach(function(r){e[r]=t[r]});var r=new this.constructor(e.parent);return r._baseState=e,r},n.prototype._wrap=function(){var t=this._baseState;u.forEach(function(e){this[e]=function(){var r=new this.constructor(this);return t.children.push(r),r[e].apply(r,arguments)}},this)},n.prototype._init=function(t){var e=this._baseState;f(null===e.parent),t.call(this),e.children=e.children.filter(function(t){return t._baseState.parent===this},this),f.equal(e.children.length,1,"Root node can have only one child")},n.prototype._useArgs=function(t){var e=this._baseState,r=t.filter(function(t){return t instanceof this.constructor},this);t=t.filter(function(t){return!(t instanceof this.constructor)},this),0!==r.length&&(f(null===e.children),e.children=r,r.forEach(function(t){t._baseState.parent=this},this)),0!==t.length&&(f(null===e.args),e.args=t,e.reverseArgs=t.map(function(t){if("object"!=typeof t||t.constructor!==Object)return t;var e={};return Object.keys(t).forEach(function(r){r==(0|r)&&(r|=0);var n=t[r];e[n]=r}),e}))},h.forEach(function(t){n.prototype[t]=function(){var e=this._baseState;throw new Error(t+" not implemented for encoding: "+e.enc)}}),s.forEach(function(t){n.prototype[t]=function(){var e=this._baseState,r=Array.prototype.slice.call(arguments);return f(null===e.tag),e.tag=t,this._useArgs(r),this}}),n.prototype.use=function(t){var e=this._baseState;return f(null===e.use),e.use=t,this},n.prototype.optional=function(){var t=this._baseState;return t.optional=!0,this},n.prototype.def=function(t){var e=this._baseState;return f(null===e.default),e.default=t,e.optional=!0,this},n.prototype.explicit=function(t){var e=this._baseState;return f(null===e.explicit&&null===e.implicit),e.explicit=t,this},n.prototype.implicit=function(t){var e=this._baseState;return f(null===e.explicit&&null===e.implicit),e.implicit=t,this},n.prototype.obj=function(){var t=this._baseState,e=Array.prototype.slice.call(arguments);return t.obj=!0,0!==e.length&&this._useArgs(e),this},n.prototype.key=function(t){var e=this._baseState;return f(null===e.key),e.key=t,this},n.prototype.any=function(){var t=this._baseState;return t.any=!0,this},n.prototype.choice=function(t){var e=this._baseState;return f(null===e.choice),e.choice=t,this._useArgs(Object.keys(t).map(function(e){return t[e]})),this},n.prototype.contains=function(t){var e=this._baseState;return f(null===e.use),e.contains=t,this},n.prototype._decode=function(t,e){var r=this._baseState;if(null===r.parent)return t.wrapResult(r.children[0]._decode(t,e));var n=r.default,i=!0,o=null;if(null!==r.key&&(o=t.enterKey(r.key)),r.optional){var f=null;if(null!==r.explicit?f=r.explicit:null!==r.implicit?f=r.implicit:null!==r.tag&&(f=r.tag),null!==f||r.any){if(i=this._peekTag(t,f,r.any),t.isError(i))return i}else{var s=t.save();try{null===r.choice?this._decodeGeneric(r.tag,t,e):this._decodeChoice(t,e),i=!0}catch(t){i=!1}t.restore(s)}}var u;if(r.obj&&i&&(u=t.enterObject()),i){if(null!==r.explicit){var h=this._decodeTag(t,r.explicit);if(t.isError(h))return h;t=h}var c=t.offset;if(null===r.use&&null===r.choice){if(r.any)var s=t.save();var d=this._decodeTag(t,null!==r.implicit?r.implicit:r.tag,r.any);if(t.isError(d))return d;r.any?n=t.raw(s):t=d}if(e&&e.track&&null!==r.tag&&e.track(t.path(),c,t.length,"tagged"),e&&e.track&&null!==r.tag&&e.track(t.path(),t.offset,t.length,"content"),n=r.any?n:null===r.choice?this._decodeGeneric(r.tag,t,e):this._decodeChoice(t,e),t.isError(n))return n;if(r.any||null!==r.choice||null===r.children||r.children.forEach(function(r){r._decode(t,e)}),r.contains&&("octstr"===r.tag||"bitstr"===r.tag)){var l=new a(n);n=this._getUse(r.contains,t._reporterState.obj)._decode(l,e)}}return r.obj&&i&&(n=t.leaveObject(u)),null===r.key||null===n&&i!==!0?null!==o&&t.exitKey(o):t.leaveKey(o,r.key,n),n},n.prototype._decodeGeneric=function(t,e,r){var n=this._baseState;return"seq"===t||"set"===t?null:"seqof"===t||"setof"===t?this._decodeList(e,t,n.args[0],r):/str$/.test(t)?this._decodeStr(e,t,r):"objid"===t&&n.args?this._decodeObjid(e,n.args[0],n.args[1],r):"objid"===t?this._decodeObjid(e,null,null,r):"gentime"===t||"utctime"===t?this._decodeTime(e,t,r):"null_"===t?this._decodeNull(e,r):"bool"===t?this._decodeBool(e,r):"int"===t||"enum"===t?this._decodeInt(e,n.args&&n.args[0],r):null!==n.use?this._getUse(n.use,e._reporterState.obj)._decode(e,r):e.error("unknown tag: "+t)},n.prototype._getUse=function(t,e){var r=this._baseState;return r.useDecoder=this._use(t,e),f(null===r.useDecoder._baseState.parent),r.useDecoder=r.useDecoder._baseState.children[0],r.implicit!==r.useDecoder._baseState.implicit&&(r.useDecoder=r.useDecoder.clone(),r.useDecoder._baseState.implicit=r.implicit),r.useDecoder},n.prototype._decodeChoice=function(t,e){var r=this._baseState,n=null,i=!1;return Object.keys(r.choice).some(function(o){var a=t.save(),f=r.choice[o];try{var s=f._decode(t,e);if(t.isError(s))return!1;n={type:o,value:s},i=!0}catch(e){return t.restore(a),!1}return!0},this),i?n:t.error("Choice not matched")},n.prototype._createEncoderBuffer=function(t){return new o(t,this.reporter)},n.prototype._encode=function(t,e,r){var n=this._baseState;if(null===n.default||n.default!==t){var i=this._encodeValue(t,e,r);if(void 0!==i&&!this._skipDefault(i,e,r))return i}},n.prototype._encodeValue=function(t,e,r){var n=this._baseState;if(null===n.parent)return n.children[0]._encode(t,e||new i);var o=null;if(this.reporter=e,n.optional&&void 0===t){if(null===n.default)return;t=n.default}var a=null,f=!1;if(n.any)o=this._createEncoderBuffer(t);else if(n.choice)o=this._encodeChoice(t,e);else if(n.contains)a=this._getUse(n.contains,r)._encode(t,e),f=!0;else if(n.children)a=n.children.map(function(r){if("null_"===r._baseState.tag)return r._encode(null,e,t);if(null===r._baseState.key)return e.error("Child should have a key");var n=e.enterKey(r._baseState.key);if("object"!=typeof t)return e.error("Child expected, but input is not object");var i=r._encode(t[r._baseState.key],e,t);return e.leaveKey(n),i},this).filter(function(t){return t}),a=this._createEncoderBuffer(a);else if("seqof"===n.tag||"setof"===n.tag){if(!n.args||1!==n.args.length)return e.error("Too many args for : "+n.tag);if(!Array.isArray(t))return e.error("seqof/setof, but data is not Array");var s=this.clone();s._baseState.implicit=null,a=this._createEncoderBuffer(t.map(function(r){var n=this._baseState;return this._getUse(n.args[0],t)._encode(r,e)},s))}else null!==n.use?o=this._getUse(n.use,r)._encode(t,e):(a=this._encodePrimitive(n.tag,t),f=!0);var o;if(!n.any&&null===n.choice){var u=null!==n.implicit?n.implicit:n.tag,h=null===n.implicit?"universal":"context";null===u?null===n.use&&e.error("Tag could be ommited only for .use()"):null===n.use&&(o=this._encodeComposite(u,f,h,a))}return null!==n.explicit&&(o=this._encodeComposite(n.explicit,!1,"context",o)),o},n.prototype._encodeChoice=function(t,e){var r=this._baseState,n=r.choice[t.type];return n||f(!1,t.type+" not found in "+JSON.stringify(Object.keys(r.choice))),n._encode(t.value,e)},n.prototype._encodePrimitive=function(t,e){var r=this._baseState;if(/str$/.test(t))return this._encodeStr(e,t);if("objid"===t&&r.args)return this._encodeObjid(e,r.reverseArgs[0],r.args[1]);if("objid"===t)return this._encodeObjid(e,null,null);if("gentime"===t||"utctime"===t)return this._encodeTime(e,t);if("null_"===t)return this._encodeNull();if("int"===t||"enum"===t)return this._encodeInt(e,r.args&&r.reverseArgs[0]);if("bool"===t)return this._encodeBool(e);throw new Error("Unsupported tag: "+t)},n.prototype._isNumstr=function(t){return/^[0-9 ]*$/.test(t)},n.prototype._isPrintstr=function(t){return/^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(t)}},function(t,e,r){function n(t){this._reporterState={obj:null,path:[],options:t||{},errors:[]}}function i(t,e){this.path=t,this.rethrow(e)}var o=r(2);e.Reporter=n,n.prototype.isError=function(t){return t instanceof i},n.prototype.save=function(){var t=this._reporterState;return{obj:t.obj,pathLen:t.path.length}},n.prototype.restore=function(t){var e=this._reporterState;e.obj=t.obj,e.path=e.path.slice(0,t.pathLen)},n.prototype.enterKey=function(t){return this._reporterState.path.push(t)},n.prototype.exitKey=function(t){var e=this._reporterState;e.path=e.path.slice(0,t-1)},n.prototype.leaveKey=function(t,e,r){var n=this._reporterState;this.exitKey(t),null!==n.obj&&(n.obj[e]=r)},n.prototype.path=function(){return this._reporterState.path.join("/")},n.prototype.enterObject=function(){var t=this._reporterState,e=t.obj;return t.obj={},e},n.prototype.leaveObject=function(t){var e=this._reporterState,r=e.obj;return e.obj=t,r},n.prototype.error=function(t){var e,r=this._reporterState,n=t instanceof i;if(e=n?t:new i(r.path.map(function(t){return"["+JSON.stringify(t)+"]"}).join(""),t.message||t,t.stack),!r.options.partial)throw e;return n||r.errors.push(e),e},n.prototype.wrapResult=function(t){var e=this._reporterState;return e.options.partial?{result:this.isError(t)?null:t,errors:e.errors}:t},o(i,Error),i.prototype.rethrow=function(t){if(this.message=t+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,i),!this.stack)try{throw new Error(this.message)}catch(t){this.stack=t.stack}return this}},function(t,e,r){var n=r(215);e.tagClass={0:"universal",1:"application",2:"context",3:"private"},e.tagClassByName=n._reverse(e.tagClass),e.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",
|
||
21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},e.tagByName=n._reverse(e.tag)},function(t,e,r){var n=e;n.der=r(216),n.pem=r(535)},function(t,e,r){function n(t){a.call(this,t),this.enc="pem"}var i=r(2),o=r(1).Buffer,a=r(216);i(n,a),t.exports=n,n.prototype.decode=function(t,e){for(var r=t.toString().split(/[\r\n]+/g),n=e.label.toUpperCase(),i=/^-----(BEGIN|END) ([^-]+)-----$/,f=-1,s=-1,u=0;u<r.length;u++){var h=r[u].match(i);if(null!==h&&h[2]===n){if(f!==-1){if("END"!==h[1])break;s=u;break}if("BEGIN"!==h[1])break;f=u}}if(f===-1||s===-1)throw new Error("PEM section not found for: "+n);var c=r.slice(f+1,s).join("");c.replace(/[^a-z0-9\+\/=]+/gi,"");var d=new o(c,"base64");return a.prototype.decode.call(this,d,e)}},function(t,e,r){var n=e;n.der=r(217),n.pem=r(537)},function(t,e,r){function n(t){o.call(this,t),this.enc="pem"}var i=r(2),o=r(217);i(n,o),t.exports=n,n.prototype.encode=function(t,e){for(var r=o.prototype.encode.call(this,t),n=r.toString("base64"),i=["-----BEGIN "+e.label+"-----"],a=0;a<n.length;a+=64)i.push(n.slice(a,a+64));return i.push("-----END "+e.label+"-----"),i.join("\n")}},function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=r,r.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(u.call(this),this._cache=new i,this._last=void 0,this._cipher=new s.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(t){for(var e=t[15],r=-1;++r<e;)if(t[r+(16-e)]!==e)throw new Error("unable to decrypt data");if(16!==e)return t.slice(0,16-e)}function a(e,r,i){var o=c[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(b[o.mode],r,i,!0):"auth"===o.type?new l(b[o.mode],r,i,!0):new n(b[o.mode],r,i)}function f(t,e){var r=c[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=p(e,!1,r.key,r.iv);return a(t,n.key,n.iv)}var s=r(101),u=r(103),h=r(2),c=r(147),d=r(226),l=r(218),p=r(148);h(n,u),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get(this._autopadding);)n=this._mode.decrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return o(this._mode.decrypt(this,t));if(t)throw new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(t){var e;if(t){if(this.cache.length>16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},i.prototype.flush=function(){if(this.cache.length)return this.cache};var b={ECB:r(224),CBC:r(220),CFB:r(221),CFB8:r(223),CFB1:r(222),OFB:r(225),CTR:r(102),GCM:r(102)};e.createDecipher=f,e.createDecipheriv=a}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(s.call(this),this._cache=new i,this._cipher=new f.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(e,r,i){var o=h[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(p[o.mode],r,i):"auth"===o.type?new l(p[o.mode],r,i):new n(p[o.mode],r,i)}function a(t,e){var r=h[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=c(e,!1,r.key,r.iv);return o(t,n.key,n.iv)}var f=r(101),s=r(103),u=r(2),h=r(147),c=r(148),d=r(226),l=r(218);u(n,s),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get();)n=this._mode.encrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return t=this._mode.encrypt(this,t),this._cipher.scrub(),t;if("10101010101010101010101010101010"!==t.toString("hex"))throw this._cipher.scrub(),new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(){if(this.cache.length>15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},i.prototype.flush=function(){for(var e=16-this.cache.length,r=new t(e),n=-1;++n<e;)r.writeUInt8(e,n);var i=t.concat([this.cache,r]);return i};var p={ECB:r(224),CBC:r(220),CFB:r(221),CFB8:r(223),CFB1:r(222),OFB:r(225),CTR:r(102),GCM:r(102)};e.createCipheriv=o,e.createCipher=a}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function r(t){this.h=t,this.state=new e(16),this.state.fill(0),this.cache=new e("")}function n(t){return[t.readUInt32BE(0),t.readUInt32BE(4),t.readUInt32BE(8),t.readUInt32BE(12)]}function i(t){t=t.map(o);var r=new e(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r}function o(t){var e,r;return e=t>s||t<0?(r=Math.abs(t)%s,t<0?s-r:r):t}function a(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}var f=new e(16);f.fill(0),t.exports=r,r.prototype.ghash=function(t){for(var e=-1;++e<t.length;)this.state[e]^=t[e];this._multiply()},r.prototype._multiply=function(){for(var t,e,r,o=n(this.h),f=[0,0,0,0],s=-1;++s<128;){for(e=0!==(this.state[~~(s/8)]&1<<7-s%8),e&&(f=a(f,o)),r=0!==(1&o[3]),t=3;t>0;t--)o[t]=o[t]>>>1|(1&o[t-1])<<31;o[0]=o[0]>>>1,r&&(o[0]=o[0]^225<<24)}this.state=i(f)},r.prototype.update=function(t){this.cache=e.concat([this.cache,t]);for(var r;this.cache.length>=16;)r=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(r)},r.prototype.final=function(t,r){return this.cache.length&&this.ghash(e.concat([this.cache,f],16)),this.ghash(i([0,t,0,r])),this.state};var s=Math.pow(2,32)}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,e,r,n){var a=v(e);if(a.curve){if("ecdsa"!==n)throw new Error("wrong private key type");return i(t,a)}if("dsa"===a.type){if("dsa"!==n)throw new Error("wrong private key type");return o(t,a,r)}if("rsa"!==n)throw new Error("wrong private key type");for(var f=a.modulus.byteLength(),s=[0,1];t.length+s.length+1<f;)s.push(255);s.push(0);for(var u=-1;++u<t.length;)s.push(t[u]);var h=l(s,a);return h}function i(t,r){var n=p[r.curve.join(".")];if(!n)throw new Error("unknown curve "+r.curve.join("."));var i=new m(n),o=i.genKeyPair();o._importPrivate(r.privateKey);var a=o.sign(t);return new e(a.toDER())}function o(t,e,r){for(var n,i=e.params.priv_key,o=e.params.p,u=e.params.q,d=e.params.g,l=new y(0),p=s(t,u).mod(u),b=!1,v=f(i,u,t,r);b===!1;)n=h(u,v,r),l=c(d,n,o,u),b=n.invm(u).imul(p.add(i.mul(l))).mod(u),b.cmpn(0)||(b=!1,l=new y(0));return a(l,b)}function a(t,r){t=t.toArray(),r=r.toArray(),128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r));var n=t.length+r.length+4,i=[48,n,2,t.length];return i=i.concat(t,[2,r.length],r),new e(i)}function f(t,r,n,i){if(t=new e(t.toArray()),t.length<r.byteLength()){var o=new e(r.byteLength()-t.length);o.fill(0),t=e.concat([o,t])}var a=n.length,f=u(n,r),s=new e(a);s.fill(1);var h=new e(a);return h.fill(0),h=d(i,h).update(s).update(new e([0])).update(t).update(f).digest(),s=d(i,h).update(s).digest(),h=d(i,h).update(s).update(new e([1])).update(t).update(f).digest(),s=d(i,h).update(s).digest(),{k:h,v:s}}function s(t,e){var r=new y(t),n=(t.length<<3)-e.bitLength();return n>0&&r.ishrn(n),r}function u(t,r){t=s(t,r),t=t.mod(r);var n=new e(t.toArray());if(n.length<r.byteLength()){var i=new e(r.byteLength()-n.length);i.fill(0),n=e.concat([i,n])}return n}function h(t,r,n){var i,o;do{for(i=new e("");8*i.length<t.bitLength();)r.v=d(n,r.k).update(r.v).digest(),i=e.concat([i,r.v]);o=s(i,t),r.k=d(n,r.k).update(r.v).update(new e([0])).digest(),r.v=d(n,r.k).update(r.v).digest()}while(o.cmp(t)!==-1);return o}function c(t,e,r,n){return t.toRed(y.mont(r)).redPow(e).fromRed().mod(n)}var d=r(149),l=r(507),p=r(212),b=r(19),v=r(213),y=r(18),m=b.ec;t.exports=n,t.exports.getKey=f,t.exports.makeKey=h}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r,n,a){var f=u(n);if("ec"===f.type){if("ecdsa"!==a)throw new Error("wrong public key type");return i(t,r,f)}if("dsa"===f.type){if("dsa"!==a)throw new Error("wrong public key type");return o(t,r,f)}if("rsa"!==a)throw new Error("wrong public key type");for(var s=f.modulus.byteLength(),c=[1],d=0;r.length+c.length+2<s;)c.push(255),d++;c.push(0);for(var l=-1;++l<r.length;)c.push(r[l]);c=new e(c);var p=h.mont(f.modulus);t=new h(t).toRed(p),t=t.redPow(new h(f.publicExponent)),t=new e(t.fromRed().toArray());var b=0;for(d<8&&(b=1),s=Math.min(t.length,c.length),t.length!==c.length&&(b=1),l=-1;++l<s;)b|=t[l]^c[l];return 0===b}function i(t,e,r){var n=f[r.data.algorithm.curve.join(".")];if(!n)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var i=new c(n),o=r.data.subjectPrivateKey.data;return i.verify(e,t,o)}function o(t,e,r){var n=r.data.p,i=r.data.q,o=r.data.g,f=r.data.pub_key,s=u.signature.decode(t,"der"),c=s.s,d=s.r;a(c,i),a(d,i);var l=h.mont(n),p=c.invm(i),b=o.toRed(l).redPow(new h(e).mul(p).mod(i)).fromRed().mul(f.toRed(l).redPow(d.mul(p).mod(i)).fromRed()).mod(n).mod(i);return!b.cmp(d)}function a(t,e){if(t.cmpn(0)<=0)throw new Error("invalid sig");if(t.cmp(e)>=e)throw new Error("invalid sig")}var f=r(212),s=r(19),u=r(213),h=r(18),c=s.ec;t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){this.curveType=f[t],this.curveType||(this.curveType={name:t}),this.curve=new o.ec(this.curveType.name),this.keys=void 0}function i(t,r,n){Array.isArray(t)||(t=t.toArray());var i=new e(t);if(n&&i.length<n){var o=new e(n-i.length);o.fill(0),i=e.concat([o,i])}return r?i.toString(r):i}var o=r(22),a=r(30);t.exports=function(t){return new n(t)};var f={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};f.p224=f.secp224r1,f.p256=f.secp256r1=f.prime256v1,f.p192=f.secp192r1=f.prime192v1,f.p384=f.secp384r1,f.p521=f.secp521r1,n.prototype.generateKeys=function(t,e){return this.keys=this.curve.genKeyPair(),this.getPublicKey(t,e)},n.prototype.computeSecret=function(t,r,n){r=r||"utf8",e.isBuffer(t)||(t=new e(t,r));var o=this.curve.keyFromPublic(t).getPublic(),a=o.mul(this.keys.getPrivate()).getX();return i(a,n,this.curveType.byteLength)},n.prototype.getPublicKey=function(t,e){var r=this.keys.getPublic("compressed"===e,!0);return"hybrid"===e&&(r[r.length-1]%2?r[0]=7:r[0]=6),i(r,t)},n.prototype.getPrivateKey=function(t){return i(this.keys.getPrivate(),t)},n.prototype.setPublicKey=function(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this.keys._importPublic(t),this},n.prototype.setPrivateKey=function(t,r){r=r||"utf8",e.isBuffer(t)||(t=new e(t,r));var n=new a(t);return n=n.toString(16),this.keys._importPrivate(n),this}}).call(e,r(1).Buffer)},function(t,e,r){"use strict";function n(t,e){this.type=t,this.p=new o(e.p,16),this.red=e.prime?o.red(e.prime):o.mont(this.p),this.zero=new o(0).toRed(this.red),this.one=new o(1).toRed(this.red),this.two=new o(2).toRed(this.red),this.n=e.n&&new o(e.n,16),this.g=e.g&&this.pointFromJSON(e.g,e.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function i(t,e){this.curve=t,this.type=e,this.precomputed=null}var o=r(30),a=r(22),f=a.utils,s=f.getNAF,u=f.getJSF,h=f.assert;t.exports=n,n.prototype.point=function(){throw new Error("Not implemented")},n.prototype.validate=function(){throw new Error("Not implemented")},n.prototype._fixedNafMul=function(t,e){h(t.precomputed);var r=t._getDoubles(),n=s(e,1),i=(1<<r.step+1)-(r.step%2===0?2:1);i/=3;for(var o=[],a=0;a<n.length;a+=r.step){for(var f=0,e=a+r.step-1;e>=a;e--)f=(f<<1)+n[e];o.push(f)}for(var u=this.jpoint(null,null,null),c=this.jpoint(null,null,null),d=i;d>0;d--){for(var a=0;a<o.length;a++){var f=o[a];f===d?c=c.mixedAdd(r.points[a]):f===-d&&(c=c.mixedAdd(r.points[a].neg()))}u=u.add(c)}return u.toP()},n.prototype._wnafMul=function(t,e){var r=4,n=t._getNAFPoints(r);r=n.wnd;for(var i=n.points,o=s(e,r),a=this.jpoint(null,null,null),f=o.length-1;f>=0;f--){for(var e=0;f>=0&&0===o[f];f--)e++;if(f>=0&&e++,a=a.dblp(e),f<0)break;var u=o[f];h(0!==u),a="affine"===t.type?u>0?a.mixedAdd(i[u-1>>1]):a.mixedAdd(i[-u-1>>1].neg()):u>0?a.add(i[u-1>>1]):a.add(i[-u-1>>1].neg())}return"affine"===t.type?a.toP():a},n.prototype._wnafMulAdd=function(t,e,r,n,i){for(var o=this._wnafT1,a=this._wnafT2,f=this._wnafT3,h=0,c=0;c<n;c++){var d=e[c],l=d._getNAFPoints(t);o[c]=l.wnd,a[c]=l.points}for(var c=n-1;c>=1;c-=2){var p=c-1,b=c;if(1===o[p]&&1===o[b]){var v=[e[p],null,null,e[b]];0===e[p].y.cmp(e[b].y)?(v[1]=e[p].add(e[b]),v[2]=e[p].toJ().mixedAdd(e[b].neg())):0===e[p].y.cmp(e[b].y.redNeg())?(v[1]=e[p].toJ().mixedAdd(e[b]),v[2]=e[p].add(e[b].neg())):(v[1]=e[p].toJ().mixedAdd(e[b]),v[2]=e[p].toJ().mixedAdd(e[b].neg()));var y=[-3,-1,-5,-7,0,7,5,1,3],m=u(r[p],r[b]);h=Math.max(m[0].length,h),f[p]=new Array(h),f[b]=new Array(h);for(var g=0;g<h;g++){var w=0|m[0][g],_=0|m[1][g];f[p][g]=y[3*(w+1)+(_+1)],f[b][g]=0,a[p]=v}}else f[p]=s(r[p],o[p]),f[b]=s(r[b],o[b]),h=Math.max(f[p].length,h),h=Math.max(f[b].length,h)}for(var M=this.jpoint(null,null,null),S=this._wnafT4,c=h;c>=0;c--){for(var E=0;c>=0;){for(var A=!0,g=0;g<n;g++)S[g]=0|f[g][c],0!==S[g]&&(A=!1);if(!A)break;E++,c--}if(c>=0&&E++,M=M.dblp(E),c<0)break;for(var g=0;g<n;g++){var d,k=S[g];0!==k&&(k>0?d=a[g][k-1>>1]:k<0&&(d=a[g][-k-1>>1].neg()),M="affine"===d.type?M.mixedAdd(d):M.add(d))}}for(var c=0;c<n;c++)a[c]=null;return i?M:M.toP()},n.BasePoint=i,i.prototype.eq=function(){throw new Error("Not implemented")},i.prototype.validate=function(){return this.curve.validate(this)},n.prototype.decodePoint=function(t,e){t=f.toArray(t,e);var r=this.p.byteLength();if((4===t[0]||6===t[0]||7===t[0])&&t.length-1===2*r){6===t[0]?h(t[t.length-1]%2===0):7===t[0]&&h(t[t.length-1]%2===1);var n=this.point(t.slice(1,1+r),t.slice(1+r,1+2*r));return n}if((2===t[0]||3===t[0])&&t.length-1===r)return this.pointFromX(t.slice(1,1+r),3===t[0]);throw new Error("Unknown point format")},i.prototype.encodeCompressed=function(t){return this.encode(t,!0)},i.prototype._encode=function(t){var e=this.curve.p.byteLength(),r=this.getX().toArray("be",e);return t?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray("be",e))},i.prototype.encode=function(t,e){return f.encode(this._encode(e),t)},i.prototype.precompute=function(t){if(this.precomputed)return this;var e={doubles:null,naf:null,beta:null};return e.naf=this._getNAFPoints(8),e.doubles=this._getDoubles(4,t),e.beta=this._getBeta(),this.precomputed=e,this},i.prototype._hasDoubles=function(t){if(!this.precomputed)return!1;var e=this.precomputed.doubles;return!!e&&e.points.length>=Math.ceil((t.bitLength()+1)/e.step)},i.prototype._getDoubles=function(t,e){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i<e;i+=t){for(var o=0;o<t;o++)n=n.dbl();r.push(n)}return{step:t,points:r}},i.prototype._getNAFPoints=function(t){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var e=[this],r=(1<<t)-1,n=1===r?null:this.dbl(),i=1;i<r;i++)e[i]=e[i-1].add(n);return{wnd:t,points:e}},i.prototype._getBeta=function(){return null},i.prototype.dblp=function(t){for(var e=this,r=0;r<t;r++)e=e.dbl();return e}},function(t,e,r){"use strict";function n(t){this.twisted=1!==(0|t.a),this.mOneA=this.twisted&&(0|t.a)===-1,this.extended=this.mOneA,u.call(this,"edwards",t),this.a=new f(t.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new f(t.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new f(t.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),h(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|t.c)}function i(t,e,r,n,i){u.BasePoint.call(this,t,"projective"),null===e&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new f(e,16),this.y=new f(r,16),this.z=n?new f(n,16):this.curve.one,this.t=i&&new f(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var o=r(104),a=r(22),f=r(30),s=r(2),u=o.base,h=a.utils.assert;s(n,u),t.exports=n,n.prototype._mulA=function(t){return this.mOneA?t.redNeg():this.a.redMul(t)},n.prototype._mulC=function(t){return this.oneC?t:this.c.redMul(t)},n.prototype.jpoint=function(t,e,r,n){return this.point(t,e,r,n)},n.prototype.pointFromX=function(t,e){t=new f(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),o=n.redMul(i.redInvm()),a=o.redSqrt();if(0!==a.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");var s=a.fromRed().isOdd();return(e&&!s||!e&&s)&&(a=a.redNeg()),this.point(t,a)},n.prototype.pointFromY=function(t,e){t=new f(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr(),n=r.redSub(this.one),i=r.redMul(this.d).redAdd(this.one),o=n.redMul(i.redInvm());if(0===o.cmp(this.zero)){if(e)throw new Error("invalid point");return this.point(this.zero,t)}var a=o.redSqrt();if(0!==a.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");return a.isOdd()!==e&&(a=a.redNeg()),this.point(a,t)},n.prototype.validate=function(t){if(t.isInfinity())return!0;t.normalize();var e=t.x.redSqr(),r=t.y.redSqr(),n=e.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(e).redMul(r)));return 0===n.cmp(i)},s(i,u.BasePoint),n.prototype.pointFromJSON=function(t){return i.fromJSON(this,t)},n.prototype.point=function(t,e,r,n){return new i(this,t,e,r,n)},i.fromJSON=function(t,e){return new i(t,e[0],e[1],e[2])},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},i.prototype._extDbl=function(){var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(t),i=this.x.redAdd(this.y).redSqr().redISub(t).redISub(e),o=n.redAdd(e),a=o.redSub(r),f=n.redSub(e),s=i.redMul(a),u=o.redMul(f),h=i.redMul(f),c=a.redMul(o);return this.curve.point(s,u,c,h)},i.prototype._projDbl=function(){var t,e,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var a=this.curve._mulA(i),f=a.redAdd(o);if(this.zOne)t=n.redSub(i).redSub(o).redMul(f.redSub(this.curve.two)),e=f.redMul(a.redSub(o)),r=f.redSqr().redSub(f).redSub(f);else{var s=this.z.redSqr(),u=f.redSub(s).redISub(s);t=n.redSub(i).redISub(o).redMul(u),e=f.redMul(a.redSub(o)),r=f.redMul(u)}}else{var a=i.redAdd(o),s=this.curve._mulC(this.c.redMul(this.z)).redSqr(),u=a.redSub(s).redSub(s);t=this.curve._mulC(n.redISub(a)).redMul(u),e=this.curve._mulC(a).redMul(i.redISub(o)),r=a.redMul(u)}return this.curve.point(t,e,r)},i.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},i.prototype._extAdd=function(t){var e=this.y.redSub(this.x).redMul(t.y.redSub(t.x)),r=this.y.redAdd(this.x).redMul(t.y.redAdd(t.x)),n=this.t.redMul(this.curve.dd).redMul(t.t),i=this.z.redMul(t.z.redAdd(t.z)),o=r.redSub(e),a=i.redSub(n),f=i.redAdd(n),s=r.redAdd(e),u=o.redMul(a),h=f.redMul(s),c=o.redMul(s),d=a.redMul(f);return this.curve.point(u,h,d,c)},i.prototype._projAdd=function(t){var e,r,n=this.z.redMul(t.z),i=n.redSqr(),o=this.x.redMul(t.x),a=this.y.redMul(t.y),f=this.curve.d.redMul(o).redMul(a),s=i.redSub(f),u=i.redAdd(f),h=this.x.redAdd(this.y).redMul(t.x.redAdd(t.y)).redISub(o).redISub(a),c=n.redMul(s).redMul(h);return this.curve.twisted?(e=n.redMul(u).redMul(a.redSub(this.curve._mulA(o))),r=s.redMul(u)):(e=n.redMul(u).redMul(a.redSub(o)),r=this.curve._mulC(s).redMul(u)),this.curve.point(c,e,r)},i.prototype.add=function(t){return this.isInfinity()?t:t.isInfinity()?this:this.curve.extended?this._extAdd(t):this._projAdd(t)},i.prototype.mul=function(t){return this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve._wnafMul(this,t)},i.prototype.mulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!1)},i.prototype.jmulAdd=function(t,e,r){return this.curve._wnafMulAdd(1,[this,e],[t,r],2,!0)},i.prototype.normalize=function(){if(this.zOne)return this;var t=this.z.redInvm();return this.x=this.x.redMul(t),this.y=this.y.redMul(t),this.t&&(this.t=this.t.redMul(t)),this.z=this.curve.one,this.zOne=!0,this},i.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()},i.prototype.getY=function(){return this.normalize(),this.y.fromRed()},i.prototype.eq=function(t){return this===t||0===this.getX().cmp(t.getX())&&0===this.getY().cmp(t.getY())},i.prototype.eqXToP=function(t){var e=t.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(e))return!0;for(var r=t.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(e.redIAdd(n),0===this.x.cmp(e))return!0}return!1},i.prototype.toP=i.prototype.normalize,i.prototype.mixedAdd=i.prototype.add},function(t,e,r){"use strict";function n(t){s.call(this,"mont",t),this.a=new a(t.a,16).toRed(this.red),this.b=new a(t.b,16).toRed(this.red),this.i4=new a(4).toRed(this.red).redInvm(),this.two=new a(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function i(t,e,r){s.BasePoint.call(this,t,"projective"),null===e&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new a(e,16),this.z=new a(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var o=r(104),a=r(30),f=r(2),s=o.base,u=r(22),h=u.utils;f(n,s),t.exports=n,n.prototype.validate=function(t){var e=t.normalize().x,r=e.redSqr(),n=r.redMul(e).redAdd(r.redMul(this.a)).redAdd(e),i=n.redSqrt();return 0===i.redSqr().cmp(n)},f(i,s.BasePoint),n.prototype.decodePoint=function(t,e){return this.point(h.toArray(t,e),1)},n.prototype.point=function(t,e){return new i(this,t,e)},n.prototype.pointFromJSON=function(t){return i.fromJSON(this,t)},i.prototype.precompute=function(){},i.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},i.fromJSON=function(t,e){return new i(t,e[0],e[1]||t.one)},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},i.prototype.dbl=function(){var t=this.x.redAdd(this.z),e=t.redSqr(),r=this.x.redSub(this.z),n=r.redSqr(),i=e.redSub(n),o=e.redMul(n),a=i.redMul(n.redAdd(this.curve.a24.redMul(i)));return this.curve.point(o,a)},i.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.diffAdd=function(t,e){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=t.x.redAdd(t.z),o=t.x.redSub(t.z),a=o.redMul(r),f=i.redMul(n),s=e.z.redMul(a.redAdd(f).redSqr()),u=e.x.redMul(a.redISub(f).redSqr());return this.curve.point(s,u)},i.prototype.mul=function(t){for(var e=t.clone(),r=this,n=this.curve.point(null,null),i=this,o=[];0!==e.cmpn(0);e.iushrn(1))o.push(e.andln(1));for(var a=o.length-1;a>=0;a--)0===o[a]?(r=r.diffAdd(n,i),n=n.dbl()):(n=r.diffAdd(n,i),r=r.dbl());return n},i.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.eq=function(t){return 0===this.getX().cmp(t.getX())},i.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(t,e,r){"use strict";function n(t){h.call(this,"short",t),this.a=new s(t.a,16).toRed(this.red),this.b=new s(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function i(t,e,r,n){h.BasePoint.call(this,t,"affine"),null===e&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new s(e,16),this.y=new s(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function o(t,e,r,n){h.BasePoint.call(this,t,"jacobian"),null===e&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new s(0)):(this.x=new s(e,16),this.y=new s(r,16),this.z=new s(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var a=r(104),f=r(22),s=r(30),u=r(2),h=a.base,c=f.utils.assert;u(n,h),t.exports=n,n.prototype._getEndomorphism=function(t){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var e,r;if(t.beta)e=new s(t.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);e=n[0].cmp(n[1])<0?n[0]:n[1],e=e.toRed(this.red)}if(t.lambda)r=new s(t.lambda,16);else{var i=this._getEndoRoots(this.n);0===this.g.mul(i[0]).x.cmp(this.g.x.redMul(e))?r=i[0]:(r=i[1],c(0===this.g.mul(r).x.cmp(this.g.x.redMul(e))))}var o;return o=t.basis?t.basis.map(function(t){return{a:new s(t.a,16),b:new s(t.b,16)}}):this._getEndoBasis(r),{beta:e,lambda:r,basis:o}}},n.prototype._getEndoRoots=function(t){var e=t===this.p?this.red:s.mont(t),r=new s(2).toRed(e).redInvm(),n=r.redNeg(),i=new s(3).toRed(e).redNeg().redSqrt().redMul(r),o=n.redAdd(i).fromRed(),a=n.redSub(i).fromRed();return[o,a]},n.prototype._getEndoBasis=function(t){for(var e,r,n,i,o,a,f,u,h,c=this.n.ushrn(Math.floor(this.n.bitLength()/2)),d=t,l=this.n.clone(),p=new s(1),b=new s(0),v=new s(0),y=new s(1),m=0;0!==d.cmpn(0);){var g=l.div(d);u=l.sub(g.mul(d)),h=v.sub(g.mul(p));var w=y.sub(g.mul(b));if(!n&&u.cmp(c)<0)e=f.neg(),r=p,n=u.neg(),i=h;else if(n&&2===++m)break;f=u,l=d,d=u,v=p,p=h,y=b,b=w}o=u.neg(),a=h;var _=n.sqr().add(i.sqr()),M=o.sqr().add(a.sqr());return M.cmp(_)>=0&&(o=e,a=r),n.negative&&(n=n.neg(),i=i.neg()),o.negative&&(o=o.neg(),a=a.neg()),[{a:n,b:i},{a:o,b:a}]},n.prototype._endoSplit=function(t){var e=this.endo.basis,r=e[0],n=e[1],i=n.b.mul(t).divRound(this.n),o=r.b.neg().mul(t).divRound(this.n),a=i.mul(r.a),f=o.mul(n.a),s=i.mul(r.b),u=o.mul(n.b),h=t.sub(a).sub(f),c=s.add(u).neg();return{k1:h,k2:c}},n.prototype.pointFromX=function(t,e){t=new s(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var i=n.fromRed().isOdd();return(e&&!i||!e&&i)&&(n=n.redNeg()),this.point(t,n)},n.prototype.validate=function(t){if(t.inf)return!0;var e=t.x,r=t.y,n=this.a.redMul(e),i=e.redSqr().redMul(e).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},n.prototype._endoWnafMulAdd=function(t,e,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o<t.length;o++){var a=this._endoSplit(e[o]),f=t[o],s=f._getBeta();a.k1.negative&&(a.k1.ineg(),f=f.neg(!0)),a.k2.negative&&(a.k2.ineg(),s=s.neg(!0)),n[2*o]=f,n[2*o+1]=s,i[2*o]=a.k1,i[2*o+1]=a.k2}for(var u=this._wnafMulAdd(1,n,i,2*o,r),h=0;h<2*o;h++)n[h]=null,i[h]=null;return u},u(i,h.BasePoint),n.prototype.point=function(t,e,r){return new i(this,t,e,r)},n.prototype.pointFromJSON=function(t,e){return i.fromJSON(this,t,e)},i.prototype._getBeta=function(){if(this.curve.endo){var t=this.precomputed;if(t&&t.beta)return t.beta;var e=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(t){var r=this.curve,n=function(t){return r.point(t.x.redMul(r.endo.beta),t.y)};t.beta=e,e.precomputed={beta:null,naf:t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(n)},doubles:t.doubles&&{step:t.doubles.step,points:t.doubles.points.map(n)}}}return e}},i.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},i.fromJSON=function(t,e,r){function n(e){return t.point(e[0],e[1],r)}"string"==typeof e&&(e=JSON.parse(e));var i=t.point(e[0],e[1],r);if(!e[2])return i;var o=e[2];return i.precomputed={beta:null,doubles:o.doubles&&{step:o.doubles.step,points:[i].concat(o.doubles.points.map(n))},naf:o.naf&&{wnd:o.naf.wnd,points:[i].concat(o.naf.points.map(n))}},i},i.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},i.prototype.isInfinity=function(){return this.inf},i.prototype.add=function(t){if(this.inf)return t;if(t.inf)return this;if(this.eq(t))return this.dbl();if(this.neg().eq(t))return this.curve.point(null,null);if(0===this.x.cmp(t.x))return this.curve.point(null,null);var e=this.y.redSub(t.y);0!==e.cmpn(0)&&(e=e.redMul(this.x.redSub(t.x).redInvm()));var r=e.redSqr().redISub(this.x).redISub(t.x),n=e.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},i.prototype.dbl=function(){if(this.inf)return this;var t=this.y.redAdd(this.y);if(0===t.cmpn(0))return this.curve.point(null,null);var e=this.curve.a,r=this.x.redSqr(),n=t.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(e).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,a)},i.prototype.getX=function(){return this.x.fromRed()},i.prototype.getY=function(){return this.y.fromRed()},i.prototype.mul=function(t){return t=new s(t,16),this._hasDoubles(t)?this.curve._fixedNafMul(this,t):this.curve.endo?this.curve._endoWnafMulAdd([this],[t]):this.curve._wnafMul(this,t)},i.prototype.mulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},i.prototype.jmulAdd=function(t,e,r){var n=[this,e],i=[t,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},i.prototype.eq=function(t){return this===t||this.inf===t.inf&&(this.inf||0===this.x.cmp(t.x)&&0===this.y.cmp(t.y))},i.prototype.neg=function(t){if(this.inf)return this;var e=this.curve.point(this.x,this.y.redNeg());if(t&&this.precomputed){var r=this.precomputed,n=function(t){return t.neg()};e.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return e},i.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var t=this.curve.jpoint(this.x,this.y,this.curve.one);return t},
|
||
u(o,h.BasePoint),n.prototype.jpoint=function(t,e,r){return new o(this,t,e,r)},o.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var t=this.z.redInvm(),e=t.redSqr(),r=this.x.redMul(e),n=this.y.redMul(e).redMul(t);return this.curve.point(r,n)},o.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},o.prototype.add=function(t){if(this.isInfinity())return t;if(t.isInfinity())return this;var e=t.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(e),i=t.x.redMul(r),o=this.y.redMul(e.redMul(t.z)),a=t.y.redMul(r.redMul(this.z)),f=n.redSub(i),s=o.redSub(a);if(0===f.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=f.redSqr(),h=u.redMul(f),c=n.redMul(u),d=s.redSqr().redIAdd(h).redISub(c).redISub(c),l=s.redMul(c.redISub(d)).redISub(o.redMul(h)),p=this.z.redMul(t.z).redMul(f);return this.curve.jpoint(d,l,p)},o.prototype.mixedAdd=function(t){if(this.isInfinity())return t.toJ();if(t.isInfinity())return this;var e=this.z.redSqr(),r=this.x,n=t.x.redMul(e),i=this.y,o=t.y.redMul(e).redMul(this.z),a=r.redSub(n),f=i.redSub(o);if(0===a.cmpn(0))return 0!==f.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var s=a.redSqr(),u=s.redMul(a),h=r.redMul(s),c=f.redSqr().redIAdd(u).redISub(h).redISub(h),d=f.redMul(h.redISub(c)).redISub(i.redMul(u)),l=this.z.redMul(a);return this.curve.jpoint(c,d,l)},o.prototype.dblp=function(t){if(0===t)return this;if(this.isInfinity())return this;if(!t)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var e=this,r=0;r<t;r++)e=e.dbl();return e}for(var n=this.curve.a,i=this.curve.tinv,o=this.x,a=this.y,f=this.z,s=f.redSqr().redSqr(),u=a.redAdd(a),r=0;r<t;r++){var h=o.redSqr(),c=u.redSqr(),d=c.redSqr(),l=h.redAdd(h).redIAdd(h).redIAdd(n.redMul(s)),p=o.redMul(c),b=l.redSqr().redISub(p.redAdd(p)),v=p.redISub(b),y=l.redMul(v);y=y.redIAdd(y).redISub(d);var m=u.redMul(f);r+1<t&&(s=s.redMul(d)),o=b,f=m,u=y}return this.curve.jpoint(o,u.redMul(i),f)},o.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},o.prototype._zeroDbl=function(){var t,e,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),a=this.x.redAdd(i).redSqr().redISub(n).redISub(o);a=a.redIAdd(a);var f=n.redAdd(n).redIAdd(n),s=f.redSqr().redISub(a).redISub(a),u=o.redIAdd(o);u=u.redIAdd(u),u=u.redIAdd(u),t=s,e=f.redMul(a.redISub(s)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.x.redSqr(),c=this.y.redSqr(),d=c.redSqr(),l=this.x.redAdd(c).redSqr().redISub(h).redISub(d);l=l.redIAdd(l);var p=h.redAdd(h).redIAdd(h),b=p.redSqr(),v=d.redIAdd(d);v=v.redIAdd(v),v=v.redIAdd(v),t=b.redISub(l).redISub(l),e=p.redMul(l.redISub(t)).redISub(v),r=this.y.redMul(this.z),r=r.redIAdd(r)}return this.curve.jpoint(t,e,r)},o.prototype._threeDbl=function(){var t,e,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),a=this.x.redAdd(i).redSqr().redISub(n).redISub(o);a=a.redIAdd(a);var f=n.redAdd(n).redIAdd(n).redIAdd(this.curve.a),s=f.redSqr().redISub(a).redISub(a);t=s;var u=o.redIAdd(o);u=u.redIAdd(u),u=u.redIAdd(u),e=f.redMul(a.redISub(s)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.z.redSqr(),c=this.y.redSqr(),d=this.x.redMul(c),l=this.x.redSub(h).redMul(this.x.redAdd(h));l=l.redAdd(l).redIAdd(l);var p=d.redIAdd(d);p=p.redIAdd(p);var b=p.redAdd(p);t=l.redSqr().redISub(b),r=this.y.redAdd(this.z).redSqr().redISub(c).redISub(h);var v=c.redSqr();v=v.redIAdd(v),v=v.redIAdd(v),v=v.redIAdd(v),e=l.redMul(p.redISub(t)).redISub(v)}return this.curve.jpoint(t,e,r)},o.prototype._dbl=function(){var t=this.curve.a,e=this.x,r=this.y,n=this.z,i=n.redSqr().redSqr(),o=e.redSqr(),a=r.redSqr(),f=o.redAdd(o).redIAdd(o).redIAdd(t.redMul(i)),s=e.redAdd(e);s=s.redIAdd(s);var u=s.redMul(a),h=f.redSqr().redISub(u.redAdd(u)),c=u.redISub(h),d=a.redSqr();d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=f.redMul(c).redISub(d),p=r.redAdd(r).redMul(n);return this.curve.jpoint(h,l,p)},o.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var t=this.x.redSqr(),e=this.y.redSqr(),r=this.z.redSqr(),n=e.redSqr(),i=t.redAdd(t).redIAdd(t),o=i.redSqr(),a=this.x.redAdd(e).redSqr().redISub(t).redISub(n);a=a.redIAdd(a),a=a.redAdd(a).redIAdd(a),a=a.redISub(o);var f=a.redSqr(),s=n.redIAdd(n);s=s.redIAdd(s),s=s.redIAdd(s),s=s.redIAdd(s);var u=i.redIAdd(a).redSqr().redISub(o).redISub(f).redISub(s),h=e.redMul(u);h=h.redIAdd(h),h=h.redIAdd(h);var c=this.x.redMul(f).redISub(h);c=c.redIAdd(c),c=c.redIAdd(c);var d=this.y.redMul(u.redMul(s.redISub(u)).redISub(a.redMul(f)));d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=this.z.redAdd(a).redSqr().redISub(r).redISub(f);return this.curve.jpoint(c,d,l)},o.prototype.mul=function(t,e){return t=new s(t,e),this.curve._wnafMul(this,t)},o.prototype.eq=function(t){if("affine"===t.type)return this.eq(t.toJ());if(this===t)return!0;var e=this.z.redSqr(),r=t.z.redSqr();if(0!==this.x.redMul(r).redISub(t.x.redMul(e)).cmpn(0))return!1;var n=e.redMul(this.z),i=r.redMul(t.z);return 0===this.y.redMul(i).redISub(t.y.redMul(n)).cmpn(0)},o.prototype.eqXToP=function(t){var e=this.z.redSqr(),r=t.toRed(this.curve.red).redMul(e);if(0===this.x.cmp(r))return!0;for(var n=t.clone(),i=this.curve.redN.redMul(e);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}return!1},o.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},o.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(t,e,r){"use strict";function n(t){"short"===t.type?this.curve=new f.curve.short(t):"edwards"===t.type?this.curve=new f.curve.edwards(t):this.curve=new f.curve.mont(t),this.g=this.curve.g,this.n=this.curve.n,this.hash=t.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function i(t,e){Object.defineProperty(o,t,{configurable:!0,enumerable:!0,get:function(){var r=new n(e);return Object.defineProperty(o,t,{configurable:!0,enumerable:!0,value:r}),r}})}var o=e,a=r(50),f=r(22),s=f.utils.assert;o.PresetCurve=n,i("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:a.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),i("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:a.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),i("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:a.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),i("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:a.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),i("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:a.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),i("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"0",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["9"]}),i("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var u;try{u=r(557)}catch(t){u=void 0}i("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:a.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",u]})},function(t,e,r){"use strict";function n(t){return this instanceof n?("string"==typeof t&&(f(o.curves.hasOwnProperty(t),"Unknown curve "+t),t=o.curves[t]),t instanceof o.curves.PresetCurve&&(t={curve:t}),this.curve=t.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=t.curve.g,this.g.precompute(t.curve.n.bitLength()+1),void(this.hash=t.hash||t.curve.hash)):new n(t)}var i=r(30),o=r(22),a=o.utils,f=a.assert,s=r(551),u=r(552);t.exports=n,n.prototype.keyPair=function(t){return new s(this,t)},n.prototype.keyFromPrivate=function(t,e){return s.fromPrivate(this,t,e)},n.prototype.keyFromPublic=function(t,e){return s.fromPublic(this,t,e)},n.prototype.genKeyPair=function(t){t||(t={});for(var e=new o.hmacDRBG({hash:this.hash,pers:t.pers,entropy:t.entropy||o.rand(this.hash.hmacStrength),nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var a=new i(e.generate(r));if(!(a.cmp(n)>0))return a.iaddn(1),this.keyFromPrivate(a)}},n.prototype._truncateToN=function(t,e){var r=8*t.byteLength()-this.n.bitLength();return r>0&&(t=t.ushrn(r)),!e&&t.cmp(this.n)>=0?t.sub(this.n):t},n.prototype.sign=function(t,e,r,n){"object"==typeof r&&(n=r,r=null),n||(n={}),e=this.keyFromPrivate(e,r),t=this._truncateToN(new i(t,16));for(var a=this.n.byteLength(),f=e.getPrivate().toArray("be",a),s=t.toArray("be",a),h=new o.hmacDRBG({hash:this.hash,entropy:f,nonce:s,pers:n.pers,persEnc:n.persEnc}),c=this.n.sub(new i(1)),d=0;!0;d++){var l=n.k?n.k(d):new i(h.generate(this.n.byteLength()));if(l=this._truncateToN(l,!0),!(l.cmpn(1)<=0||l.cmp(c)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var b=p.getX(),v=b.umod(this.n);if(0!==v.cmpn(0)){var y=l.invm(this.n).mul(v.mul(e.getPrivate()).iadd(t));if(y=y.umod(this.n),0!==y.cmpn(0)){var m=(p.getY().isOdd()?1:0)|(0!==b.cmp(v)?2:0);return n.canonical&&y.cmp(this.nh)>0&&(y=this.n.sub(y),m^=1),new u({r:v,s:y,recoveryParam:m})}}}}}},n.prototype.verify=function(t,e,r,n){t=this._truncateToN(new i(t,16)),r=this.keyFromPublic(r,n),e=new u(e,"hex");var o=e.r,a=e.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var f=a.invm(this.n),s=f.mul(t).umod(this.n),h=f.mul(o).umod(this.n);if(!this.curve._maxwellTrick){var c=this.g.mulAdd(s,r.getPublic(),h);return!c.isInfinity()&&0===c.getX().umod(this.n).cmp(o)}var c=this.g.jmulAdd(s,r.getPublic(),h);return!c.isInfinity()&&c.eqXToP(o)},n.prototype.recoverPubKey=function(t,e,r,n){f((3&r)===r,"The recovery param is more than two bits"),e=new u(e,n);var o=this.n,a=new i(t),s=e.r,h=e.s,c=1&r,d=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");s=d?this.curve.pointFromX(s.add(this.curve.n),c):this.curve.pointFromX(s,c);var l=e.r.invm(o),p=o.sub(a).mul(l).umod(o),b=h.mul(l).umod(o);return this.g.mulAdd(p,s,b)},n.prototype.getKeyRecoveryParam=function(t,e,r,n){if(e=new u(e,n),null!==e.recoveryParam)return e.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(t,e,i)}catch(t){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},function(t,e,r){"use strict";function n(t,e){this.ec=t,this.priv=null,this.pub=null,e.priv&&this._importPrivate(e.priv,e.privEnc),e.pub&&this._importPublic(e.pub,e.pubEnc)}var i=r(30);t.exports=n,n.fromPublic=function(t,e,r){return e instanceof n?e:new n(t,{pub:e,pubEnc:r})},n.fromPrivate=function(t,e,r){return e instanceof n?e:new n(t,{priv:e,privEnc:r})},n.prototype.validate=function(){var t=this.getPublic();return t.isInfinity()?{result:!1,reason:"Invalid public key"}:t.validate()?t.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},n.prototype.getPublic=function(t,e){return"string"==typeof t&&(e=t,t=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),e?this.pub.encode(e,t):this.pub},n.prototype.getPrivate=function(t){return"hex"===t?this.priv.toString(16,2):this.priv},n.prototype._importPrivate=function(t,e){this.priv=new i(t,e||16),this.priv=this.priv.umod(this.ec.curve.n)},n.prototype._importPublic=function(t,e){return t.x||t.y?void(this.pub=this.ec.curve.point(t.x,t.y)):void(this.pub=this.ec.curve.decodePoint(t,e))},n.prototype.derive=function(t){return t.mul(this.priv).getX()},n.prototype.sign=function(t,e,r){return this.ec.sign(t,this,e,r)},n.prototype.verify=function(t,e){return this.ec.verify(t,e,this)},n.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}},function(t,e,r){"use strict";function n(t,e){return t instanceof n?t:void(this._importDER(t,e)||(c(t.r&&t.s,"Signature without r or s"),this.r=new s(t.r,16),this.s=new s(t.s,16),void 0===t.recoveryParam?this.recoveryParam=null:this.recoveryParam=t.recoveryParam))}function i(){this.place=0}function o(t,e){var r=t[e.place++];if(!(128&r))return r;for(var n=15&r,i=0,o=0,a=e.place;o<n;o++,a++)i<<=8,i|=t[a];return e.place=a,i}function a(t){for(var e=0,r=t.length-1;!t[e]&&!(128&t[e+1])&&e<r;)e++;return 0===e?t:t.slice(e)}function f(t,e){if(e<128)return void t.push(e);var r=1+(Math.log(e)/Math.LN2>>>3);for(t.push(128|r);--r;)t.push(e>>>(r<<3)&255);t.push(e)}var s=r(30),u=r(22),h=u.utils,c=h.assert;t.exports=n,n.prototype._importDER=function(t,e){t=h.toArray(t,e);var r=new i;if(48!==t[r.place++])return!1;var n=o(t,r);if(n+r.place!==t.length)return!1;if(2!==t[r.place++])return!1;var a=o(t,r),f=t.slice(r.place,a+r.place);if(r.place+=a,2!==t[r.place++])return!1;var u=o(t,r);if(t.length!==u+r.place)return!1;var c=t.slice(r.place,u+r.place);return 0===f[0]&&128&f[1]&&(f=f.slice(1)),0===c[0]&&128&c[1]&&(c=c.slice(1)),this.r=new s(f),this.s=new s(c),this.recoveryParam=null,!0},n.prototype.toDER=function(t){var e=this.r.toArray(),r=this.s.toArray();for(128&e[0]&&(e=[0].concat(e)),128&r[0]&&(r=[0].concat(r)),e=a(e),r=a(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];f(n,e.length),n=n.concat(e),n.push(2),f(n,r.length);var i=n.concat(r),o=[48];return f(o,i.length),o=o.concat(i),h.encode(o,t)}},function(t,e,r){"use strict";function n(t){if(f("ed25519"===t,"only tested with ed25519 so far"),!(this instanceof n))return new n(t);var t=o.curves[t].curve;this.curve=t,this.g=t.g,this.g.precompute(t.n.bitLength()+1),this.pointClass=t.point().constructor,this.encodingLength=Math.ceil(t.n.bitLength()/8),this.hash=i.sha512}var i=r(50),o=r(22),a=o.utils,f=a.assert,s=a.parseBytes,u=r(554),h=r(555);t.exports=n,n.prototype.sign=function(t,e){t=s(t);var r=this.keyFromSecret(e),n=this.hashInt(r.messagePrefix(),t),i=this.g.mul(n),o=this.encodePoint(i),a=this.hashInt(o,r.pubBytes(),t).mul(r.priv()),f=n.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:f,Rencoded:o})},n.prototype.verify=function(t,e,r){t=s(t),e=this.makeSignature(e);var n=this.keyFromPublic(r),i=this.hashInt(e.Rencoded(),n.pubBytes(),t),o=this.g.mul(e.S()),a=e.R().add(n.pub().mul(i));return a.eq(o)},n.prototype.hashInt=function(){for(var t=this.hash(),e=0;e<arguments.length;e++)t.update(arguments[e]);return a.intFromLE(t.digest()).umod(this.curve.n)},n.prototype.keyFromPublic=function(t){return u.fromPublic(this,t)},n.prototype.keyFromSecret=function(t){return u.fromSecret(this,t)},n.prototype.makeSignature=function(t){return t instanceof h?t:new h(this,t)},n.prototype.encodePoint=function(t){var e=t.getY().toArray("le",this.encodingLength);return e[this.encodingLength-1]|=t.getX().isOdd()?128:0,e},n.prototype.decodePoint=function(t){t=a.parseBytes(t);var e=t.length-1,r=t.slice(0,e).concat(t[e]&-129),n=0!==(128&t[e]),i=a.intFromLE(r);return this.curve.pointFromY(i,n)},n.prototype.encodeInt=function(t){return t.toArray("le",this.encodingLength)},n.prototype.decodeInt=function(t){return a.intFromLE(t)},n.prototype.isPoint=function(t){return t instanceof this.pointClass}},function(t,e,r){"use strict";function n(t,e){this.eddsa=t,this._secret=f(e.secret),t.isPoint(e.pub)?this._pub=e.pub:this._pubBytes=f(e.pub)}var i=r(22),o=i.utils,a=o.assert,f=o.parseBytes,s=o.cachedProperty;n.fromPublic=function(t,e){return e instanceof n?e:new n(t,{pub:e})},n.fromSecret=function(t,e){return e instanceof n?e:new n(t,{secret:e})},n.prototype.secret=function(){return this._secret},s(n,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),s(n,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),s(n,"privBytes",function(){var t=this.eddsa,e=this.hash(),r=t.encodingLength-1,n=e.slice(0,t.encodingLength);return n[0]&=248,n[r]&=127,n[r]|=64,n}),s(n,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),s(n,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),s(n,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),n.prototype.sign=function(t){return a(this._secret,"KeyPair can only verify"),this.eddsa.sign(t,this)},n.prototype.verify=function(t,e){return this.eddsa.verify(t,e,this)},n.prototype.getSecret=function(t){return a(this._secret,"KeyPair is public only"),o.encode(this.secret(),t)},n.prototype.getPublic=function(t){return o.encode(this.pubBytes(),t)},t.exports=n},function(t,e,r){"use strict";function n(t,e){this.eddsa=t,"object"!=typeof e&&(e=u(e)),Array.isArray(e)&&(e={R:e.slice(0,t.encodingLength),S:e.slice(t.encodingLength)}),f(e.R&&e.S,"Signature without R or S"),t.isPoint(e.R)&&(this._R=e.R),e.S instanceof i&&(this._S=e.S),this._Rencoded=Array.isArray(e.R)?e.R:e.Rencoded,this._Sencoded=Array.isArray(e.S)?e.S:e.Sencoded}var i=r(30),o=r(22),a=o.utils,f=a.assert,s=a.cachedProperty,u=a.parseBytes;s(n,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),s(n,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),s(n,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),s(n,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),n.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},n.prototype.toHex=function(){return a.encode(this.toBytes(),"hex").toUpperCase()},t.exports=n},function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this.reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var e=a.toArray(t.entropy,t.entropyEnc),r=a.toArray(t.nonce,t.nonceEnc),i=a.toArray(t.pers,t.persEnc);f(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(e,r,i)}var i=r(50),o=r(22),a=o.utils,f=a.assert;t.exports=n,n.prototype._init=function(t,e,r){var n=t.concat(e).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i<this.V.length;i++)this.K[i]=0,this.V[i]=1;this._update(n),this.reseed=1,this.reseedInterval=281474976710656},n.prototype._hmac=function(){return new i.hmac(this.hash,this.K)},n.prototype._update=function(t){var e=this._hmac().update(this.V).update([0]);t&&(e=e.update(t)),this.K=e.digest(),this.V=this._hmac().update(this.V).digest(),t&&(this.K=this._hmac().update(this.V).update([1]).update(t).digest(),this.V=this._hmac().update(this.V).digest())},n.prototype.reseed=function(t,e,r,n){"string"!=typeof e&&(n=r,r=e,e=null),t=a.toBuffer(t,e),r=a.toBuffer(r,n),f(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(t.concat(r||[])),this.reseed=1},n.prototype.generate=function(t,e,r,n){if(this.reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof e&&(n=r,r=e,e=null),r&&(r=a.toArray(r,n),this._update(r));for(var i=[];i.length<t;)this.V=this._hmac().update(this.V).digest(),i=i.concat(this.V);var o=i.slice(0,t);return this._update(r),this.reseed++,a.encode(o,e)}},function(t,e){t.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]
|
||
}}},function(t,e,r){"use strict";function n(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"!=typeof t){for(var n=0;n<t.length;n++)r[n]=0|t[n];return r}if(e){if("hex"===e){t=t.replace(/[^a-z0-9]+/gi,""),t.length%2!==0&&(t="0"+t);for(var n=0;n<t.length;n+=2)r.push(parseInt(t[n]+t[n+1],16))}}else for(var n=0;n<t.length;n++){var i=t.charCodeAt(n),o=i>>8,a=255&i;o?r.push(o,a):r.push(a)}return r}function i(t){return 1===t.length?"0"+t:t}function o(t){for(var e="",r=0;r<t.length;r++)e+=i(t[r].toString(16));return e}function a(t,e){for(var r=[],n=1<<e+1,i=t.clone();i.cmpn(1)>=0;){var o;if(i.isOdd()){var a=i.andln(n-1);o=a>(n>>1)-1?(n>>1)-a:a,i.isubn(o)}else o=0;r.push(o);for(var f=0!==i.cmpn(0)&&0===i.andln(n-1)?e+1:1,s=1;s<f;s++)r.push(0);i.iushrn(f)}return r}function f(t,e){var r=[[],[]];t=t.clone(),e=e.clone();for(var n=0,i=0;t.cmpn(-n)>0||e.cmpn(-i)>0;){var o=t.andln(3)+n&3,a=e.andln(3)+i&3;3===o&&(o=-1),3===a&&(a=-1);var f;if(0===(1&o))f=0;else{var s=t.andln(7)+n&7;f=3!==s&&5!==s||2!==a?o:-o}r[0].push(f);var u;if(0===(1&a))u=0;else{var s=e.andln(7)+i&7;u=3!==s&&5!==s||2!==o?a:-a}r[1].push(u),2*n===f+1&&(n=1-n),2*i===u+1&&(i=1-i),t.iushrn(1),e.iushrn(1)}return r}function s(t,e,r){var n="_"+e;t.prototype[e]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}}function u(t){return"string"==typeof t?c.toArray(t,"hex"):t}function h(t){return new d(t,"hex","le")}var c=e,d=r(30);c.assert=function(t,e){if(!t)throw new Error(e||"Assertion failed")},c.toArray=n,c.zero2=i,c.toHex=o,c.encode=function(t,e){return"hex"===e?o(t):t},c.getNAF=a,c.getJSF=f,c.cachedProperty=s,c.parseBytes=u,c.intFromLE=h},function(t,e,r){function n(t){this.rand=t}var i;if(t.exports=function(t){return i||(i=new n(null)),i.generate(t)},t.exports.Rand=n,n.prototype.generate=function(t){return this._rand(t)},"object"==typeof window)window.crypto&&window.crypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.crypto.getRandomValues(e),e}:window.msCrypto&&window.msCrypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.msCrypto.getRandomValues(e),e}:n.prototype._rand=function(){throw new Error("Not implemented yet")};else try{var o=r(610);n.prototype._rand=function(t){return o.randomBytes(t)}}catch(t){n.prototype._rand=function(t){for(var e=new Uint8Array(t),r=0;r<e.length;r++)e[r]=this.rand.getByte();return e}}},function(t,e,r){function n(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}var i=r(50),o=i.utils,a=o.assert;e.BlockHash=n,n.prototype.update=function(t,e){if(t=o.toArray(t,e),this.pending?this.pending=this.pending.concat(t):this.pending=t,this.pendingTotal+=t.length,this.pending.length>=this._delta8){t=this.pending;var r=t.length%this._delta8;this.pending=t.slice(t.length-r,t.length),0===this.pending.length&&(this.pending=null),t=o.join32(t,0,t.length-r,this.endian);for(var n=0;n<t.length;n+=this._delta32)this._update(t,n,n+this._delta32)}return this},n.prototype.digest=function(t){return this.update(this._pad()),a(null===this.pending),this._digest(t)},n.prototype._pad=function(){var t=this.pendingTotal,e=this._delta8,r=e-(t+this.padLength)%e,n=new Array(r+this.padLength);n[0]=128;for(var i=1;i<r;i++)n[i]=0;if(t<<=3,"big"===this.endian){for(var o=8;o<this.padLength;o++)n[i++]=0;n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=t>>>24&255,n[i++]=t>>>16&255,n[i++]=t>>>8&255,n[i++]=255&t}else{n[i++]=255&t,n[i++]=t>>>8&255,n[i++]=t>>>16&255,n[i++]=t>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0;for(var o=8;o<this.padLength;o++)n[i++]=0}return n}},function(t,e,r){function n(t,e,r){return this instanceof n?(this.Hash=t,this.blockSize=t.blockSize/8,this.outSize=t.outSize/8,this.inner=null,this.outer=null,void this._init(o.toArray(e,r))):new n(t,e,r)}var i=r(50),o=i.utils,a=o.assert;t.exports=n,n.prototype._init=function(t){t.length>this.blockSize&&(t=(new this.Hash).update(t).digest()),a(t.length<=this.blockSize);for(var e=t.length;e<this.blockSize;e++)t.push(0);for(var e=0;e<t.length;e++)t[e]^=54;this.inner=(new this.Hash).update(t);for(var e=0;e<t.length;e++)t[e]^=106;this.outer=(new this.Hash).update(t)},n.prototype.update=function(t,e){return this.inner.update(t,e),this},n.prototype.digest=function(t){return this.outer.update(this.inner.digest()),this.outer.digest(t)}},function(t,e,r){function n(){return this instanceof n?(l.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.endian="little")):new n}function i(t,e,r,n){return t<=15?e^r^n:t<=31?e&r|~e&n:t<=47?(e|~r)^n:t<=63?e&n|r&~n:e^(r|~n)}function o(t){return t<=15?0:t<=31?1518500249:t<=47?1859775393:t<=63?2400959708:2840853838}function a(t){return t<=15?1352829926:t<=31?1548603684:t<=47?1836072691:t<=63?2053994217:0}var f=r(50),s=f.utils,u=s.rotl32,h=s.sum32,c=s.sum32_3,d=s.sum32_4,l=f.common.BlockHash;s.inherits(n,l),e.ripemd160=n,n.blockSize=512,n.outSize=160,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(t,e){for(var r=this.h[0],n=this.h[1],f=this.h[2],s=this.h[3],l=this.h[4],m=r,g=n,w=f,_=s,M=l,S=0;S<80;S++){var E=h(u(d(r,i(S,n,f,s),t[p[S]+e],o(S)),v[S]),l);r=l,l=s,s=u(f,10),f=n,n=E,E=h(u(d(m,i(79-S,g,w,_),t[b[S]+e],a(S)),y[S]),M),m=M,M=_,_=u(w,10),w=g,g=E}E=c(this.h[1],f,_),this.h[1]=c(this.h[2],s,M),this.h[2]=c(this.h[3],l,m),this.h[3]=c(this.h[4],r,g),this.h[4]=c(this.h[0],n,w),this.h[0]=E},n.prototype._digest=function(t){return"hex"===t?s.toHex32(this.h,"little"):s.split32(this.h,"little")};var p=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],b=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],v=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],y=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},function(t,e,r){function n(){return this instanceof n?(X.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=Y,void(this.W=new Array(64))):new n}function i(){return this instanceof i?(n.call(this),void(this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])):new i}function o(){return this instanceof o?(X.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=W,void(this.W=new Array(160))):new o}function a(){return this instanceof a?(o.call(this),void(this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428])):new a}function f(){return this instanceof f?(X.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.W=new Array(80))):new f}function s(t,e,r){return t&e^~t&r}function u(t,e,r){return t&e^t&r^e&r}function h(t,e,r){return t^e^r}function c(t){return R(t,2)^R(t,13)^R(t,22)}function d(t){return R(t,6)^R(t,11)^R(t,25)}function l(t){return R(t,7)^R(t,18)^t>>>3}function p(t){return R(t,17)^R(t,19)^t>>>10}function b(t,e,r,n){return 0===t?s(e,r,n):1===t||3===t?h(e,r,n):2===t?u(e,r,n):void 0}function v(t,e,r,n,i,o){var a=t&r^~t&i;return a<0&&(a+=4294967296),a}function y(t,e,r,n,i,o){var a=e&n^~e&o;return a<0&&(a+=4294967296),a}function m(t,e,r,n,i,o){var a=t&r^t&i^r&i;return a<0&&(a+=4294967296),a}function g(t,e,r,n,i,o){var a=e&n^e&o^n&o;return a<0&&(a+=4294967296),a}function w(t,e){var r=N(t,e,28),n=N(e,t,2),i=N(e,t,7),o=r^n^i;return o<0&&(o+=4294967296),o}function _(t,e){var r=L(t,e,28),n=L(e,t,2),i=L(e,t,7),o=r^n^i;return o<0&&(o+=4294967296),o}function M(t,e){var r=N(t,e,14),n=N(t,e,18),i=N(e,t,9),o=r^n^i;return o<0&&(o+=4294967296),o}function S(t,e){var r=L(t,e,14),n=L(t,e,18),i=L(e,t,9),o=r^n^i;return o<0&&(o+=4294967296),o}function E(t,e){var r=N(t,e,1),n=N(t,e,8),i=U(t,e,7),o=r^n^i;return o<0&&(o+=4294967296),o}function A(t,e){var r=L(t,e,1),n=L(t,e,8),i=z(t,e,7),o=r^n^i;return o<0&&(o+=4294967296),o}function k(t,e){var r=N(t,e,19),n=N(e,t,29),i=U(t,e,6),o=r^n^i;return o<0&&(o+=4294967296),o}function x(t,e){var r=L(t,e,19),n=L(e,t,29),i=z(t,e,6),o=r^n^i;return o<0&&(o+=4294967296),o}var I=r(50),B=I.utils,O=B.assert,R=B.rotr32,P=B.rotl32,T=B.sum32,j=B.sum32_4,C=B.sum32_5,N=B.rotr64_hi,L=B.rotr64_lo,U=B.shr64_hi,z=B.shr64_lo,D=B.sum64,q=B.sum64_hi,F=B.sum64_lo,K=B.sum64_4_hi,G=B.sum64_4_lo,V=B.sum64_5_hi,H=B.sum64_5_lo,X=I.common.BlockHash,Y=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],W=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],Z=[1518500249,1859775393,2400959708,3395469782];B.inherits(n,X),e.sha256=n,n.blockSize=512,n.outSize=256,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n<r.length;n++)r[n]=j(p(r[n-2]),r[n-7],l(r[n-15]),r[n-16]);var i=this.h[0],o=this.h[1],a=this.h[2],f=this.h[3],h=this.h[4],b=this.h[5],v=this.h[6],y=this.h[7];O(this.k.length===r.length);for(var n=0;n<r.length;n++){var m=C(y,d(h),s(h,b,v),this.k[n],r[n]),g=T(c(i),u(i,o,a));y=v,v=b,b=h,h=T(f,m),f=a,a=o,o=i,i=T(m,g)}this.h[0]=T(this.h[0],i),this.h[1]=T(this.h[1],o),this.h[2]=T(this.h[2],a),this.h[3]=T(this.h[3],f),this.h[4]=T(this.h[4],h),this.h[5]=T(this.h[5],b),this.h[6]=T(this.h[6],v),this.h[7]=T(this.h[7],y)},n.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")},B.inherits(i,n),e.sha224=i,i.blockSize=512,i.outSize=224,i.hmacStrength=192,i.padLength=64,i.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h.slice(0,7),"big"):B.split32(this.h.slice(0,7),"big")},B.inherits(o,X),e.sha512=o,o.blockSize=1024,o.outSize=512,o.hmacStrength=192,o.padLength=128,o.prototype._prepareBlock=function(t,e){for(var r=this.W,n=0;n<32;n++)r[n]=t[e+n];for(;n<r.length;n+=2){var i=k(r[n-4],r[n-3]),o=x(r[n-4],r[n-3]),a=r[n-14],f=r[n-13],s=E(r[n-30],r[n-29]),u=A(r[n-30],r[n-29]),h=r[n-32],c=r[n-31];r[n]=K(i,o,a,f,s,u,h,c),r[n+1]=G(i,o,a,f,s,u,h,c)}},o.prototype._update=function(t,e){this._prepareBlock(t,e);var r=this.W,n=this.h[0],i=this.h[1],o=this.h[2],a=this.h[3],f=this.h[4],s=this.h[5],u=this.h[6],h=this.h[7],c=this.h[8],d=this.h[9],l=this.h[10],p=this.h[11],b=this.h[12],E=this.h[13],A=this.h[14],k=this.h[15];O(this.k.length===r.length);for(var x=0;x<r.length;x+=2){var I=A,B=k,R=M(c,d),P=S(c,d),T=v(c,d,l,p,b,E),j=y(c,d,l,p,b,E),C=this.k[x],N=this.k[x+1],L=r[x],U=r[x+1],z=V(I,B,R,P,T,j,C,N,L,U),K=H(I,B,R,P,T,j,C,N,L,U),I=w(n,i),B=_(n,i),R=m(n,i,o,a,f,s),P=g(n,i,o,a,f,s),G=q(I,B,R,P),X=F(I,B,R,P);A=b,k=E,b=l,E=p,l=c,p=d,c=q(u,h,z,K),d=F(h,h,z,K),u=f,h=s,f=o,s=a,o=n,a=i,n=q(z,K,G,X),i=F(z,K,G,X)}D(this.h,0,n,i),D(this.h,2,o,a),D(this.h,4,f,s),D(this.h,6,u,h),D(this.h,8,c,d),D(this.h,10,l,p),D(this.h,12,b,E),D(this.h,14,A,k)},o.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")},B.inherits(a,o),e.sha384=a,a.blockSize=1024,a.outSize=384,a.hmacStrength=192,a.padLength=128,a.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h.slice(0,12),"big"):B.split32(this.h.slice(0,12),"big")},B.inherits(f,X),e.sha1=f,f.blockSize=512,f.outSize=160,f.hmacStrength=80,f.padLength=64,f.prototype._update=function(t,e){for(var r=this.W,n=0;n<16;n++)r[n]=t[e+n];for(;n<r.length;n++)r[n]=P(r[n-3]^r[n-8]^r[n-14]^r[n-16],1);for(var i=this.h[0],o=this.h[1],a=this.h[2],f=this.h[3],s=this.h[4],n=0;n<r.length;n++){var u=~~(n/20),h=C(P(i,5),b(u,o,a,f),s,r[n],Z[u]);s=f,f=a,a=P(o,30),o=i,i=h}this.h[0]=T(this.h[0],i),this.h[1]=T(this.h[1],o),this.h[2]=T(this.h[2],a),this.h[3]=T(this.h[3],f),this.h[4]=T(this.h[4],s)},f.prototype._digest=function(t){return"hex"===t?B.toHex32(this.h,"big"):B.split32(this.h,"big")}},function(t,e,r){function n(t,e){if(Array.isArray(t))return t.slice();if(!t)return[];var r=[];if("string"==typeof t)if(e){if("hex"===e){t=t.replace(/[^a-z0-9]+/gi,""),t.length%2!==0&&(t="0"+t);for(var n=0;n<t.length;n+=2)r.push(parseInt(t[n]+t[n+1],16))}}else for(var n=0;n<t.length;n++){var i=t.charCodeAt(n),o=i>>8,a=255&i;o?r.push(o,a):r.push(a)}else for(var n=0;n<t.length;n++)r[n]=0|t[n];return r}function i(t){for(var e="",r=0;r<t.length;r++)e+=f(t[r].toString(16));return e}function o(t){var e=t>>>24|t>>>8&65280|t<<8&16711680|(255&t)<<24;return e>>>0}function a(t,e){for(var r="",n=0;n<t.length;n++){var i=t[n];"little"===e&&(i=o(i)),r+=s(i.toString(16))}return r}function f(t){return 1===t.length?"0"+t:t}function s(t){return 7===t.length?"0"+t:6===t.length?"00"+t:5===t.length?"000"+t:4===t.length?"0000"+t:3===t.length?"00000"+t:2===t.length?"000000"+t:1===t.length?"0000000"+t:t}function u(t,e,r,n){var i=r-e;y(i%4===0);for(var o=new Array(i/4),a=0,f=e;a<o.length;a++,f+=4){var s;s="big"===n?t[f]<<24|t[f+1]<<16|t[f+2]<<8|t[f+3]:t[f+3]<<24|t[f+2]<<16|t[f+1]<<8|t[f],o[a]=s>>>0}return o}function h(t,e){for(var r=new Array(4*t.length),n=0,i=0;n<t.length;n++,i+=4){var o=t[n];"big"===e?(r[i]=o>>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r}function c(t,e){return t>>>e|t<<32-e}function d(t,e){return t<<e|t>>>32-e}function l(t,e){return t+e>>>0}function p(t,e,r){return t+e+r>>>0}function b(t,e,r,n){return t+e+r+n>>>0}function v(t,e,r,n,i){return t+e+r+n+i>>>0}function y(t,e){if(!t)throw new Error(e||"Assertion failed")}function m(t,e,r,n){var i=t[e],o=t[e+1],a=n+o>>>0,f=(a<n?1:0)+r+i;t[e]=f>>>0,t[e+1]=a}function g(t,e,r,n){var i=e+n>>>0,o=(i<e?1:0)+t+r;return o>>>0}function w(t,e,r,n){var i=e+n;return i>>>0}function _(t,e,r,n,i,o,a,f){var s=0,u=e;u=u+n>>>0,s+=u<e?1:0,u=u+o>>>0,s+=u<o?1:0,u=u+f>>>0,s+=u<f?1:0;var h=t+r+i+a+s;return h>>>0}function M(t,e,r,n,i,o,a,f){var s=e+n+o+f;return s>>>0}function S(t,e,r,n,i,o,a,f,s,u){var h=0,c=e;c=c+n>>>0,h+=c<e?1:0,c=c+o>>>0,h+=c<o?1:0,c=c+f>>>0,h+=c<f?1:0,c=c+u>>>0,h+=c<u?1:0;var d=t+r+i+a+s+h;return d>>>0}function E(t,e,r,n,i,o,a,f,s,u){var h=e+n+o+f+u;return h>>>0}function A(t,e,r){var n=e<<32-r|t>>>r;return n>>>0}function k(t,e,r){var n=t<<32-r|e>>>r;return n>>>0}function x(t,e,r){return t>>>r}function I(t,e,r){var n=t<<32-r|e>>>r;return n>>>0}var B=e,O=r(2);B.toArray=n,B.toHex=i,B.htonl=o,B.toHex32=a,B.zero2=f,B.zero8=s,B.join32=u,B.split32=h,B.rotr32=c,B.rotl32=d,B.sum32=l,B.sum32_3=p,B.sum32_4=b,B.sum32_5=v,B.assert=y,B.inherits=O,e.sum64=m,e.sum64_hi=g,e.sum64_lo=w,e.sum64_4_hi=_,e.sum64_4_lo=M,e.sum64_5_hi=S,e.sum64_5_lo=E,e.rotr64_hi=A,e.rotr64_lo=k,e.shr64_hi=x,e.shr64_lo=I},function(t,e,r){"use strict";(function(t){function r(e,r){if(e.length%o!==0){var n=e.length+(o-e.length%o);e=t.concat([e,a],n)}for(var i=[],f=r?e.readInt32BE:e.readInt32LE,s=0;s<e.length;s+=o)i.push(f.call(e,s));return i}function n(e,r,n){for(var i=new t(r),o=n?i.writeInt32BE:i.writeInt32LE,a=0;a<e.length;a++)o.call(i,e[a],4*a,!0);return i}function i(e,i,o,a){t.isBuffer(e)||(e=new t(e));var s=i(r(e,a),e.length*f);return n(s,o,a)}var o=4,a=new t(o);a.fill(0);var f=8;e.hash=i}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t){i.call(this),this.hashMode="string"==typeof t,this.hashMode?this[t]=this._finalOrDigest:this.final=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=r(31).Transform,o=r(2),a=r(52).StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(t,r,n){"string"==typeof t&&(t=new e(t,r));var i=this._update(t);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(t,e,r){var n;try{this.hashMode?this._update(t):this.push(this._update(t))}catch(t){n=t}finally{r(n)}},n.prototype._flush=function(t){var e;try{this.push(this._final())}catch(t){e=t}finally{t(e)}},n.prototype._finalOrDigest=function(t){var r=this._final()||new e("");return t&&(r=this._toString(r,t,!0)),r},n.prototype._toString=function(t,e,r){if(this._decoder||(this._decoder=new a(e),this._encoding=e),this._encoding!==e)throw new Error("can't switch encodings");var n=this._decoder.write(t);return r&&(n+=this._decoder.end()),n}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function r(t){for(var e=[],r=0,n=0;r<t.length;r++,n+=8)e[n>>>5]|=t[r]<<24-n%32;return e}function n(t){for(var e=[],r=0;r<32*t.length;r+=8)e.push(t[r>>>5]>>>24-r%32&255);return e}function i(t,e,r){for(var n=0;n<16;n++){var i=r+n,c=e[i];e[i]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var m,g,w,_,M,S,E,A,k,x;S=m=t[0],E=g=t[1],A=w=t[2],k=_=t[3],x=M=t[4];var I;for(n=0;n<80;n+=1)I=m+e[r+d[n]]|0,I+=n<16?o(g,w,_)+v[0]:n<32?a(g,w,_)+v[1]:n<48?f(g,w,_)+v[2]:n<64?s(g,w,_)+v[3]:u(g,w,_)+v[4],I|=0,I=h(I,p[n]),I=I+M|0,m=M,M=_,_=h(w,10),w=g,g=I,I=S+e[r+l[n]]|0,I+=n<16?u(E,A,k)+y[0]:n<32?s(E,A,k)+y[1]:n<48?f(E,A,k)+y[2]:n<64?a(E,A,k)+y[3]:o(E,A,k)+y[4],I|=0,I=h(I,b[n]),I=I+x|0,S=x,x=k,k=h(A,10),A=E,E=I;I=t[1]+w+k|0,t[1]=t[2]+_+x|0,t[2]=t[3]+M+S|0,t[3]=t[4]+m+E|0,t[4]=t[0]+g+A|0,t[0]=I}function o(t,e,r){return t^e^r}function a(t,e,r){return t&e|~t&r}function f(t,e,r){return(t|~e)^r}function s(t,e,r){return t&r|e&~r}function u(t,e,r){return t^(e|~r)}function h(t,e){return t<<e|t>>>32-e}function c(t){var o=[1732584193,4023233417,2562383102,271733878,3285377520];"string"==typeof t&&(t=new e(t,"utf8"));var a=r(t),f=8*t.length,s=8*t.length;a[f>>>5]|=128<<24-f%32,a[(f+64>>>9<<4)+14]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8);for(var u=0;u<a.length;u+=16)i(o,a,u);for(u=0;u<5;u++){var h=o[u];o[u]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}var c=n(o);return new e(c)}/** @preserve
|
||
(c) 2012 by Cédric Mesnil. All rights reserved.
|
||
|
||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||
|
||
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||
|
||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
*/
|
||
var d=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],l=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],p=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],b=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],v=[0,1518500249,1859775393,2400959708,2840853838],y=[1352829926,1548603684,1836072691,2053994217,0];t.exports=c}).call(e,r(1).Buffer)},function(t,e,r){var e=t.exports=function(t){t=t.toLowerCase();var r=e[t];if(!r)throw new Error(t+" is not supported (we accept pull requests)");return new r};e.sha=r(569),e.sha1=r(570),e.sha224=r(571),e.sha256=r(227),e.sha384=r(572),e.sha512=r(228)},function(t,e,r){(function(e){function n(){this.init(),this._w=h,s.call(this,64,56)}function i(t){return t<<5|t>>>27}function o(t){return t<<30|t>>>2}function a(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}var f=r(2),s=r(60),u=[1518500249,1859775393,-1894007588,-899497514],h=new Array(80);f(n,s),n.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},n.prototype._update=function(t){for(var e=this._w,r=0|this._a,n=0|this._b,f=0|this._c,s=0|this._d,h=0|this._e,c=0;c<16;++c)e[c]=t.readInt32BE(4*c);for(;c<80;++c)e[c]=e[c-3]^e[c-8]^e[c-14]^e[c-16];for(var d=0;d<80;++d){var l=~~(d/20),p=i(r)+a(l,n,f,s)+h+e[d]+u[l]|0;h=s,s=f,f=o(n),n=r,r=p}this._a=r+this._a|0,this._b=n+this._b|0,this._c=f+this._c|0,this._d=s+this._d|0,this._e=h+this._e|0},n.prototype._hash=function(){var t=new e(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(){this.init(),this._w=c,u.call(this,64,56)}function i(t){return t<<1|t>>>31}function o(t){return t<<5|t>>>27}function a(t){return t<<30|t>>>2}function f(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}var s=r(2),u=r(60),h=[1518500249,1859775393,-1894007588,-899497514],c=new Array(80);s(n,u),n.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},n.prototype._update=function(t){for(var e=this._w,r=0|this._a,n=0|this._b,s=0|this._c,u=0|this._d,c=0|this._e,d=0;d<16;++d)e[d]=t.readInt32BE(4*d);for(;d<80;++d)e[d]=i(e[d-3]^e[d-8]^e[d-14]^e[d-16]);for(var l=0;l<80;++l){var p=~~(l/20),b=o(r)+f(p,n,s,u)+c+e[l]+h[p]|0;c=u,u=s,s=a(n),n=r,r=b}this._a=r+this._a|0,this._b=n+this._b|0,this._c=s+this._c|0,this._d=u+this._d|0,this._e=c+this._e|0},n.prototype._hash=function(){var t=new e(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(){this.init(),this._w=f,a.call(this,64,56)}var i=r(2),o=r(227),a=r(60),f=new Array(64);i(n,o),n.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},n.prototype._hash=function(){var t=new e(28);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(){this.init(),this._w=f,a.call(this,128,112)}var i=r(2),o=r(228),a=r(60),f=new Array(160);i(n,o),n.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},n.prototype._hash=function(){function t(t,e,n){r.writeInt32BE(t,n),r.writeInt32BE(e,n+4)}var r=new e(48);return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),r},t.exports=n}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(e){var r=new t(a[e].prime,"hex"),n=new t(a[e].gen,"hex");return new f(r,n)}function i(e,r,n,a){return t.isBuffer(r)||void 0===s[r]?i(e,"binary",r,n):(r=r||"binary",a=a||"binary",n=n||new t([2]),t.isBuffer(n)||(n=new t(n,a)),"number"==typeof e?new f(o(e,n),n,!0):(t.isBuffer(e)||(e=new t(e,r)),new f(e,n,!0)))}var o=r(229),a=r(468),f=r(574),s={binary:!0,hex:!0,base64:!0};e.DiffieHellmanGroup=e.createDiffieHellmanGroup=e.getDiffieHellman=n,e.createDiffieHellman=e.DiffieHellman=i}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._pub=new s(t),this}function i(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this._priv=new s(t),this}function o(t,e){var r=e.toString("hex"),n=[r,t.toString(16)].join("_");if(n in m)return m[n];var i=0;if(t.isEven()||!v.simpleSieve||!v.fermatTest(t)||!h.test(t))return i+=1,i+="02"===r||"05"===r?8:4,m[n]=i,i;h.test(t.shrn(1))||(i+=2);var o;switch(r){case"02":t.mod(c).cmp(d)&&(i+=8);break;case"05":o=t.mod(l),o.cmp(p)&&o.cmp(b)&&(i+=8);break;default:i+=4}return m[n]=i,i}function a(t,e,r){this.setGenerator(e),this.__prime=new s(t),this._prime=s.mont(this.__prime),this._primeLen=t.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=n,this.setPrivateKey=i):this._primeCode=8}function f(t,r){var n=new e(t.toArray());return r?n.toString(r):n}var s=r(150),u=r(230),h=new u,c=new s(24),d=new s(11),l=new s(10),p=new s(3),b=new s(7),v=r(229),y=r(61);t.exports=a;var m={};Object.defineProperty(a.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=o(this.__prime,this.__gen)),this._primeCode}}),a.prototype.generateKeys=function(){return this._priv||(this._priv=new s(y(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},a.prototype.computeSecret=function(t){t=new s(t),t=t.toRed(this._prime);var r=t.redPow(this._priv).fromRed(),n=new e(r.toArray()),i=this.getPrime();if(n.length<i.length){var o=new e(i.length-n.length);o.fill(0),n=e.concat([o,n])}return n},a.prototype.getPublicKey=function(t){return f(this._pub,t)},a.prototype.getPrivateKey=function(t){return f(this._priv,t)},a.prototype.getPrime=function(t){return f(this.__prime,t)},a.prototype.getGenerator=function(t){return f(this._gen,t)},a.prototype.setGenerator=function(t,r){return r=r||"utf8",e.isBuffer(t)||(t=new e(t,r)),this.__gen=t,this._gen=new s(t),this}}).call(e,r(1).Buffer)},function(t,e,r){function n(t){this.rand=t}var i;if(t.exports=function(t){return i||(i=new n(null)),i.generate(t)},t.exports.Rand=n,n.prototype.generate=function(t){return this._rand(t)},"object"==typeof window)window.crypto&&window.crypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.crypto.getRandomValues(e),e}:window.msCrypto&&window.msCrypto.getRandomValues?n.prototype._rand=function(t){var e=new Uint8Array(t);return window.msCrypto.getRandomValues(e),e}:n.prototype._rand=function(){throw new Error("Not implemented yet")};else try{var o=r(611);n.prototype._rand=function(t){return o.randomBytes(t)}}catch(t){n.prototype._rand=function(t){for(var e=new Uint8Array(t),r=0;r<e.length;r++)e[r]=this.rand.getByte();return e}}},function(t,e){var r=Math.pow(2,30)-1;t.exports=function(t,e){if("number"!=typeof t)throw new TypeError("Iterations not a number");if(t<0)throw new TypeError("Bad iterations");if("number"!=typeof e)throw new TypeError("Key length not a number");if(e<0||e>r||e!==e)throw new TypeError("Bad key length")}},function(t,e,r){e.publicEncrypt=r(593),e.privateDecrypt=r(592),e.privateEncrypt=function(t,r){return e.publicEncrypt(t,r,!0)},e.publicDecrypt=function(t,r){return e.privateDecrypt(t,r,!0)}},function(t,e,r){var n=r(106),i=n.define("RSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())});e.RSAPrivateKey=i;var o=n.define("RSAPublicKey",function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())});e.RSAPublicKey=o;var a=n.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(f),this.key("subjectPublicKey").bitstr())});e.PublicKey=a;var f=n.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())}),s=n.define("PrivateKeyInfo",function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(f),this.key("subjectPrivateKey").octstr())});e.PrivateKey=s;var u=n.define("EncryptedPrivateKeyInfo",function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())});e.EncryptedPrivateKey=u;var h=n.define("DSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())});e.DSAPrivateKey=h,e.DSAparam=n.define("DSAparam",function(){this.int()});var c=n.define("ECPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(d),this.key("publicKey").optional().explicit(1).bitstr())});e.ECPrivateKey=c;var d=n.define("ECParameters",function(){this.choice({namedCurve:this.objid()})});e.signature=n.define("signature",function(){this.seq().obj(this.key("r").int(),this.key("s").int())})},function(t,e,r){(function(e){var n=/Proc-Type: 4,ENCRYPTED\r?\nDEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\r?\n\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n/m,i=/^-----BEGIN (.*) KEY-----\r?\n/m,o=/^-----BEGIN (.*) KEY-----\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n-----END \1 KEY-----$/m,a=r(153),f=r(239);t.exports=function(t,r){var s,u=t.toString(),h=u.match(n);if(h){var c="aes"+h[1],d=new e(h[2],"hex"),l=new e(h[3].replace(/\r?\n/g,""),"base64"),p=a(r,d.slice(0,8),parseInt(h[1],10)).key,b=[],v=f.createDecipheriv(c,p,d);b.push(v.update(l)),b.push(v.final()),s=e.concat(b)}else{var y=u.match(o);s=new e(y[2].replace(/\r?\n/g,""),"base64")}var m=u.match(i)[1]+" KEY";return{tag:m,data:s}}}).call(e,r(1).Buffer)},function(t,e,r){function n(t,e){this.name=t,this.body=e,this.decoders={},this.encoders={}}var i=r(106),o=r(2),a=e;a.define=function(t,e){return new n(t,e)},n.prototype._createNamed=function(t){var e;try{e=r(251).runInThisContext("(function "+this.name+"(entity) {\n this._initNamed(entity);\n})")}catch(t){e=function(t){this._initNamed(t)}}return o(e,t),e.prototype._initNamed=function(e){t.call(this,e)},new e(this)},n.prototype._getDecoder=function(t){return t=t||"der",this.decoders.hasOwnProperty(t)||(this.decoders[t]=this._createNamed(i.decoders[t])),this.decoders[t]},n.prototype.decode=function(t,e,r){return this._getDecoder(e).decode(t,r)},n.prototype._getEncoder=function(t){return t=t||"der",this.encoders.hasOwnProperty(t)||(this.encoders[t]=this._createNamed(i.encoders[t])),this.encoders[t]},n.prototype.encode=function(t,e,r){return this._getEncoder(e).encode(t,r)}},function(t,e,r){function n(t,e){var r={};this._baseState=r,r.enc=t,r.parent=e||null,r.children=null,r.tag=null,r.args=null,r.reverseArgs=null,r.choice=null,r.optional=!1,r.any=!1,r.obj=!1,r.use=null,r.useDecoder=null,r.key=null,r.default=null,r.explicit=null,r.implicit=null,r.contains=null,r.parent||(r.children=[],this._wrap())}var i=r(71).Reporter,o=r(71).EncoderBuffer,a=r(71).DecoderBuffer,f=r(588),s=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],u=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(s),h=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];t.exports=n;var c=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];n.prototype.clone=function(){var t=this._baseState,e={};c.forEach(function(r){e[r]=t[r]});var r=new this.constructor(e.parent);return r._baseState=e,r},n.prototype._wrap=function(){var t=this._baseState;u.forEach(function(e){this[e]=function(){var r=new this.constructor(this);return t.children.push(r),r[e].apply(r,arguments)}},this)},n.prototype._init=function(t){var e=this._baseState;f(null===e.parent),t.call(this),e.children=e.children.filter(function(t){return t._baseState.parent===this},this),f.equal(e.children.length,1,"Root node can have only one child")},n.prototype._useArgs=function(t){var e=this._baseState,r=t.filter(function(t){return t instanceof this.constructor},this);t=t.filter(function(t){return!(t instanceof this.constructor)},this),0!==r.length&&(f(null===e.children),e.children=r,r.forEach(function(t){t._baseState.parent=this},this)),0!==t.length&&(f(null===e.args),e.args=t,e.reverseArgs=t.map(function(t){if("object"!=typeof t||t.constructor!==Object)return t;var e={};return Object.keys(t).forEach(function(r){r==(0|r)&&(r|=0);var n=t[r];e[n]=r}),e}))},h.forEach(function(t){n.prototype[t]=function(){var e=this._baseState;throw new Error(t+" not implemented for encoding: "+e.enc)}}),s.forEach(function(t){n.prototype[t]=function(){var e=this._baseState,r=Array.prototype.slice.call(arguments);return f(null===e.tag),e.tag=t,this._useArgs(r),this}}),n.prototype.use=function(t){var e=this._baseState;return f(null===e.use),e.use=t,this},n.prototype.optional=function(){var t=this._baseState;return t.optional=!0,this},n.prototype.def=function(t){var e=this._baseState;return f(null===e.default),e.default=t,e.optional=!0,this},n.prototype.explicit=function(t){var e=this._baseState;return f(null===e.explicit&&null===e.implicit),e.explicit=t,this},n.prototype.implicit=function(t){var e=this._baseState;return f(null===e.explicit&&null===e.implicit),e.implicit=t,this},n.prototype.obj=function(){var t=this._baseState,e=Array.prototype.slice.call(arguments);return t.obj=!0,0!==e.length&&this._useArgs(e),this},n.prototype.key=function(t){var e=this._baseState;return f(null===e.key),e.key=t,this},n.prototype.any=function(){var t=this._baseState;return t.any=!0,this},n.prototype.choice=function(t){var e=this._baseState;return f(null===e.choice),e.choice=t,this._useArgs(Object.keys(t).map(function(e){return t[e]})),this},n.prototype.contains=function(t){var e=this._baseState;return f(null===e.use),e.contains=t,this},n.prototype._decode=function(t,e){var r=this._baseState;if(null===r.parent)return t.wrapResult(r.children[0]._decode(t,e));var n=r.default,i=!0,o=null;if(null!==r.key&&(o=t.enterKey(r.key)),r.optional){var f=null;if(null!==r.explicit?f=r.explicit:null!==r.implicit?f=r.implicit:null!==r.tag&&(f=r.tag),null!==f||r.any){if(i=this._peekTag(t,f,r.any),t.isError(i))return i}else{var s=t.save();try{null===r.choice?this._decodeGeneric(r.tag,t,e):this._decodeChoice(t,e),i=!0}catch(t){i=!1}t.restore(s)}}var u;if(r.obj&&i&&(u=t.enterObject()),i){if(null!==r.explicit){var h=this._decodeTag(t,r.explicit);if(t.isError(h))return h;t=h}var c=t.offset;if(null===r.use&&null===r.choice){if(r.any)var s=t.save();var d=this._decodeTag(t,null!==r.implicit?r.implicit:r.tag,r.any);if(t.isError(d))return d;r.any?n=t.raw(s):t=d}if(e&&e.track&&null!==r.tag&&e.track(t.path(),c,t.length,"tagged"),e&&e.track&&null!==r.tag&&e.track(t.path(),t.offset,t.length,"content"),n=r.any?n:null===r.choice?this._decodeGeneric(r.tag,t,e):this._decodeChoice(t,e),t.isError(n))return n;if(r.any||null!==r.choice||null===r.children||r.children.forEach(function(r){r._decode(t,e)}),r.contains&&("octstr"===r.tag||"bitstr"===r.tag)){var l=new a(n);n=this._getUse(r.contains,t._reporterState.obj)._decode(l,e)}}return r.obj&&i&&(n=t.leaveObject(u)),null===r.key||null===n&&i!==!0?null!==o&&t.exitKey(o):t.leaveKey(o,r.key,n),n},n.prototype._decodeGeneric=function(t,e,r){var n=this._baseState;return"seq"===t||"set"===t?null:"seqof"===t||"setof"===t?this._decodeList(e,t,n.args[0],r):/str$/.test(t)?this._decodeStr(e,t,r):"objid"===t&&n.args?this._decodeObjid(e,n.args[0],n.args[1],r):"objid"===t?this._decodeObjid(e,null,null,r):"gentime"===t||"utctime"===t?this._decodeTime(e,t,r):"null_"===t?this._decodeNull(e,r):"bool"===t?this._decodeBool(e,r):"int"===t||"enum"===t?this._decodeInt(e,n.args&&n.args[0],r):null!==n.use?this._getUse(n.use,e._reporterState.obj)._decode(e,r):e.error("unknown tag: "+t)},n.prototype._getUse=function(t,e){var r=this._baseState;return r.useDecoder=this._use(t,e),f(null===r.useDecoder._baseState.parent),r.useDecoder=r.useDecoder._baseState.children[0],r.implicit!==r.useDecoder._baseState.implicit&&(r.useDecoder=r.useDecoder.clone(),r.useDecoder._baseState.implicit=r.implicit),r.useDecoder},n.prototype._decodeChoice=function(t,e){var r=this._baseState,n=null,i=!1;return Object.keys(r.choice).some(function(o){var a=t.save(),f=r.choice[o];try{var s=f._decode(t,e);if(t.isError(s))return!1;n={type:o,value:s},i=!0}catch(e){return t.restore(a),!1}return!0},this),i?n:t.error("Choice not matched")},n.prototype._createEncoderBuffer=function(t){return new o(t,this.reporter)},n.prototype._encode=function(t,e,r){var n=this._baseState;if(null===n.default||n.default!==t){var i=this._encodeValue(t,e,r);if(void 0!==i&&!this._skipDefault(i,e,r))return i}},n.prototype._encodeValue=function(t,e,r){var n=this._baseState;if(null===n.parent)return n.children[0]._encode(t,e||new i);var o=null;if(this.reporter=e,n.optional&&void 0===t){if(null===n.default)return;t=n.default}var a=null,f=!1;if(n.any)o=this._createEncoderBuffer(t);else if(n.choice)o=this._encodeChoice(t,e);else if(n.contains)a=this._getUse(n.contains,r)._encode(t,e),f=!0;else if(n.children)a=n.children.map(function(r){if("null_"===r._baseState.tag)return r._encode(null,e,t);if(null===r._baseState.key)return e.error("Child should have a key");var n=e.enterKey(r._baseState.key);if("object"!=typeof t)return e.error("Child expected, but input is not object");var i=r._encode(t[r._baseState.key],e,t);return e.leaveKey(n),i},this).filter(function(t){return t}),a=this._createEncoderBuffer(a);else if("seqof"===n.tag||"setof"===n.tag){if(!n.args||1!==n.args.length)return e.error("Too many args for : "+n.tag);if(!Array.isArray(t))return e.error("seqof/setof, but data is not Array");var s=this.clone();s._baseState.implicit=null,a=this._createEncoderBuffer(t.map(function(r){var n=this._baseState;return this._getUse(n.args[0],t)._encode(r,e)},s))}else null!==n.use?o=this._getUse(n.use,r)._encode(t,e):(a=this._encodePrimitive(n.tag,t),f=!0);var o;if(!n.any&&null===n.choice){var u=null!==n.implicit?n.implicit:n.tag,h=null===n.implicit?"universal":"context";null===u?null===n.use&&e.error("Tag could be ommited only for .use()"):null===n.use&&(o=this._encodeComposite(u,f,h,a))}return null!==n.explicit&&(o=this._encodeComposite(n.explicit,!1,"context",o)),o},n.prototype._encodeChoice=function(t,e){var r=this._baseState,n=r.choice[t.type];return n||f(!1,t.type+" not found in "+JSON.stringify(Object.keys(r.choice))),n._encode(t.value,e)},n.prototype._encodePrimitive=function(t,e){var r=this._baseState;if(/str$/.test(t))return this._encodeStr(e,t);if("objid"===t&&r.args)return this._encodeObjid(e,r.reverseArgs[0],r.args[1]);if("objid"===t)return this._encodeObjid(e,null,null);if("gentime"===t||"utctime"===t)return this._encodeTime(e,t);if("null_"===t)return this._encodeNull();if("int"===t||"enum"===t)return this._encodeInt(e,r.args&&r.reverseArgs[0]);if("bool"===t)return this._encodeBool(e);throw new Error("Unsupported tag: "+t)},n.prototype._isNumstr=function(t){return/^[0-9 ]*$/.test(t)},n.prototype._isPrintstr=function(t){return/^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(t)}},function(t,e,r){function n(t){this._reporterState={obj:null,path:[],options:t||{},errors:[]}}function i(t,e){this.path=t,this.rethrow(e)}var o=r(2);e.Reporter=n,n.prototype.isError=function(t){return t instanceof i},n.prototype.save=function(){var t=this._reporterState;return{obj:t.obj,pathLen:t.path.length}},n.prototype.restore=function(t){var e=this._reporterState;e.obj=t.obj,e.path=e.path.slice(0,t.pathLen)},n.prototype.enterKey=function(t){return this._reporterState.path.push(t)},n.prototype.exitKey=function(t){var e=this._reporterState;e.path=e.path.slice(0,t-1)},n.prototype.leaveKey=function(t,e,r){var n=this._reporterState;this.exitKey(t),null!==n.obj&&(n.obj[e]=r)},n.prototype.path=function(){return this._reporterState.path.join("/")},n.prototype.enterObject=function(){var t=this._reporterState,e=t.obj;return t.obj={},e},n.prototype.leaveObject=function(t){var e=this._reporterState,r=e.obj;return e.obj=t,r},n.prototype.error=function(t){var e,r=this._reporterState,n=t instanceof i;if(e=n?t:new i(r.path.map(function(t){return"["+JSON.stringify(t)+"]"}).join(""),t.message||t,t.stack),!r.options.partial)throw e;return n||r.errors.push(e),e},n.prototype.wrapResult=function(t){var e=this._reporterState;return e.options.partial?{result:this.isError(t)?null:t,errors:e.errors}:t},o(i,Error),i.prototype.rethrow=function(t){if(this.message=t+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,i),!this.stack)try{throw new Error(this.message)}catch(t){this.stack=t.stack}return this}},function(t,e,r){var n=r(235);e.tagClass={0:"universal",1:"application",2:"context",3:"private"},e.tagClassByName=n._reverse(e.tagClass),e.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},e.tagByName=n._reverse(e.tag)},function(t,e,r){var n=e;n.der=r(236),n.pem=r(585)},function(t,e,r){function n(t){a.call(this,t),this.enc="pem"}var i=r(2),o=r(1).Buffer,a=r(236);i(n,a),t.exports=n,n.prototype.decode=function(t,e){for(var r=t.toString().split(/[\r\n]+/g),n=e.label.toUpperCase(),i=/^-----(BEGIN|END) ([^-]+)-----$/,f=-1,s=-1,u=0;u<r.length;u++){var h=r[u].match(i);if(null!==h&&h[2]===n){if(f!==-1){if("END"!==h[1])break;s=u;break}if("BEGIN"!==h[1])break;f=u}}if(f===-1||s===-1)throw new Error("PEM section not found for: "+n);var c=r.slice(f+1,s).join("");c.replace(/[^a-z0-9\+\/=]+/gi,"");var d=new o(c,"base64");return a.prototype.decode.call(this,d,e)}},function(t,e,r){var n=e;n.der=r(237),n.pem=r(587)},function(t,e,r){function n(t){o.call(this,t),this.enc="pem"}var i=r(2),o=r(237);i(n,o),t.exports=n,n.prototype.encode=function(t,e){for(var r=o.prototype.encode.call(this,t),n=r.toString("base64"),i=["-----BEGIN "+e.label+"-----"],a=0;a<n.length;a+=64)i.push(n.slice(a,a+64));return i.push("-----END "+e.label+"-----"),i.join("\n")}},function(t,e){function r(t,e){if(!t)throw new Error(e||"Assertion failed")}t.exports=r,r.equal=function(t,e,r){if(t!=e)throw new Error(r||"Assertion failed: "+t+" != "+e)}},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(u.call(this),this._cache=new i,this._last=void 0,this._cipher=new s.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(t){for(var e=t[15],r=-1;++r<e;)if(t[r+(16-e)]!==e)throw new Error("unable to decrypt data");if(16!==e)return t.slice(0,16-e)}function a(e,r,i){var o=c[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(b[o.mode],r,i,!0):"auth"===o.type?new l(b[o.mode],r,i,!0):new n(b[o.mode],r,i)}function f(t,e){var r=c[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=p(e,!1,r.key,r.iv);return a(t,n.key,n.iv)}var s=r(107),u=r(109),h=r(2),c=r(152),d=r(246),l=r(238),p=r(153);h(n,u),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get(this._autopadding);)n=this._mode.decrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return o(this._mode.decrypt(this,t));if(t)throw new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(t){var e;if(t){if(this.cache.length>16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e}else if(this.cache.length>=16)return e=this.cache.slice(0,16),this.cache=this.cache.slice(16),e;return null},i.prototype.flush=function(){if(this.cache.length)return this.cache};var b={ECB:r(244),CBC:r(240),CFB:r(241),CFB8:r(243),CFB1:r(242),OFB:r(245),CTR:r(108),GCM:r(108)};e.createDecipher=f,e.createDecipheriv=a}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function n(e,r,o){return this instanceof n?(s.call(this),this._cache=new i,this._cipher=new f.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(e,r,i){var o=h[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(p[o.mode],r,i):"auth"===o.type?new l(p[o.mode],r,i):new n(p[o.mode],r,i)}function a(t,e){var r=h[t.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=c(e,!1,r.key,r.iv);return o(t,n.key,n.iv)}var f=r(107),s=r(109),u=r(2),h=r(152),c=r(153),d=r(246),l=r(238);u(n,s),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get();)n=this._mode.encrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var t=this._cache.flush();if(this._autopadding)return t=this._mode.encrypt(this,t),this._cipher.scrub(),t;if("10101010101010101010101010101010"!==t.toString("hex"))throw this._cipher.scrub(),new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(t){return this._autopadding=!!t,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(){if(this.cache.length>15){var t=this.cache.slice(0,16);return this.cache=this.cache.slice(16),t}return null},i.prototype.flush=function(){for(var e=16-this.cache.length,r=new t(e),n=-1;++n<e;)r.writeUInt8(e,n);var i=t.concat([this.cache,r]);return i};var p={ECB:r(244),CBC:r(240),CFB:r(241),CFB8:r(243),CFB1:r(242),OFB:r(245),CTR:r(108),GCM:r(108)};e.createCipheriv=o,e.createCipher=a}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function r(t){this.h=t,this.state=new e(16),this.state.fill(0),this.cache=new e("")}function n(t){return[t.readUInt32BE(0),t.readUInt32BE(4),t.readUInt32BE(8),t.readUInt32BE(12)]}function i(t){t=t.map(o);var r=new e(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r}function o(t){var e,r;return e=t>s||t<0?(r=Math.abs(t)%s,t<0?s-r:r):t}function a(t,e){return[t[0]^e[0],t[1]^e[1],t[2]^e[2],t[3]^e[3]]}var f=new e(16);f.fill(0),t.exports=r,r.prototype.ghash=function(t){for(var e=-1;++e<t.length;)this.state[e]^=t[e];this._multiply()},r.prototype._multiply=function(){for(var t,e,r,o=n(this.h),f=[0,0,0,0],s=-1;++s<128;){for(e=0!==(this.state[~~(s/8)]&1<<7-s%8),e&&(f=a(f,o)),r=0!==(1&o[3]),t=3;t>0;t--)o[t]=o[t]>>>1|(1&o[t-1])<<31;o[0]=o[0]>>>1,r&&(o[0]=o[0]^225<<24)}this.state=i(f)},r.prototype.update=function(t){this.cache=e.concat([this.cache,t]);for(var r;this.cache.length>=16;)r=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(r)},r.prototype.final=function(t,r){return this.cache.length&&this.ghash(e.concat([this.cache,f],16)),this.ghash(i([0,t,0,r])),this.state};var s=Math.pow(2,32)}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r){var n=(t.modulus,t.modulus.byteLength()),i=(r.length,c("sha1").update(new e("")).digest()),a=i.length;if(0!==r[0])throw new Error("decryption error");var u=r.slice(1,a+1),h=r.slice(a+1),d=s(u,f(h,a)),l=s(h,f(d,n-a-1));if(o(i,l.slice(0,a)))throw new Error("decryption error");for(var p=a;0===l[p];)p++;if(1!==l[p++])throw new Error("decryption error");return l.slice(p)}function i(t,e,r){for(var n=e.slice(0,2),i=2,o=0;0!==e[i++];)if(i>=e.length){o++;break}var a=e.slice(2,i-1);e.slice(i-1,i);if(("0002"!==n.toString("hex")&&!r||"0001"!==n.toString("hex")&&r)&&o++,a.length<8&&o++,o)throw new Error("decryption error");return e.slice(i)}function o(t,r){t=new e(t),r=new e(r);var n=0,i=t.length;t.length!==r.length&&(n++,i=Math.min(t.length,r.length));for(var o=-1;++o<i;)n+=t[o]^r[o];return n}var a=r(233),f=r(231),s=r(248),u=r(70),h=r(232),c=r(59),d=r(247);t.exports=function(t,r,o){var f;f=t.padding?t.padding:o?1:4;var s=a(t),c=s.modulus.byteLength();if(r.length>c||new u(r).cmp(s.modulus)>=0)throw new Error("decryption error");var l;l=o?d(new u(r),s):h(r,s);var p=new e(c-l.length);if(p.fill(0),l=e.concat([p,l],c),4===f)return n(s,l);if(1===f)return i(s,l,o);if(3===f)return l;throw new Error("unknown padding")}}).call(e,r(1).Buffer)},function(t,e,r){(function(e){function n(t,r){var n=t.modulus.byteLength(),i=r.length,o=s("sha1").update(new e("")).digest(),a=o.length,d=2*a;if(i>n-d-2)throw new Error("message too long");var l=new e(n-i-d-2);l.fill(0);var p=n-a-1,b=f(a),v=h(e.concat([o,l,new e([1]),r],p),u(b,p)),y=h(b,u(v,a));return new c(e.concat([new e([0]),y,v],n))}function i(t,r,n){var i=r.length,a=t.modulus.byteLength();if(i>a-11)throw new Error("message too long");var f;return n?(f=new e(a-i-3),f.fill(255)):f=o(a-i-3),new c(e.concat([new e([0,n?1:2]),f,new e([0]),r],a))}function o(t,r){for(var n,i=new e(t),o=0,a=f(2*t),s=0;o<t;)s===a.length&&(a=f(2*t),s=0),n=a[s++],n&&(i[o++]=n);return i}var a=r(233),f=r(61),s=r(59),u=r(231),h=r(248),c=r(70),d=r(247),l=r(232);t.exports=function(t,e,r){var o;o=t.padding?t.padding:r?1:4;var f,s=a(t);if(4===o)f=n(s,e);else if(1===o)f=i(s,e,r);else{if(3!==o)throw new Error("unknown padding");if(f=new c(e),f.cmp(s.modulus)>=0)throw new Error("data too long for modulus")}return r?l(f,s):d(f,s)}}).call(e,r(1).Buffer)},function(t,e,r){(function(t){function r(t,e){for(var r=0,n=t.length-1;n>=0;n--){var i=t[n];"."===i?t.splice(n,1):".."===i?(t.splice(n,1),
|
||
r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function n(t,e){if(t.filter)return t.filter(e);for(var r=[],n=0;n<t.length;n++)e(t[n],n,t)&&r.push(t[n]);return r}var i=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,o=function(t){return i.exec(t).slice(1)};e.resolve=function(){for(var e="",i=!1,o=arguments.length-1;o>=-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<t.length&&""===t[e];e++);for(var r=t.length-1;r>=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;s<a;s++)if(i[s]!==o[s]){f=s;break}for(var u=[],s=f;s<i.length;s++)u.push("..");return u=u.concat(o.slice(f)),u.join("/")},e.sep="/",e.delimiter=":",e.dirname=function(t){var e=o(t),r=e[0],n=e[1];return r||n?(n&&(n=n.substr(0,n.length-1)),r+n):"."},e.basename=function(t,e){var r=o(t)[2];return e&&r.substr(-1*e.length)===e&&(r=r.substr(0,r.length-e.length)),r},e.extname=function(t){return o(t)[3]};var a="b"==="ab".substr(-1)?function(t,e,r){return t.substr(e,r)}:function(t,e,r){return e<0&&(e=t.length+e),t.substr(e,r)}}).call(e,r(26))},function(t,e,r){t.exports=r(51)},function(t,e,r){"use strict";function n(){this.head=null,this.tail=null,this.length=0}var i=(r(1).Buffer,r(156));t.exports=n,n.prototype.push=function(t){var e={data:t,next:null};this.length>0?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<f;++a)R(e,String(a))?o.push(d(t,e,r,n,String(a),!0)):o.push("");return i.forEach(function(i){i.match(/^\d+$/)||o.push(d(t,e,r,n,i,!0))}),o}function d(t,e,r,n,i,o){var a,f,u;if(u=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]},u.get?f=u.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):u.set&&(f=t.stylize("[Setter]","special")),R(n,i)||(a="["+i+"]"),f||(t.seen.indexOf(u.value)<0?(f=v(r)?s(t,u.value,null):s(t,u.value,r-1),f.indexOf("\n")>-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<arguments.length;r++)e.push(i(arguments[r]));return e.join(" ")}for(var r=1,n=arguments,o=n.length,a=String(t).replace(P,function(t){if("%%"===t)return"%";if(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<o;f=n[++r])a+=v(f)||!S(f)?" "+f:" "+i(f);return a},e.deprecate=function(r,i){function o(){if(!a){if(n.throwDeprecation)throw new Error(i);n.traceDeprecation?console.trace(i):console.error(i),a=!0}return r.apply(this,arguments)}if(_(t.process))return function(){return e.deprecate(r,i).apply(this,arguments)};if(n.noDeprecation===!0)return r;var a=!1;return o};var T,j={};e.debuglog=function(t){if(_(T)&&(T=n.env.NODE_DEBUG||""),t=t.toUpperCase(),!j[t])if(new RegExp("\\b"+t+"\\b","i").test(T)){var r=n.pid;j[t]=function(){var n=e.format.apply(e,arguments);console.error("%s %d: %s",t,r,n)}}else j[t]=function(){};return j[t]},e.inspect=i,i.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},i.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=p,e.isBoolean=b,e.isNull=v,e.isNullOrUndefined=y,e.isNumber=m,e.isString=g,e.isSymbol=w,e.isUndefined=_,e.isRegExp=M,e.isObject=S,e.isDate=E,e.isError=A,e.isFunction=k,e.isPrimitive=x,e.isBuffer=r(605);var C=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];e.log=function(){console.log("%s - %s",O(),e.format.apply(e,arguments))},e.inherits=r(604),e._extend=function(t,e){if(!e||!S(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}}).call(e,r(39),r(26))},function(t,e){var r=[].indexOf;t.exports=function(t,e){if(r)return t.indexOf(e);for(var n=0;n<t.length;++n)if(t[n]===e)return n;return-1}},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e,r){r(253),t.exports=r(252)}])});
|
||
|
||
/***/ }),
|
||
/* 6 */
|
||
/***/ (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;
|
||
|
||
|
||
/***/ }),
|
||
/* 7 */
|
||
/***/ (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__(8);
|
||
/* 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__(11);
|
||
/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "Transaction", function() { return __WEBPACK_IMPORTED_MODULE_1__transaction__; });
|
||
|
||
|
||
|
||
|
||
|
||
/***/ }),
|
||
/* 8 */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58__ = __webpack_require__(1);
|
||
/* 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__(27);
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_tweetnacl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_tweetnacl__);
|
||
/* harmony export (immutable) */ __webpack_exports__["a"] = Ed25519Keypair;
|
||
|
||
|
||
|
||
/**
|
||
* @class Keypair Ed25519 keypair in base58 (as BigchainDB expects base58 keys)
|
||
* @type {Object}
|
||
* @property {string} publicKey
|
||
* @property {string} privateKey
|
||
*/
|
||
function Ed25519Keypair() {
|
||
var 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));
|
||
}
|
||
|
||
/***/ }),
|
||
/* 9 */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_js_sha3__ = __webpack_require__(21);
|
||
/* 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();
|
||
}
|
||
|
||
/***/ }),
|
||
/* 10 */
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__serializeTransactionIntoCanonicalString__ = __webpack_require__(4);
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sha256Hash__ = __webpack_require__(9);
|
||
/* 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));
|
||
}
|
||
|
||
/***/ }),
|
||
/* 11 */
|
||
/***/ (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__(13);
|
||
/* 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__(12);
|
||
/* 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__(14);
|
||
/* 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__(0);
|
||
/* 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__(15);
|
||
/* 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__(16);
|
||
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "signTransaction", function() { return __WEBPACK_IMPORTED_MODULE_5__signTransaction__["a"]; });
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/***/ }),
|
||
/* 12 */
|
||
/***/ (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"] = 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);
|
||
}
|
||
|
||
/***/ }),
|
||
/* 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 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(process, global) {/**
|
||
* [js-sha3]{@link https://github.com/emn178/js-sha3}
|
||
*
|
||
* @version 0.5.7
|
||
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
||
* @copyright Chen, Yi-Cyuan 2015-2016
|
||
* @license MIT
|
||
*/
|
||
/*jslint bitwise: true */
|
||
(function () {
|
||
'use strict';
|
||
|
||
var root = typeof window === 'object' ? window : {};
|
||
var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
|
||
if (NODE_JS) {
|
||
root = global;
|
||
}
|
||
var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;
|
||
var HEX_CHARS = '0123456789abcdef'.split('');
|
||
var SHAKE_PADDING = [31, 7936, 2031616, 520093696];
|
||
var KECCAK_PADDING = [1, 256, 65536, 16777216];
|
||
var PADDING = [6, 1536, 393216, 100663296];
|
||
var SHIFT = [0, 8, 16, 24];
|
||
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,
|
||
0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,
|
||
2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,
|
||
2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
|
||
2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];
|
||
var BITS = [224, 256, 384, 512];
|
||
var SHAKE_BITS = [128, 256];
|
||
var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array'];
|
||
|
||
var createOutputMethod = function (bits, padding, outputType) {
|
||
return function (message) {
|
||
return new Keccak(bits, padding, bits).update(message)[outputType]();
|
||
};
|
||
};
|
||
|
||
var createShakeOutputMethod = function (bits, padding, outputType) {
|
||
return function (message, outputBits) {
|
||
return new Keccak(bits, padding, outputBits).update(message)[outputType]();
|
||
};
|
||
};
|
||
|
||
var createMethod = function (bits, padding) {
|
||
var method = createOutputMethod(bits, padding, 'hex');
|
||
method.create = function () {
|
||
return new Keccak(bits, padding, bits);
|
||
};
|
||
method.update = function (message) {
|
||
return method.create().update(message);
|
||
};
|
||
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
|
||
var type = OUTPUT_TYPES[i];
|
||
method[type] = createOutputMethod(bits, padding, type);
|
||
}
|
||
return method;
|
||
};
|
||
|
||
var createShakeMethod = function (bits, padding) {
|
||
var method = createShakeOutputMethod(bits, padding, 'hex');
|
||
method.create = function (outputBits) {
|
||
return new Keccak(bits, padding, outputBits);
|
||
};
|
||
method.update = function (message, outputBits) {
|
||
return method.create(outputBits).update(message);
|
||
};
|
||
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
|
||
var type = OUTPUT_TYPES[i];
|
||
method[type] = createShakeOutputMethod(bits, padding, type);
|
||
}
|
||
return method;
|
||
};
|
||
|
||
var algorithms = [
|
||
{name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod},
|
||
{name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod},
|
||
{name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod}
|
||
];
|
||
|
||
var methods = {}, methodNames = [];
|
||
|
||
for (var i = 0; i < algorithms.length; ++i) {
|
||
var algorithm = algorithms[i];
|
||
var bits = algorithm.bits;
|
||
for (var j = 0; j < bits.length; ++j) {
|
||
var methodName = algorithm.name +'_' + bits[j];
|
||
methodNames.push(methodName);
|
||
methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);
|
||
}
|
||
}
|
||
|
||
function Keccak(bits, padding, outputBits) {
|
||
this.blocks = [];
|
||
this.s = [];
|
||
this.padding = padding;
|
||
this.outputBits = outputBits;
|
||
this.reset = true;
|
||
this.block = 0;
|
||
this.start = 0;
|
||
this.blockCount = (1600 - (bits << 1)) >> 5;
|
||
this.byteCount = this.blockCount << 2;
|
||
this.outputBlocks = outputBits >> 5;
|
||
this.extraBytes = (outputBits & 31) >> 3;
|
||
|
||
for (var i = 0; i < 50; ++i) {
|
||
this.s[i] = 0;
|
||
}
|
||
}
|
||
|
||
Keccak.prototype.update = function (message) {
|
||
var notString = typeof message !== 'string';
|
||
if (notString && message.constructor === ArrayBuffer) {
|
||
message = new Uint8Array(message);
|
||
}
|
||
var length = message.length, blocks = this.blocks, byteCount = this.byteCount,
|
||
blockCount = this.blockCount, index = 0, s = this.s, i, code;
|
||
|
||
while (index < length) {
|
||
if (this.reset) {
|
||
this.reset = false;
|
||
blocks[0] = this.block;
|
||
for (i = 1; i < blockCount + 1; ++i) {
|
||
blocks[i] = 0;
|
||
}
|
||
}
|
||
if (notString) {
|
||
for (i = this.start; index < length && i < byteCount; ++index) {
|
||
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
|
||
}
|
||
} else {
|
||
for (i = this.start; index < length && i < byteCount; ++index) {
|
||
code = message.charCodeAt(index);
|
||
if (code < 0x80) {
|
||
blocks[i >> 2] |= code << SHIFT[i++ & 3];
|
||
} else if (code < 0x800) {
|
||
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
|
||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||
} else if (code < 0xd800 || code >= 0xe000) {
|
||
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
|
||
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||
} else {
|
||
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
||
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
|
||
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
|
||
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||
}
|
||
}
|
||
}
|
||
this.lastByteIndex = i;
|
||
if (i >= byteCount) {
|
||
this.start = i - byteCount;
|
||
this.block = blocks[blockCount];
|
||
for (i = 0; i < blockCount; ++i) {
|
||
s[i] ^= blocks[i];
|
||
}
|
||
f(s);
|
||
this.reset = true;
|
||
} else {
|
||
this.start = i;
|
||
}
|
||
}
|
||
return this;
|
||
};
|
||
|
||
Keccak.prototype.finalize = function () {
|
||
var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;
|
||
blocks[i >> 2] |= this.padding[i & 3];
|
||
if (this.lastByteIndex === this.byteCount) {
|
||
blocks[0] = blocks[blockCount];
|
||
for (i = 1; i < blockCount + 1; ++i) {
|
||
blocks[i] = 0;
|
||
}
|
||
}
|
||
blocks[blockCount - 1] |= 0x80000000;
|
||
for (i = 0; i < blockCount; ++i) {
|
||
s[i] ^= blocks[i];
|
||
}
|
||
f(s);
|
||
};
|
||
|
||
Keccak.prototype.toString = Keccak.prototype.hex = function () {
|
||
this.finalize();
|
||
|
||
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
|
||
extraBytes = this.extraBytes, i = 0, j = 0;
|
||
var hex = '', block;
|
||
while (j < outputBlocks) {
|
||
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
|
||
block = s[i];
|
||
hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +
|
||
HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +
|
||
HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +
|
||
HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];
|
||
}
|
||
if (j % blockCount === 0) {
|
||
f(s);
|
||
i = 0;
|
||
}
|
||
}
|
||
if (extraBytes) {
|
||
block = s[i];
|
||
if (extraBytes > 0) {
|
||
hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];
|
||
}
|
||
if (extraBytes > 1) {
|
||
hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];
|
||
}
|
||
if (extraBytes > 2) {
|
||
hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];
|
||
}
|
||
}
|
||
return hex;
|
||
};
|
||
|
||
Keccak.prototype.arrayBuffer = function () {
|
||
this.finalize();
|
||
|
||
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
|
||
extraBytes = this.extraBytes, i = 0, j = 0;
|
||
var bytes = this.outputBits >> 3;
|
||
var buffer;
|
||
if (extraBytes) {
|
||
buffer = new ArrayBuffer((outputBlocks + 1) << 2);
|
||
} else {
|
||
buffer = new ArrayBuffer(bytes);
|
||
}
|
||
var array = new Uint32Array(buffer);
|
||
while (j < outputBlocks) {
|
||
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
|
||
array[j] = s[i];
|
||
}
|
||
if (j % blockCount === 0) {
|
||
f(s);
|
||
}
|
||
}
|
||
if (extraBytes) {
|
||
array[i] = s[i];
|
||
buffer = buffer.slice(0, bytes);
|
||
}
|
||
return buffer;
|
||
};
|
||
|
||
Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;
|
||
|
||
Keccak.prototype.digest = Keccak.prototype.array = function () {
|
||
this.finalize();
|
||
|
||
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
|
||
extraBytes = this.extraBytes, i = 0, j = 0;
|
||
var array = [], offset, block;
|
||
while (j < outputBlocks) {
|
||
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
|
||
offset = j << 2;
|
||
block = s[i];
|
||
array[offset] = block & 0xFF;
|
||
array[offset + 1] = (block >> 8) & 0xFF;
|
||
array[offset + 2] = (block >> 16) & 0xFF;
|
||
array[offset + 3] = (block >> 24) & 0xFF;
|
||
}
|
||
if (j % blockCount === 0) {
|
||
f(s);
|
||
}
|
||
}
|
||
if (extraBytes) {
|
||
offset = j << 2;
|
||
block = s[i];
|
||
if (extraBytes > 0) {
|
||
array[offset] = block & 0xFF;
|
||
}
|
||
if (extraBytes > 1) {
|
||
array[offset + 1] = (block >> 8) & 0xFF;
|
||
}
|
||
if (extraBytes > 2) {
|
||
array[offset + 2] = (block >> 16) & 0xFF;
|
||
}
|
||
}
|
||
return array;
|
||
};
|
||
|
||
var f = function (s) {
|
||
var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,
|
||
b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,
|
||
b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,
|
||
b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;
|
||
for (n = 0; n < 48; n += 2) {
|
||
c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
|
||
c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
|
||
c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
|
||
c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
|
||
c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
|
||
c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
|
||
c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
|
||
c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
|
||
c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
|
||
c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];
|
||
|
||
h = c8 ^ ((c2 << 1) | (c3 >>> 31));
|
||
l = c9 ^ ((c3 << 1) | (c2 >>> 31));
|
||
s[0] ^= h;
|
||
s[1] ^= l;
|
||
s[10] ^= h;
|
||
s[11] ^= l;
|
||
s[20] ^= h;
|
||
s[21] ^= l;
|
||
s[30] ^= h;
|
||
s[31] ^= l;
|
||
s[40] ^= h;
|
||
s[41] ^= l;
|
||
h = c0 ^ ((c4 << 1) | (c5 >>> 31));
|
||
l = c1 ^ ((c5 << 1) | (c4 >>> 31));
|
||
s[2] ^= h;
|
||
s[3] ^= l;
|
||
s[12] ^= h;
|
||
s[13] ^= l;
|
||
s[22] ^= h;
|
||
s[23] ^= l;
|
||
s[32] ^= h;
|
||
s[33] ^= l;
|
||
s[42] ^= h;
|
||
s[43] ^= l;
|
||
h = c2 ^ ((c6 << 1) | (c7 >>> 31));
|
||
l = c3 ^ ((c7 << 1) | (c6 >>> 31));
|
||
s[4] ^= h;
|
||
s[5] ^= l;
|
||
s[14] ^= h;
|
||
s[15] ^= l;
|
||
s[24] ^= h;
|
||
s[25] ^= l;
|
||
s[34] ^= h;
|
||
s[35] ^= l;
|
||
s[44] ^= h;
|
||
s[45] ^= l;
|
||
h = c4 ^ ((c8 << 1) | (c9 >>> 31));
|
||
l = c5 ^ ((c9 << 1) | (c8 >>> 31));
|
||
s[6] ^= h;
|
||
s[7] ^= l;
|
||
s[16] ^= h;
|
||
s[17] ^= l;
|
||
s[26] ^= h;
|
||
s[27] ^= l;
|
||
s[36] ^= h;
|
||
s[37] ^= l;
|
||
s[46] ^= h;
|
||
s[47] ^= l;
|
||
h = c6 ^ ((c0 << 1) | (c1 >>> 31));
|
||
l = c7 ^ ((c1 << 1) | (c0 >>> 31));
|
||
s[8] ^= h;
|
||
s[9] ^= l;
|
||
s[18] ^= h;
|
||
s[19] ^= l;
|
||
s[28] ^= h;
|
||
s[29] ^= l;
|
||
s[38] ^= h;
|
||
s[39] ^= l;
|
||
s[48] ^= h;
|
||
s[49] ^= l;
|
||
|
||
b0 = s[0];
|
||
b1 = s[1];
|
||
b32 = (s[11] << 4) | (s[10] >>> 28);
|
||
b33 = (s[10] << 4) | (s[11] >>> 28);
|
||
b14 = (s[20] << 3) | (s[21] >>> 29);
|
||
b15 = (s[21] << 3) | (s[20] >>> 29);
|
||
b46 = (s[31] << 9) | (s[30] >>> 23);
|
||
b47 = (s[30] << 9) | (s[31] >>> 23);
|
||
b28 = (s[40] << 18) | (s[41] >>> 14);
|
||
b29 = (s[41] << 18) | (s[40] >>> 14);
|
||
b20 = (s[2] << 1) | (s[3] >>> 31);
|
||
b21 = (s[3] << 1) | (s[2] >>> 31);
|
||
b2 = (s[13] << 12) | (s[12] >>> 20);
|
||
b3 = (s[12] << 12) | (s[13] >>> 20);
|
||
b34 = (s[22] << 10) | (s[23] >>> 22);
|
||
b35 = (s[23] << 10) | (s[22] >>> 22);
|
||
b16 = (s[33] << 13) | (s[32] >>> 19);
|
||
b17 = (s[32] << 13) | (s[33] >>> 19);
|
||
b48 = (s[42] << 2) | (s[43] >>> 30);
|
||
b49 = (s[43] << 2) | (s[42] >>> 30);
|
||
b40 = (s[5] << 30) | (s[4] >>> 2);
|
||
b41 = (s[4] << 30) | (s[5] >>> 2);
|
||
b22 = (s[14] << 6) | (s[15] >>> 26);
|
||
b23 = (s[15] << 6) | (s[14] >>> 26);
|
||
b4 = (s[25] << 11) | (s[24] >>> 21);
|
||
b5 = (s[24] << 11) | (s[25] >>> 21);
|
||
b36 = (s[34] << 15) | (s[35] >>> 17);
|
||
b37 = (s[35] << 15) | (s[34] >>> 17);
|
||
b18 = (s[45] << 29) | (s[44] >>> 3);
|
||
b19 = (s[44] << 29) | (s[45] >>> 3);
|
||
b10 = (s[6] << 28) | (s[7] >>> 4);
|
||
b11 = (s[7] << 28) | (s[6] >>> 4);
|
||
b42 = (s[17] << 23) | (s[16] >>> 9);
|
||
b43 = (s[16] << 23) | (s[17] >>> 9);
|
||
b24 = (s[26] << 25) | (s[27] >>> 7);
|
||
b25 = (s[27] << 25) | (s[26] >>> 7);
|
||
b6 = (s[36] << 21) | (s[37] >>> 11);
|
||
b7 = (s[37] << 21) | (s[36] >>> 11);
|
||
b38 = (s[47] << 24) | (s[46] >>> 8);
|
||
b39 = (s[46] << 24) | (s[47] >>> 8);
|
||
b30 = (s[8] << 27) | (s[9] >>> 5);
|
||
b31 = (s[9] << 27) | (s[8] >>> 5);
|
||
b12 = (s[18] << 20) | (s[19] >>> 12);
|
||
b13 = (s[19] << 20) | (s[18] >>> 12);
|
||
b44 = (s[29] << 7) | (s[28] >>> 25);
|
||
b45 = (s[28] << 7) | (s[29] >>> 25);
|
||
b26 = (s[38] << 8) | (s[39] >>> 24);
|
||
b27 = (s[39] << 8) | (s[38] >>> 24);
|
||
b8 = (s[48] << 14) | (s[49] >>> 18);
|
||
b9 = (s[49] << 14) | (s[48] >>> 18);
|
||
|
||
s[0] = b0 ^ (~b2 & b4);
|
||
s[1] = b1 ^ (~b3 & b5);
|
||
s[10] = b10 ^ (~b12 & b14);
|
||
s[11] = b11 ^ (~b13 & b15);
|
||
s[20] = b20 ^ (~b22 & b24);
|
||
s[21] = b21 ^ (~b23 & b25);
|
||
s[30] = b30 ^ (~b32 & b34);
|
||
s[31] = b31 ^ (~b33 & b35);
|
||
s[40] = b40 ^ (~b42 & b44);
|
||
s[41] = b41 ^ (~b43 & b45);
|
||
s[2] = b2 ^ (~b4 & b6);
|
||
s[3] = b3 ^ (~b5 & b7);
|
||
s[12] = b12 ^ (~b14 & b16);
|
||
s[13] = b13 ^ (~b15 & b17);
|
||
s[22] = b22 ^ (~b24 & b26);
|
||
s[23] = b23 ^ (~b25 & b27);
|
||
s[32] = b32 ^ (~b34 & b36);
|
||
s[33] = b33 ^ (~b35 & b37);
|
||
s[42] = b42 ^ (~b44 & b46);
|
||
s[43] = b43 ^ (~b45 & b47);
|
||
s[4] = b4 ^ (~b6 & b8);
|
||
s[5] = b5 ^ (~b7 & b9);
|
||
s[14] = b14 ^ (~b16 & b18);
|
||
s[15] = b15 ^ (~b17 & b19);
|
||
s[24] = b24 ^ (~b26 & b28);
|
||
s[25] = b25 ^ (~b27 & b29);
|
||
s[34] = b34 ^ (~b36 & b38);
|
||
s[35] = b35 ^ (~b37 & b39);
|
||
s[44] = b44 ^ (~b46 & b48);
|
||
s[45] = b45 ^ (~b47 & b49);
|
||
s[6] = b6 ^ (~b8 & b0);
|
||
s[7] = b7 ^ (~b9 & b1);
|
||
s[16] = b16 ^ (~b18 & b10);
|
||
s[17] = b17 ^ (~b19 & b11);
|
||
s[26] = b26 ^ (~b28 & b20);
|
||
s[27] = b27 ^ (~b29 & b21);
|
||
s[36] = b36 ^ (~b38 & b30);
|
||
s[37] = b37 ^ (~b39 & b31);
|
||
s[46] = b46 ^ (~b48 & b40);
|
||
s[47] = b47 ^ (~b49 & b41);
|
||
s[8] = b8 ^ (~b0 & b2);
|
||
s[9] = b9 ^ (~b1 & b3);
|
||
s[18] = b18 ^ (~b10 & b12);
|
||
s[19] = b19 ^ (~b11 & b13);
|
||
s[28] = b28 ^ (~b20 & b22);
|
||
s[29] = b29 ^ (~b21 & b23);
|
||
s[38] = b38 ^ (~b30 & b32);
|
||
s[39] = b39 ^ (~b31 & b33);
|
||
s[48] = b48 ^ (~b40 & b42);
|
||
s[49] = b49 ^ (~b41 & b43);
|
||
|
||
s[0] ^= RC[n];
|
||
s[1] ^= RC[n + 1];
|
||
}
|
||
};
|
||
|
||
if (COMMON_JS) {
|
||
module.exports = methods;
|
||
} else {
|
||
for (var i = 0; i < methodNames.length; ++i) {
|
||
root[methodNames[i]] = methods[methodNames[i]];
|
||
}
|
||
}
|
||
})();
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26), __webpack_require__(6)))
|
||
|
||
/***/ }),
|
||
/* 22 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var json = typeof JSON !== 'undefined' ? JSON : __webpack_require__(23);
|
||
|
||
module.exports = function (obj, opts) {
|
||
if (!opts) opts = {};
|
||
if (typeof opts === 'function') opts = { cmp: opts };
|
||
var space = opts.space || '';
|
||
if (typeof space === 'number') space = Array(space+1).join(' ');
|
||
var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
|
||
var replacer = opts.replacer || function(key, value) { return value; };
|
||
|
||
var cmp = opts.cmp && (function (f) {
|
||
return function (node) {
|
||
return function (a, b) {
|
||
var aobj = { key: a, value: node[a] };
|
||
var bobj = { key: b, value: node[b] };
|
||
return f(aobj, bobj);
|
||
};
|
||
};
|
||
})(opts.cmp);
|
||
|
||
var seen = [];
|
||
return (function stringify (parent, key, node, level) {
|
||
var indent = space ? ('\n' + new Array(level + 1).join(space)) : '';
|
||
var colonSeparator = space ? ': ' : ':';
|
||
|
||
if (node && node.toJSON && typeof node.toJSON === 'function') {
|
||
node = node.toJSON();
|
||
}
|
||
|
||
node = replacer.call(parent, key, node);
|
||
|
||
if (node === undefined) {
|
||
return;
|
||
}
|
||
if (typeof node !== 'object' || node === null) {
|
||
return json.stringify(node);
|
||
}
|
||
if (isArray(node)) {
|
||
var out = [];
|
||
for (var i = 0; i < node.length; i++) {
|
||
var item = stringify(node, i, node[i], level+1) || json.stringify(null);
|
||
out.push(indent + space + item);
|
||
}
|
||
return '[' + out.join(',') + indent + ']';
|
||
}
|
||
else {
|
||
if (seen.indexOf(node) !== -1) {
|
||
if (cycles) return json.stringify('__cycle__');
|
||
throw new TypeError('Converting circular structure to JSON');
|
||
}
|
||
else seen.push(node);
|
||
|
||
var keys = objectKeys(node).sort(cmp && cmp(node));
|
||
var out = [];
|
||
for (var i = 0; i < keys.length; i++) {
|
||
var key = keys[i];
|
||
var value = stringify(node, key, node[key], level+1);
|
||
|
||
if(!value) continue;
|
||
|
||
var keyValue = json.stringify(key)
|
||
+ colonSeparator
|
||
+ value;
|
||
;
|
||
out.push(indent + space + keyValue);
|
||
}
|
||
seen.splice(seen.indexOf(node), 1);
|
||
return '{' + out.join(',') + indent + '}';
|
||
}
|
||
})({ '': obj }, '', obj, 0);
|
||
};
|
||
|
||
var isArray = Array.isArray || function (x) {
|
||
return {}.toString.call(x) === '[object Array]';
|
||
};
|
||
|
||
var objectKeys = Object.keys || function (obj) {
|
||
var has = Object.prototype.hasOwnProperty || function () { return true };
|
||
var keys = [];
|
||
for (var key in obj) {
|
||
if (has.call(obj, key)) keys.push(key);
|
||
}
|
||
return keys;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 23 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports.parse = __webpack_require__(24);
|
||
exports.stringify = __webpack_require__(25);
|
||
|
||
|
||
/***/ }),
|
||
/* 24 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var at, // The index of the current character
|
||
ch, // The current character
|
||
escapee = {
|
||
'"': '"',
|
||
'\\': '\\',
|
||
'/': '/',
|
||
b: '\b',
|
||
f: '\f',
|
||
n: '\n',
|
||
r: '\r',
|
||
t: '\t'
|
||
},
|
||
text,
|
||
|
||
error = function (m) {
|
||
// Call error when something is wrong.
|
||
throw {
|
||
name: 'SyntaxError',
|
||
message: m,
|
||
at: at,
|
||
text: text
|
||
};
|
||
},
|
||
|
||
next = function (c) {
|
||
// If a c parameter is provided, verify that it matches the current character.
|
||
if (c && c !== ch) {
|
||
error("Expected '" + c + "' instead of '" + ch + "'");
|
||
}
|
||
|
||
// Get the next character. When there are no more characters,
|
||
// return the empty string.
|
||
|
||
ch = text.charAt(at);
|
||
at += 1;
|
||
return ch;
|
||
},
|
||
|
||
number = function () {
|
||
// Parse a number value.
|
||
var number,
|
||
string = '';
|
||
|
||
if (ch === '-') {
|
||
string = '-';
|
||
next('-');
|
||
}
|
||
while (ch >= '0' && ch <= '9') {
|
||
string += ch;
|
||
next();
|
||
}
|
||
if (ch === '.') {
|
||
string += '.';
|
||
while (next() && ch >= '0' && ch <= '9') {
|
||
string += ch;
|
||
}
|
||
}
|
||
if (ch === 'e' || ch === 'E') {
|
||
string += ch;
|
||
next();
|
||
if (ch === '-' || ch === '+') {
|
||
string += ch;
|
||
next();
|
||
}
|
||
while (ch >= '0' && ch <= '9') {
|
||
string += ch;
|
||
next();
|
||
}
|
||
}
|
||
number = +string;
|
||
if (!isFinite(number)) {
|
||
error("Bad number");
|
||
} else {
|
||
return number;
|
||
}
|
||
},
|
||
|
||
string = function () {
|
||
// Parse a string value.
|
||
var hex,
|
||
i,
|
||
string = '',
|
||
uffff;
|
||
|
||
// When parsing for string values, we must look for " and \ characters.
|
||
if (ch === '"') {
|
||
while (next()) {
|
||
if (ch === '"') {
|
||
next();
|
||
return string;
|
||
} else if (ch === '\\') {
|
||
next();
|
||
if (ch === 'u') {
|
||
uffff = 0;
|
||
for (i = 0; i < 4; i += 1) {
|
||
hex = parseInt(next(), 16);
|
||
if (!isFinite(hex)) {
|
||
break;
|
||
}
|
||
uffff = uffff * 16 + hex;
|
||
}
|
||
string += String.fromCharCode(uffff);
|
||
} else if (typeof escapee[ch] === 'string') {
|
||
string += escapee[ch];
|
||
} else {
|
||
break;
|
||
}
|
||
} else {
|
||
string += ch;
|
||
}
|
||
}
|
||
}
|
||
error("Bad string");
|
||
},
|
||
|
||
white = function () {
|
||
|
||
// Skip whitespace.
|
||
|
||
while (ch && ch <= ' ') {
|
||
next();
|
||
}
|
||
},
|
||
|
||
word = function () {
|
||
|
||
// true, false, or null.
|
||
|
||
switch (ch) {
|
||
case 't':
|
||
next('t');
|
||
next('r');
|
||
next('u');
|
||
next('e');
|
||
return true;
|
||
case 'f':
|
||
next('f');
|
||
next('a');
|
||
next('l');
|
||
next('s');
|
||
next('e');
|
||
return false;
|
||
case 'n':
|
||
next('n');
|
||
next('u');
|
||
next('l');
|
||
next('l');
|
||
return null;
|
||
}
|
||
error("Unexpected '" + ch + "'");
|
||
},
|
||
|
||
value, // Place holder for the value function.
|
||
|
||
array = function () {
|
||
|
||
// Parse an array value.
|
||
|
||
var array = [];
|
||
|
||
if (ch === '[') {
|
||
next('[');
|
||
white();
|
||
if (ch === ']') {
|
||
next(']');
|
||
return array; // empty array
|
||
}
|
||
while (ch) {
|
||
array.push(value());
|
||
white();
|
||
if (ch === ']') {
|
||
next(']');
|
||
return array;
|
||
}
|
||
next(',');
|
||
white();
|
||
}
|
||
}
|
||
error("Bad array");
|
||
},
|
||
|
||
object = function () {
|
||
|
||
// Parse an object value.
|
||
|
||
var key,
|
||
object = {};
|
||
|
||
if (ch === '{') {
|
||
next('{');
|
||
white();
|
||
if (ch === '}') {
|
||
next('}');
|
||
return object; // empty object
|
||
}
|
||
while (ch) {
|
||
key = string();
|
||
white();
|
||
next(':');
|
||
if (Object.hasOwnProperty.call(object, key)) {
|
||
error('Duplicate key "' + key + '"');
|
||
}
|
||
object[key] = value();
|
||
white();
|
||
if (ch === '}') {
|
||
next('}');
|
||
return object;
|
||
}
|
||
next(',');
|
||
white();
|
||
}
|
||
}
|
||
error("Bad object");
|
||
};
|
||
|
||
value = function () {
|
||
|
||
// Parse a JSON value. It could be an object, an array, a string, a number,
|
||
// or a word.
|
||
|
||
white();
|
||
switch (ch) {
|
||
case '{':
|
||
return object();
|
||
case '[':
|
||
return array();
|
||
case '"':
|
||
return string();
|
||
case '-':
|
||
return number();
|
||
default:
|
||
return ch >= '0' && ch <= '9' ? number() : word();
|
||
}
|
||
};
|
||
|
||
// Return the json_parse function. It will have access to all of the above
|
||
// functions and variables.
|
||
|
||
module.exports = function (source, reviver) {
|
||
var result;
|
||
|
||
text = source;
|
||
at = 0;
|
||
ch = ' ';
|
||
result = value();
|
||
white();
|
||
if (ch) {
|
||
error("Syntax error");
|
||
}
|
||
|
||
// If there is a reviver function, we recursively walk the new structure,
|
||
// passing each name/value pair to the reviver function for possible
|
||
// transformation, starting with a temporary root object that holds the result
|
||
// in an empty key. If there is not a reviver function, we simply return the
|
||
// result.
|
||
|
||
return typeof reviver === 'function' ? (function walk(holder, key) {
|
||
var k, v, value = holder[key];
|
||
if (value && typeof value === 'object') {
|
||
for (k in value) {
|
||
if (Object.prototype.hasOwnProperty.call(value, k)) {
|
||
v = walk(value, k);
|
||
if (v !== undefined) {
|
||
value[k] = v;
|
||
} else {
|
||
delete value[k];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return reviver.call(holder, key, value);
|
||
}({'': result}, '')) : result;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 25 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
||
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
||
gap,
|
||
indent,
|
||
meta = { // table of character substitutions
|
||
'\b': '\\b',
|
||
'\t': '\\t',
|
||
'\n': '\\n',
|
||
'\f': '\\f',
|
||
'\r': '\\r',
|
||
'"' : '\\"',
|
||
'\\': '\\\\'
|
||
},
|
||
rep;
|
||
|
||
function quote(string) {
|
||
// If the string contains no control characters, no quote characters, and no
|
||
// backslash characters, then we can safely slap some quotes around it.
|
||
// Otherwise we must also replace the offending characters with safe escape
|
||
// sequences.
|
||
|
||
escapable.lastIndex = 0;
|
||
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
|
||
var c = meta[a];
|
||
return typeof c === 'string' ? c :
|
||
'\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
|
||
}) + '"' : '"' + string + '"';
|
||
}
|
||
|
||
function str(key, holder) {
|
||
// Produce a string from holder[key].
|
||
var i, // The loop counter.
|
||
k, // The member key.
|
||
v, // The member value.
|
||
length,
|
||
mind = gap,
|
||
partial,
|
||
value = holder[key];
|
||
|
||
// If the value has a toJSON method, call it to obtain a replacement value.
|
||
if (value && typeof value === 'object' &&
|
||
typeof value.toJSON === 'function') {
|
||
value = value.toJSON(key);
|
||
}
|
||
|
||
// If we were called with a replacer function, then call the replacer to
|
||
// obtain a replacement value.
|
||
if (typeof rep === 'function') {
|
||
value = rep.call(holder, key, value);
|
||
}
|
||
|
||
// What happens next depends on the value's type.
|
||
switch (typeof value) {
|
||
case 'string':
|
||
return quote(value);
|
||
|
||
case 'number':
|
||
// JSON numbers must be finite. Encode non-finite numbers as null.
|
||
return isFinite(value) ? String(value) : 'null';
|
||
|
||
case 'boolean':
|
||
case 'null':
|
||
// If the value is a boolean or null, convert it to a string. Note:
|
||
// typeof null does not produce 'null'. The case is included here in
|
||
// the remote chance that this gets fixed someday.
|
||
return String(value);
|
||
|
||
case 'object':
|
||
if (!value) return 'null';
|
||
gap += indent;
|
||
partial = [];
|
||
|
||
// Array.isArray
|
||
if (Object.prototype.toString.apply(value) === '[object Array]') {
|
||
length = value.length;
|
||
for (i = 0; i < length; i += 1) {
|
||
partial[i] = str(i, value) || 'null';
|
||
}
|
||
|
||
// Join all of the elements together, separated with commas, and
|
||
// wrap them in brackets.
|
||
v = partial.length === 0 ? '[]' : gap ?
|
||
'[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
|
||
'[' + partial.join(',') + ']';
|
||
gap = mind;
|
||
return v;
|
||
}
|
||
|
||
// If the replacer is an array, use it to select the members to be
|
||
// stringified.
|
||
if (rep && typeof rep === 'object') {
|
||
length = rep.length;
|
||
for (i = 0; i < length; i += 1) {
|
||
k = rep[i];
|
||
if (typeof k === 'string') {
|
||
v = str(k, value);
|
||
if (v) {
|
||
partial.push(quote(k) + (gap ? ': ' : ':') + v);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
// Otherwise, iterate through all of the keys in the object.
|
||
for (k in value) {
|
||
if (Object.prototype.hasOwnProperty.call(value, k)) {
|
||
v = str(k, value);
|
||
if (v) {
|
||
partial.push(quote(k) + (gap ? ': ' : ':') + v);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Join all of the member texts together, separated with commas,
|
||
// and wrap them in braces.
|
||
|
||
v = partial.length === 0 ? '{}' : gap ?
|
||
'{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
|
||
'{' + partial.join(',') + '}';
|
||
gap = mind;
|
||
return v;
|
||
}
|
||
}
|
||
|
||
module.exports = function (value, replacer, space) {
|
||
var i;
|
||
gap = '';
|
||
indent = '';
|
||
|
||
// If the space parameter is a number, make an indent string containing that
|
||
// many spaces.
|
||
if (typeof space === 'number') {
|
||
for (i = 0; i < space; i += 1) {
|
||
indent += ' ';
|
||
}
|
||
}
|
||
// If the space parameter is a string, it will be used as the indent string.
|
||
else if (typeof space === 'string') {
|
||
indent = space;
|
||
}
|
||
|
||
// If there is a replacer, it must be a function or an array.
|
||
// Otherwise, throw an error.
|
||
rep = replacer;
|
||
if (replacer && typeof replacer !== 'function'
|
||
&& (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {
|
||
throw new Error('JSON.stringify');
|
||
}
|
||
|
||
// Make a fake root object containing our value under the key of ''.
|
||
// Return the result of stringifying the value.
|
||
return str('', {'': value});
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 26 */
|
||
/***/ (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; };
|
||
|
||
|
||
/***/ }),
|
||
/* 27 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
(function(nacl) {
|
||
'use strict';
|
||
|
||
// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.
|
||
// Public domain.
|
||
//
|
||
// Implementation derived from TweetNaCl version 20140427.
|
||
// See for details: http://tweetnacl.cr.yp.to/
|
||
|
||
var gf = function(init) {
|
||
var i, r = new Float64Array(16);
|
||
if (init) for (i = 0; i < init.length; i++) r[i] = init[i];
|
||
return r;
|
||
};
|
||
|
||
// Pluggable, initialized in high-level API below.
|
||
var randombytes = function(/* x, n */) { throw new Error('no PRNG'); };
|
||
|
||
var _0 = new Uint8Array(16);
|
||
var _9 = new Uint8Array(32); _9[0] = 9;
|
||
|
||
var gf0 = gf(),
|
||
gf1 = gf([1]),
|
||
_121665 = gf([0xdb41, 1]),
|
||
D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),
|
||
D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),
|
||
X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),
|
||
Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),
|
||
I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);
|
||
|
||
function ts64(x, i, h, l) {
|
||
x[i] = (h >> 24) & 0xff;
|
||
x[i+1] = (h >> 16) & 0xff;
|
||
x[i+2] = (h >> 8) & 0xff;
|
||
x[i+3] = h & 0xff;
|
||
x[i+4] = (l >> 24) & 0xff;
|
||
x[i+5] = (l >> 16) & 0xff;
|
||
x[i+6] = (l >> 8) & 0xff;
|
||
x[i+7] = l & 0xff;
|
||
}
|
||
|
||
function vn(x, xi, y, yi, n) {
|
||
var i,d = 0;
|
||
for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];
|
||
return (1 & ((d - 1) >>> 8)) - 1;
|
||
}
|
||
|
||
function crypto_verify_16(x, xi, y, yi) {
|
||
return vn(x,xi,y,yi,16);
|
||
}
|
||
|
||
function crypto_verify_32(x, xi, y, yi) {
|
||
return vn(x,xi,y,yi,32);
|
||
}
|
||
|
||
function core_salsa20(o, p, k, c) {
|
||
var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,
|
||
j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,
|
||
j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,
|
||
j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,
|
||
j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,
|
||
j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,
|
||
j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,
|
||
j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,
|
||
j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,
|
||
j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,
|
||
j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,
|
||
j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,
|
||
j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,
|
||
j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,
|
||
j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,
|
||
j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;
|
||
|
||
var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,
|
||
x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,
|
||
x15 = j15, u;
|
||
|
||
for (var i = 0; i < 20; i += 2) {
|
||
u = x0 + x12 | 0;
|
||
x4 ^= u<<7 | u>>>(32-7);
|
||
u = x4 + x0 | 0;
|
||
x8 ^= u<<9 | u>>>(32-9);
|
||
u = x8 + x4 | 0;
|
||
x12 ^= u<<13 | u>>>(32-13);
|
||
u = x12 + x8 | 0;
|
||
x0 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x5 + x1 | 0;
|
||
x9 ^= u<<7 | u>>>(32-7);
|
||
u = x9 + x5 | 0;
|
||
x13 ^= u<<9 | u>>>(32-9);
|
||
u = x13 + x9 | 0;
|
||
x1 ^= u<<13 | u>>>(32-13);
|
||
u = x1 + x13 | 0;
|
||
x5 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x10 + x6 | 0;
|
||
x14 ^= u<<7 | u>>>(32-7);
|
||
u = x14 + x10 | 0;
|
||
x2 ^= u<<9 | u>>>(32-9);
|
||
u = x2 + x14 | 0;
|
||
x6 ^= u<<13 | u>>>(32-13);
|
||
u = x6 + x2 | 0;
|
||
x10 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x15 + x11 | 0;
|
||
x3 ^= u<<7 | u>>>(32-7);
|
||
u = x3 + x15 | 0;
|
||
x7 ^= u<<9 | u>>>(32-9);
|
||
u = x7 + x3 | 0;
|
||
x11 ^= u<<13 | u>>>(32-13);
|
||
u = x11 + x7 | 0;
|
||
x15 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x0 + x3 | 0;
|
||
x1 ^= u<<7 | u>>>(32-7);
|
||
u = x1 + x0 | 0;
|
||
x2 ^= u<<9 | u>>>(32-9);
|
||
u = x2 + x1 | 0;
|
||
x3 ^= u<<13 | u>>>(32-13);
|
||
u = x3 + x2 | 0;
|
||
x0 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x5 + x4 | 0;
|
||
x6 ^= u<<7 | u>>>(32-7);
|
||
u = x6 + x5 | 0;
|
||
x7 ^= u<<9 | u>>>(32-9);
|
||
u = x7 + x6 | 0;
|
||
x4 ^= u<<13 | u>>>(32-13);
|
||
u = x4 + x7 | 0;
|
||
x5 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x10 + x9 | 0;
|
||
x11 ^= u<<7 | u>>>(32-7);
|
||
u = x11 + x10 | 0;
|
||
x8 ^= u<<9 | u>>>(32-9);
|
||
u = x8 + x11 | 0;
|
||
x9 ^= u<<13 | u>>>(32-13);
|
||
u = x9 + x8 | 0;
|
||
x10 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x15 + x14 | 0;
|
||
x12 ^= u<<7 | u>>>(32-7);
|
||
u = x12 + x15 | 0;
|
||
x13 ^= u<<9 | u>>>(32-9);
|
||
u = x13 + x12 | 0;
|
||
x14 ^= u<<13 | u>>>(32-13);
|
||
u = x14 + x13 | 0;
|
||
x15 ^= u<<18 | u>>>(32-18);
|
||
}
|
||
x0 = x0 + j0 | 0;
|
||
x1 = x1 + j1 | 0;
|
||
x2 = x2 + j2 | 0;
|
||
x3 = x3 + j3 | 0;
|
||
x4 = x4 + j4 | 0;
|
||
x5 = x5 + j5 | 0;
|
||
x6 = x6 + j6 | 0;
|
||
x7 = x7 + j7 | 0;
|
||
x8 = x8 + j8 | 0;
|
||
x9 = x9 + j9 | 0;
|
||
x10 = x10 + j10 | 0;
|
||
x11 = x11 + j11 | 0;
|
||
x12 = x12 + j12 | 0;
|
||
x13 = x13 + j13 | 0;
|
||
x14 = x14 + j14 | 0;
|
||
x15 = x15 + j15 | 0;
|
||
|
||
o[ 0] = x0 >>> 0 & 0xff;
|
||
o[ 1] = x0 >>> 8 & 0xff;
|
||
o[ 2] = x0 >>> 16 & 0xff;
|
||
o[ 3] = x0 >>> 24 & 0xff;
|
||
|
||
o[ 4] = x1 >>> 0 & 0xff;
|
||
o[ 5] = x1 >>> 8 & 0xff;
|
||
o[ 6] = x1 >>> 16 & 0xff;
|
||
o[ 7] = x1 >>> 24 & 0xff;
|
||
|
||
o[ 8] = x2 >>> 0 & 0xff;
|
||
o[ 9] = x2 >>> 8 & 0xff;
|
||
o[10] = x2 >>> 16 & 0xff;
|
||
o[11] = x2 >>> 24 & 0xff;
|
||
|
||
o[12] = x3 >>> 0 & 0xff;
|
||
o[13] = x3 >>> 8 & 0xff;
|
||
o[14] = x3 >>> 16 & 0xff;
|
||
o[15] = x3 >>> 24 & 0xff;
|
||
|
||
o[16] = x4 >>> 0 & 0xff;
|
||
o[17] = x4 >>> 8 & 0xff;
|
||
o[18] = x4 >>> 16 & 0xff;
|
||
o[19] = x4 >>> 24 & 0xff;
|
||
|
||
o[20] = x5 >>> 0 & 0xff;
|
||
o[21] = x5 >>> 8 & 0xff;
|
||
o[22] = x5 >>> 16 & 0xff;
|
||
o[23] = x5 >>> 24 & 0xff;
|
||
|
||
o[24] = x6 >>> 0 & 0xff;
|
||
o[25] = x6 >>> 8 & 0xff;
|
||
o[26] = x6 >>> 16 & 0xff;
|
||
o[27] = x6 >>> 24 & 0xff;
|
||
|
||
o[28] = x7 >>> 0 & 0xff;
|
||
o[29] = x7 >>> 8 & 0xff;
|
||
o[30] = x7 >>> 16 & 0xff;
|
||
o[31] = x7 >>> 24 & 0xff;
|
||
|
||
o[32] = x8 >>> 0 & 0xff;
|
||
o[33] = x8 >>> 8 & 0xff;
|
||
o[34] = x8 >>> 16 & 0xff;
|
||
o[35] = x8 >>> 24 & 0xff;
|
||
|
||
o[36] = x9 >>> 0 & 0xff;
|
||
o[37] = x9 >>> 8 & 0xff;
|
||
o[38] = x9 >>> 16 & 0xff;
|
||
o[39] = x9 >>> 24 & 0xff;
|
||
|
||
o[40] = x10 >>> 0 & 0xff;
|
||
o[41] = x10 >>> 8 & 0xff;
|
||
o[42] = x10 >>> 16 & 0xff;
|
||
o[43] = x10 >>> 24 & 0xff;
|
||
|
||
o[44] = x11 >>> 0 & 0xff;
|
||
o[45] = x11 >>> 8 & 0xff;
|
||
o[46] = x11 >>> 16 & 0xff;
|
||
o[47] = x11 >>> 24 & 0xff;
|
||
|
||
o[48] = x12 >>> 0 & 0xff;
|
||
o[49] = x12 >>> 8 & 0xff;
|
||
o[50] = x12 >>> 16 & 0xff;
|
||
o[51] = x12 >>> 24 & 0xff;
|
||
|
||
o[52] = x13 >>> 0 & 0xff;
|
||
o[53] = x13 >>> 8 & 0xff;
|
||
o[54] = x13 >>> 16 & 0xff;
|
||
o[55] = x13 >>> 24 & 0xff;
|
||
|
||
o[56] = x14 >>> 0 & 0xff;
|
||
o[57] = x14 >>> 8 & 0xff;
|
||
o[58] = x14 >>> 16 & 0xff;
|
||
o[59] = x14 >>> 24 & 0xff;
|
||
|
||
o[60] = x15 >>> 0 & 0xff;
|
||
o[61] = x15 >>> 8 & 0xff;
|
||
o[62] = x15 >>> 16 & 0xff;
|
||
o[63] = x15 >>> 24 & 0xff;
|
||
}
|
||
|
||
function core_hsalsa20(o,p,k,c) {
|
||
var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,
|
||
j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,
|
||
j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,
|
||
j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,
|
||
j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,
|
||
j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,
|
||
j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,
|
||
j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,
|
||
j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,
|
||
j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,
|
||
j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,
|
||
j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,
|
||
j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,
|
||
j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,
|
||
j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,
|
||
j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;
|
||
|
||
var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,
|
||
x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,
|
||
x15 = j15, u;
|
||
|
||
for (var i = 0; i < 20; i += 2) {
|
||
u = x0 + x12 | 0;
|
||
x4 ^= u<<7 | u>>>(32-7);
|
||
u = x4 + x0 | 0;
|
||
x8 ^= u<<9 | u>>>(32-9);
|
||
u = x8 + x4 | 0;
|
||
x12 ^= u<<13 | u>>>(32-13);
|
||
u = x12 + x8 | 0;
|
||
x0 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x5 + x1 | 0;
|
||
x9 ^= u<<7 | u>>>(32-7);
|
||
u = x9 + x5 | 0;
|
||
x13 ^= u<<9 | u>>>(32-9);
|
||
u = x13 + x9 | 0;
|
||
x1 ^= u<<13 | u>>>(32-13);
|
||
u = x1 + x13 | 0;
|
||
x5 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x10 + x6 | 0;
|
||
x14 ^= u<<7 | u>>>(32-7);
|
||
u = x14 + x10 | 0;
|
||
x2 ^= u<<9 | u>>>(32-9);
|
||
u = x2 + x14 | 0;
|
||
x6 ^= u<<13 | u>>>(32-13);
|
||
u = x6 + x2 | 0;
|
||
x10 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x15 + x11 | 0;
|
||
x3 ^= u<<7 | u>>>(32-7);
|
||
u = x3 + x15 | 0;
|
||
x7 ^= u<<9 | u>>>(32-9);
|
||
u = x7 + x3 | 0;
|
||
x11 ^= u<<13 | u>>>(32-13);
|
||
u = x11 + x7 | 0;
|
||
x15 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x0 + x3 | 0;
|
||
x1 ^= u<<7 | u>>>(32-7);
|
||
u = x1 + x0 | 0;
|
||
x2 ^= u<<9 | u>>>(32-9);
|
||
u = x2 + x1 | 0;
|
||
x3 ^= u<<13 | u>>>(32-13);
|
||
u = x3 + x2 | 0;
|
||
x0 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x5 + x4 | 0;
|
||
x6 ^= u<<7 | u>>>(32-7);
|
||
u = x6 + x5 | 0;
|
||
x7 ^= u<<9 | u>>>(32-9);
|
||
u = x7 + x6 | 0;
|
||
x4 ^= u<<13 | u>>>(32-13);
|
||
u = x4 + x7 | 0;
|
||
x5 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x10 + x9 | 0;
|
||
x11 ^= u<<7 | u>>>(32-7);
|
||
u = x11 + x10 | 0;
|
||
x8 ^= u<<9 | u>>>(32-9);
|
||
u = x8 + x11 | 0;
|
||
x9 ^= u<<13 | u>>>(32-13);
|
||
u = x9 + x8 | 0;
|
||
x10 ^= u<<18 | u>>>(32-18);
|
||
|
||
u = x15 + x14 | 0;
|
||
x12 ^= u<<7 | u>>>(32-7);
|
||
u = x12 + x15 | 0;
|
||
x13 ^= u<<9 | u>>>(32-9);
|
||
u = x13 + x12 | 0;
|
||
x14 ^= u<<13 | u>>>(32-13);
|
||
u = x14 + x13 | 0;
|
||
x15 ^= u<<18 | u>>>(32-18);
|
||
}
|
||
|
||
o[ 0] = x0 >>> 0 & 0xff;
|
||
o[ 1] = x0 >>> 8 & 0xff;
|
||
o[ 2] = x0 >>> 16 & 0xff;
|
||
o[ 3] = x0 >>> 24 & 0xff;
|
||
|
||
o[ 4] = x5 >>> 0 & 0xff;
|
||
o[ 5] = x5 >>> 8 & 0xff;
|
||
o[ 6] = x5 >>> 16 & 0xff;
|
||
o[ 7] = x5 >>> 24 & 0xff;
|
||
|
||
o[ 8] = x10 >>> 0 & 0xff;
|
||
o[ 9] = x10 >>> 8 & 0xff;
|
||
o[10] = x10 >>> 16 & 0xff;
|
||
o[11] = x10 >>> 24 & 0xff;
|
||
|
||
o[12] = x15 >>> 0 & 0xff;
|
||
o[13] = x15 >>> 8 & 0xff;
|
||
o[14] = x15 >>> 16 & 0xff;
|
||
o[15] = x15 >>> 24 & 0xff;
|
||
|
||
o[16] = x6 >>> 0 & 0xff;
|
||
o[17] = x6 >>> 8 & 0xff;
|
||
o[18] = x6 >>> 16 & 0xff;
|
||
o[19] = x6 >>> 24 & 0xff;
|
||
|
||
o[20] = x7 >>> 0 & 0xff;
|
||
o[21] = x7 >>> 8 & 0xff;
|
||
o[22] = x7 >>> 16 & 0xff;
|
||
o[23] = x7 >>> 24 & 0xff;
|
||
|
||
o[24] = x8 >>> 0 & 0xff;
|
||
o[25] = x8 >>> 8 & 0xff;
|
||
o[26] = x8 >>> 16 & 0xff;
|
||
o[27] = x8 >>> 24 & 0xff;
|
||
|
||
o[28] = x9 >>> 0 & 0xff;
|
||
o[29] = x9 >>> 8 & 0xff;
|
||
o[30] = x9 >>> 16 & 0xff;
|
||
o[31] = x9 >>> 24 & 0xff;
|
||
}
|
||
|
||
function crypto_core_salsa20(out,inp,k,c) {
|
||
core_salsa20(out,inp,k,c);
|
||
}
|
||
|
||
function crypto_core_hsalsa20(out,inp,k,c) {
|
||
core_hsalsa20(out,inp,k,c);
|
||
}
|
||
|
||
var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
|
||
// "expand 32-byte k"
|
||
|
||
function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {
|
||
var z = new Uint8Array(16), x = new Uint8Array(64);
|
||
var u, i;
|
||
for (i = 0; i < 16; i++) z[i] = 0;
|
||
for (i = 0; i < 8; i++) z[i] = n[i];
|
||
while (b >= 64) {
|
||
crypto_core_salsa20(x,z,k,sigma);
|
||
for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];
|
||
u = 1;
|
||
for (i = 8; i < 16; i++) {
|
||
u = u + (z[i] & 0xff) | 0;
|
||
z[i] = u & 0xff;
|
||
u >>>= 8;
|
||
}
|
||
b -= 64;
|
||
cpos += 64;
|
||
mpos += 64;
|
||
}
|
||
if (b > 0) {
|
||
crypto_core_salsa20(x,z,k,sigma);
|
||
for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
function crypto_stream_salsa20(c,cpos,b,n,k) {
|
||
var z = new Uint8Array(16), x = new Uint8Array(64);
|
||
var u, i;
|
||
for (i = 0; i < 16; i++) z[i] = 0;
|
||
for (i = 0; i < 8; i++) z[i] = n[i];
|
||
while (b >= 64) {
|
||
crypto_core_salsa20(x,z,k,sigma);
|
||
for (i = 0; i < 64; i++) c[cpos+i] = x[i];
|
||
u = 1;
|
||
for (i = 8; i < 16; i++) {
|
||
u = u + (z[i] & 0xff) | 0;
|
||
z[i] = u & 0xff;
|
||
u >>>= 8;
|
||
}
|
||
b -= 64;
|
||
cpos += 64;
|
||
}
|
||
if (b > 0) {
|
||
crypto_core_salsa20(x,z,k,sigma);
|
||
for (i = 0; i < b; i++) c[cpos+i] = x[i];
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
function crypto_stream(c,cpos,d,n,k) {
|
||
var s = new Uint8Array(32);
|
||
crypto_core_hsalsa20(s,n,k,sigma);
|
||
var sn = new Uint8Array(8);
|
||
for (var i = 0; i < 8; i++) sn[i] = n[i+16];
|
||
return crypto_stream_salsa20(c,cpos,d,sn,s);
|
||
}
|
||
|
||
function crypto_stream_xor(c,cpos,m,mpos,d,n,k) {
|
||
var s = new Uint8Array(32);
|
||
crypto_core_hsalsa20(s,n,k,sigma);
|
||
var sn = new Uint8Array(8);
|
||
for (var i = 0; i < 8; i++) sn[i] = n[i+16];
|
||
return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);
|
||
}
|
||
|
||
/*
|
||
* Port of Andrew Moon's Poly1305-donna-16. Public domain.
|
||
* https://github.com/floodyberry/poly1305-donna
|
||
*/
|
||
|
||
var poly1305 = function(key) {
|
||
this.buffer = new Uint8Array(16);
|
||
this.r = new Uint16Array(10);
|
||
this.h = new Uint16Array(10);
|
||
this.pad = new Uint16Array(8);
|
||
this.leftover = 0;
|
||
this.fin = 0;
|
||
|
||
var t0, t1, t2, t3, t4, t5, t6, t7;
|
||
|
||
t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;
|
||
t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;
|
||
t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;
|
||
t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;
|
||
t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;
|
||
this.r[5] = ((t4 >>> 1)) & 0x1ffe;
|
||
t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;
|
||
t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;
|
||
t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;
|
||
this.r[9] = ((t7 >>> 5)) & 0x007f;
|
||
|
||
this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;
|
||
this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;
|
||
this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;
|
||
this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;
|
||
this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;
|
||
this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;
|
||
this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;
|
||
this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;
|
||
};
|
||
|
||
poly1305.prototype.blocks = function(m, mpos, bytes) {
|
||
var hibit = this.fin ? 0 : (1 << 11);
|
||
var t0, t1, t2, t3, t4, t5, t6, t7, c;
|
||
var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;
|
||
|
||
var h0 = this.h[0],
|
||
h1 = this.h[1],
|
||
h2 = this.h[2],
|
||
h3 = this.h[3],
|
||
h4 = this.h[4],
|
||
h5 = this.h[5],
|
||
h6 = this.h[6],
|
||
h7 = this.h[7],
|
||
h8 = this.h[8],
|
||
h9 = this.h[9];
|
||
|
||
var r0 = this.r[0],
|
||
r1 = this.r[1],
|
||
r2 = this.r[2],
|
||
r3 = this.r[3],
|
||
r4 = this.r[4],
|
||
r5 = this.r[5],
|
||
r6 = this.r[6],
|
||
r7 = this.r[7],
|
||
r8 = this.r[8],
|
||
r9 = this.r[9];
|
||
|
||
while (bytes >= 16) {
|
||
t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;
|
||
t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;
|
||
t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;
|
||
t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;
|
||
t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;
|
||
h5 += ((t4 >>> 1)) & 0x1fff;
|
||
t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;
|
||
t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;
|
||
t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;
|
||
h9 += ((t7 >>> 5)) | hibit;
|
||
|
||
c = 0;
|
||
|
||
d0 = c;
|
||
d0 += h0 * r0;
|
||
d0 += h1 * (5 * r9);
|
||
d0 += h2 * (5 * r8);
|
||
d0 += h3 * (5 * r7);
|
||
d0 += h4 * (5 * r6);
|
||
c = (d0 >>> 13); d0 &= 0x1fff;
|
||
d0 += h5 * (5 * r5);
|
||
d0 += h6 * (5 * r4);
|
||
d0 += h7 * (5 * r3);
|
||
d0 += h8 * (5 * r2);
|
||
d0 += h9 * (5 * r1);
|
||
c += (d0 >>> 13); d0 &= 0x1fff;
|
||
|
||
d1 = c;
|
||
d1 += h0 * r1;
|
||
d1 += h1 * r0;
|
||
d1 += h2 * (5 * r9);
|
||
d1 += h3 * (5 * r8);
|
||
d1 += h4 * (5 * r7);
|
||
c = (d1 >>> 13); d1 &= 0x1fff;
|
||
d1 += h5 * (5 * r6);
|
||
d1 += h6 * (5 * r5);
|
||
d1 += h7 * (5 * r4);
|
||
d1 += h8 * (5 * r3);
|
||
d1 += h9 * (5 * r2);
|
||
c += (d1 >>> 13); d1 &= 0x1fff;
|
||
|
||
d2 = c;
|
||
d2 += h0 * r2;
|
||
d2 += h1 * r1;
|
||
d2 += h2 * r0;
|
||
d2 += h3 * (5 * r9);
|
||
d2 += h4 * (5 * r8);
|
||
c = (d2 >>> 13); d2 &= 0x1fff;
|
||
d2 += h5 * (5 * r7);
|
||
d2 += h6 * (5 * r6);
|
||
d2 += h7 * (5 * r5);
|
||
d2 += h8 * (5 * r4);
|
||
d2 += h9 * (5 * r3);
|
||
c += (d2 >>> 13); d2 &= 0x1fff;
|
||
|
||
d3 = c;
|
||
d3 += h0 * r3;
|
||
d3 += h1 * r2;
|
||
d3 += h2 * r1;
|
||
d3 += h3 * r0;
|
||
d3 += h4 * (5 * r9);
|
||
c = (d3 >>> 13); d3 &= 0x1fff;
|
||
d3 += h5 * (5 * r8);
|
||
d3 += h6 * (5 * r7);
|
||
d3 += h7 * (5 * r6);
|
||
d3 += h8 * (5 * r5);
|
||
d3 += h9 * (5 * r4);
|
||
c += (d3 >>> 13); d3 &= 0x1fff;
|
||
|
||
d4 = c;
|
||
d4 += h0 * r4;
|
||
d4 += h1 * r3;
|
||
d4 += h2 * r2;
|
||
d4 += h3 * r1;
|
||
d4 += h4 * r0;
|
||
c = (d4 >>> 13); d4 &= 0x1fff;
|
||
d4 += h5 * (5 * r9);
|
||
d4 += h6 * (5 * r8);
|
||
d4 += h7 * (5 * r7);
|
||
d4 += h8 * (5 * r6);
|
||
d4 += h9 * (5 * r5);
|
||
c += (d4 >>> 13); d4 &= 0x1fff;
|
||
|
||
d5 = c;
|
||
d5 += h0 * r5;
|
||
d5 += h1 * r4;
|
||
d5 += h2 * r3;
|
||
d5 += h3 * r2;
|
||
d5 += h4 * r1;
|
||
c = (d5 >>> 13); d5 &= 0x1fff;
|
||
d5 += h5 * r0;
|
||
d5 += h6 * (5 * r9);
|
||
d5 += h7 * (5 * r8);
|
||
d5 += h8 * (5 * r7);
|
||
d5 += h9 * (5 * r6);
|
||
c += (d5 >>> 13); d5 &= 0x1fff;
|
||
|
||
d6 = c;
|
||
d6 += h0 * r6;
|
||
d6 += h1 * r5;
|
||
d6 += h2 * r4;
|
||
d6 += h3 * r3;
|
||
d6 += h4 * r2;
|
||
c = (d6 >>> 13); d6 &= 0x1fff;
|
||
d6 += h5 * r1;
|
||
d6 += h6 * r0;
|
||
d6 += h7 * (5 * r9);
|
||
d6 += h8 * (5 * r8);
|
||
d6 += h9 * (5 * r7);
|
||
c += (d6 >>> 13); d6 &= 0x1fff;
|
||
|
||
d7 = c;
|
||
d7 += h0 * r7;
|
||
d7 += h1 * r6;
|
||
d7 += h2 * r5;
|
||
d7 += h3 * r4;
|
||
d7 += h4 * r3;
|
||
c = (d7 >>> 13); d7 &= 0x1fff;
|
||
d7 += h5 * r2;
|
||
d7 += h6 * r1;
|
||
d7 += h7 * r0;
|
||
d7 += h8 * (5 * r9);
|
||
d7 += h9 * (5 * r8);
|
||
c += (d7 >>> 13); d7 &= 0x1fff;
|
||
|
||
d8 = c;
|
||
d8 += h0 * r8;
|
||
d8 += h1 * r7;
|
||
d8 += h2 * r6;
|
||
d8 += h3 * r5;
|
||
d8 += h4 * r4;
|
||
c = (d8 >>> 13); d8 &= 0x1fff;
|
||
d8 += h5 * r3;
|
||
d8 += h6 * r2;
|
||
d8 += h7 * r1;
|
||
d8 += h8 * r0;
|
||
d8 += h9 * (5 * r9);
|
||
c += (d8 >>> 13); d8 &= 0x1fff;
|
||
|
||
d9 = c;
|
||
d9 += h0 * r9;
|
||
d9 += h1 * r8;
|
||
d9 += h2 * r7;
|
||
d9 += h3 * r6;
|
||
d9 += h4 * r5;
|
||
c = (d9 >>> 13); d9 &= 0x1fff;
|
||
d9 += h5 * r4;
|
||
d9 += h6 * r3;
|
||
d9 += h7 * r2;
|
||
d9 += h8 * r1;
|
||
d9 += h9 * r0;
|
||
c += (d9 >>> 13); d9 &= 0x1fff;
|
||
|
||
c = (((c << 2) + c)) | 0;
|
||
c = (c + d0) | 0;
|
||
d0 = c & 0x1fff;
|
||
c = (c >>> 13);
|
||
d1 += c;
|
||
|
||
h0 = d0;
|
||
h1 = d1;
|
||
h2 = d2;
|
||
h3 = d3;
|
||
h4 = d4;
|
||
h5 = d5;
|
||
h6 = d6;
|
||
h7 = d7;
|
||
h8 = d8;
|
||
h9 = d9;
|
||
|
||
mpos += 16;
|
||
bytes -= 16;
|
||
}
|
||
this.h[0] = h0;
|
||
this.h[1] = h1;
|
||
this.h[2] = h2;
|
||
this.h[3] = h3;
|
||
this.h[4] = h4;
|
||
this.h[5] = h5;
|
||
this.h[6] = h6;
|
||
this.h[7] = h7;
|
||
this.h[8] = h8;
|
||
this.h[9] = h9;
|
||
};
|
||
|
||
poly1305.prototype.finish = function(mac, macpos) {
|
||
var g = new Uint16Array(10);
|
||
var c, mask, f, i;
|
||
|
||
if (this.leftover) {
|
||
i = this.leftover;
|
||
this.buffer[i++] = 1;
|
||
for (; i < 16; i++) this.buffer[i] = 0;
|
||
this.fin = 1;
|
||
this.blocks(this.buffer, 0, 16);
|
||
}
|
||
|
||
c = this.h[1] >>> 13;
|
||
this.h[1] &= 0x1fff;
|
||
for (i = 2; i < 10; i++) {
|
||
this.h[i] += c;
|
||
c = this.h[i] >>> 13;
|
||
this.h[i] &= 0x1fff;
|
||
}
|
||
this.h[0] += (c * 5);
|
||
c = this.h[0] >>> 13;
|
||
this.h[0] &= 0x1fff;
|
||
this.h[1] += c;
|
||
c = this.h[1] >>> 13;
|
||
this.h[1] &= 0x1fff;
|
||
this.h[2] += c;
|
||
|
||
g[0] = this.h[0] + 5;
|
||
c = g[0] >>> 13;
|
||
g[0] &= 0x1fff;
|
||
for (i = 1; i < 10; i++) {
|
||
g[i] = this.h[i] + c;
|
||
c = g[i] >>> 13;
|
||
g[i] &= 0x1fff;
|
||
}
|
||
g[9] -= (1 << 13);
|
||
|
||
mask = (c ^ 1) - 1;
|
||
for (i = 0; i < 10; i++) g[i] &= mask;
|
||
mask = ~mask;
|
||
for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];
|
||
|
||
this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;
|
||
this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;
|
||
this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;
|
||
this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;
|
||
this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;
|
||
this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;
|
||
this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;
|
||
this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;
|
||
|
||
f = this.h[0] + this.pad[0];
|
||
this.h[0] = f & 0xffff;
|
||
for (i = 1; i < 8; i++) {
|
||
f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;
|
||
this.h[i] = f & 0xffff;
|
||
}
|
||
|
||
mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;
|
||
mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;
|
||
mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;
|
||
mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;
|
||
mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;
|
||
mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;
|
||
mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;
|
||
mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;
|
||
mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;
|
||
mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;
|
||
mac[macpos+10] = (this.h[5] >>> 0) & 0xff;
|
||
mac[macpos+11] = (this.h[5] >>> 8) & 0xff;
|
||
mac[macpos+12] = (this.h[6] >>> 0) & 0xff;
|
||
mac[macpos+13] = (this.h[6] >>> 8) & 0xff;
|
||
mac[macpos+14] = (this.h[7] >>> 0) & 0xff;
|
||
mac[macpos+15] = (this.h[7] >>> 8) & 0xff;
|
||
};
|
||
|
||
poly1305.prototype.update = function(m, mpos, bytes) {
|
||
var i, want;
|
||
|
||
if (this.leftover) {
|
||
want = (16 - this.leftover);
|
||
if (want > bytes)
|
||
want = bytes;
|
||
for (i = 0; i < want; i++)
|
||
this.buffer[this.leftover + i] = m[mpos+i];
|
||
bytes -= want;
|
||
mpos += want;
|
||
this.leftover += want;
|
||
if (this.leftover < 16)
|
||
return;
|
||
this.blocks(this.buffer, 0, 16);
|
||
this.leftover = 0;
|
||
}
|
||
|
||
if (bytes >= 16) {
|
||
want = bytes - (bytes % 16);
|
||
this.blocks(m, mpos, want);
|
||
mpos += want;
|
||
bytes -= want;
|
||
}
|
||
|
||
if (bytes) {
|
||
for (i = 0; i < bytes; i++)
|
||
this.buffer[this.leftover + i] = m[mpos+i];
|
||
this.leftover += bytes;
|
||
}
|
||
};
|
||
|
||
function crypto_onetimeauth(out, outpos, m, mpos, n, k) {
|
||
var s = new poly1305(k);
|
||
s.update(m, mpos, n);
|
||
s.finish(out, outpos);
|
||
return 0;
|
||
}
|
||
|
||
function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {
|
||
var x = new Uint8Array(16);
|
||
crypto_onetimeauth(x,0,m,mpos,n,k);
|
||
return crypto_verify_16(h,hpos,x,0);
|
||
}
|
||
|
||
function crypto_secretbox(c,m,d,n,k) {
|
||
var i;
|
||
if (d < 32) return -1;
|
||
crypto_stream_xor(c,0,m,0,d,n,k);
|
||
crypto_onetimeauth(c, 16, c, 32, d - 32, c);
|
||
for (i = 0; i < 16; i++) c[i] = 0;
|
||
return 0;
|
||
}
|
||
|
||
function crypto_secretbox_open(m,c,d,n,k) {
|
||
var i;
|
||
var x = new Uint8Array(32);
|
||
if (d < 32) return -1;
|
||
crypto_stream(x,0,32,n,k);
|
||
if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;
|
||
crypto_stream_xor(m,0,c,0,d,n,k);
|
||
for (i = 0; i < 32; i++) m[i] = 0;
|
||
return 0;
|
||
}
|
||
|
||
function set25519(r, a) {
|
||
var i;
|
||
for (i = 0; i < 16; i++) r[i] = a[i]|0;
|
||
}
|
||
|
||
function car25519(o) {
|
||
var i, v, c = 1;
|
||
for (i = 0; i < 16; i++) {
|
||
v = o[i] + c + 65535;
|
||
c = Math.floor(v / 65536);
|
||
o[i] = v - c * 65536;
|
||
}
|
||
o[0] += c-1 + 37 * (c-1);
|
||
}
|
||
|
||
function sel25519(p, q, b) {
|
||
var t, c = ~(b-1);
|
||
for (var i = 0; i < 16; i++) {
|
||
t = c & (p[i] ^ q[i]);
|
||
p[i] ^= t;
|
||
q[i] ^= t;
|
||
}
|
||
}
|
||
|
||
function pack25519(o, n) {
|
||
var i, j, b;
|
||
var m = gf(), t = gf();
|
||
for (i = 0; i < 16; i++) t[i] = n[i];
|
||
car25519(t);
|
||
car25519(t);
|
||
car25519(t);
|
||
for (j = 0; j < 2; j++) {
|
||
m[0] = t[0] - 0xffed;
|
||
for (i = 1; i < 15; i++) {
|
||
m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);
|
||
m[i-1] &= 0xffff;
|
||
}
|
||
m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);
|
||
b = (m[15]>>16) & 1;
|
||
m[14] &= 0xffff;
|
||
sel25519(t, m, 1-b);
|
||
}
|
||
for (i = 0; i < 16; i++) {
|
||
o[2*i] = t[i] & 0xff;
|
||
o[2*i+1] = t[i]>>8;
|
||
}
|
||
}
|
||
|
||
function neq25519(a, b) {
|
||
var c = new Uint8Array(32), d = new Uint8Array(32);
|
||
pack25519(c, a);
|
||
pack25519(d, b);
|
||
return crypto_verify_32(c, 0, d, 0);
|
||
}
|
||
|
||
function par25519(a) {
|
||
var d = new Uint8Array(32);
|
||
pack25519(d, a);
|
||
return d[0] & 1;
|
||
}
|
||
|
||
function unpack25519(o, n) {
|
||
var i;
|
||
for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);
|
||
o[15] &= 0x7fff;
|
||
}
|
||
|
||
function A(o, a, b) {
|
||
for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];
|
||
}
|
||
|
||
function Z(o, a, b) {
|
||
for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];
|
||
}
|
||
|
||
function M(o, a, b) {
|
||
var v, c,
|
||
t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,
|
||
t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,
|
||
t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,
|
||
t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,
|
||
b0 = b[0],
|
||
b1 = b[1],
|
||
b2 = b[2],
|
||
b3 = b[3],
|
||
b4 = b[4],
|
||
b5 = b[5],
|
||
b6 = b[6],
|
||
b7 = b[7],
|
||
b8 = b[8],
|
||
b9 = b[9],
|
||
b10 = b[10],
|
||
b11 = b[11],
|
||
b12 = b[12],
|
||
b13 = b[13],
|
||
b14 = b[14],
|
||
b15 = b[15];
|
||
|
||
v = a[0];
|
||
t0 += v * b0;
|
||
t1 += v * b1;
|
||
t2 += v * b2;
|
||
t3 += v * b3;
|
||
t4 += v * b4;
|
||
t5 += v * b5;
|
||
t6 += v * b6;
|
||
t7 += v * b7;
|
||
t8 += v * b8;
|
||
t9 += v * b9;
|
||
t10 += v * b10;
|
||
t11 += v * b11;
|
||
t12 += v * b12;
|
||
t13 += v * b13;
|
||
t14 += v * b14;
|
||
t15 += v * b15;
|
||
v = a[1];
|
||
t1 += v * b0;
|
||
t2 += v * b1;
|
||
t3 += v * b2;
|
||
t4 += v * b3;
|
||
t5 += v * b4;
|
||
t6 += v * b5;
|
||
t7 += v * b6;
|
||
t8 += v * b7;
|
||
t9 += v * b8;
|
||
t10 += v * b9;
|
||
t11 += v * b10;
|
||
t12 += v * b11;
|
||
t13 += v * b12;
|
||
t14 += v * b13;
|
||
t15 += v * b14;
|
||
t16 += v * b15;
|
||
v = a[2];
|
||
t2 += v * b0;
|
||
t3 += v * b1;
|
||
t4 += v * b2;
|
||
t5 += v * b3;
|
||
t6 += v * b4;
|
||
t7 += v * b5;
|
||
t8 += v * b6;
|
||
t9 += v * b7;
|
||
t10 += v * b8;
|
||
t11 += v * b9;
|
||
t12 += v * b10;
|
||
t13 += v * b11;
|
||
t14 += v * b12;
|
||
t15 += v * b13;
|
||
t16 += v * b14;
|
||
t17 += v * b15;
|
||
v = a[3];
|
||
t3 += v * b0;
|
||
t4 += v * b1;
|
||
t5 += v * b2;
|
||
t6 += v * b3;
|
||
t7 += v * b4;
|
||
t8 += v * b5;
|
||
t9 += v * b6;
|
||
t10 += v * b7;
|
||
t11 += v * b8;
|
||
t12 += v * b9;
|
||
t13 += v * b10;
|
||
t14 += v * b11;
|
||
t15 += v * b12;
|
||
t16 += v * b13;
|
||
t17 += v * b14;
|
||
t18 += v * b15;
|
||
v = a[4];
|
||
t4 += v * b0;
|
||
t5 += v * b1;
|
||
t6 += v * b2;
|
||
t7 += v * b3;
|
||
t8 += v * b4;
|
||
t9 += v * b5;
|
||
t10 += v * b6;
|
||
t11 += v * b7;
|
||
t12 += v * b8;
|
||
t13 += v * b9;
|
||
t14 += v * b10;
|
||
t15 += v * b11;
|
||
t16 += v * b12;
|
||
t17 += v * b13;
|
||
t18 += v * b14;
|
||
t19 += v * b15;
|
||
v = a[5];
|
||
t5 += v * b0;
|
||
t6 += v * b1;
|
||
t7 += v * b2;
|
||
t8 += v * b3;
|
||
t9 += v * b4;
|
||
t10 += v * b5;
|
||
t11 += v * b6;
|
||
t12 += v * b7;
|
||
t13 += v * b8;
|
||
t14 += v * b9;
|
||
t15 += v * b10;
|
||
t16 += v * b11;
|
||
t17 += v * b12;
|
||
t18 += v * b13;
|
||
t19 += v * b14;
|
||
t20 += v * b15;
|
||
v = a[6];
|
||
t6 += v * b0;
|
||
t7 += v * b1;
|
||
t8 += v * b2;
|
||
t9 += v * b3;
|
||
t10 += v * b4;
|
||
t11 += v * b5;
|
||
t12 += v * b6;
|
||
t13 += v * b7;
|
||
t14 += v * b8;
|
||
t15 += v * b9;
|
||
t16 += v * b10;
|
||
t17 += v * b11;
|
||
t18 += v * b12;
|
||
t19 += v * b13;
|
||
t20 += v * b14;
|
||
t21 += v * b15;
|
||
v = a[7];
|
||
t7 += v * b0;
|
||
t8 += v * b1;
|
||
t9 += v * b2;
|
||
t10 += v * b3;
|
||
t11 += v * b4;
|
||
t12 += v * b5;
|
||
t13 += v * b6;
|
||
t14 += v * b7;
|
||
t15 += v * b8;
|
||
t16 += v * b9;
|
||
t17 += v * b10;
|
||
t18 += v * b11;
|
||
t19 += v * b12;
|
||
t20 += v * b13;
|
||
t21 += v * b14;
|
||
t22 += v * b15;
|
||
v = a[8];
|
||
t8 += v * b0;
|
||
t9 += v * b1;
|
||
t10 += v * b2;
|
||
t11 += v * b3;
|
||
t12 += v * b4;
|
||
t13 += v * b5;
|
||
t14 += v * b6;
|
||
t15 += v * b7;
|
||
t16 += v * b8;
|
||
t17 += v * b9;
|
||
t18 += v * b10;
|
||
t19 += v * b11;
|
||
t20 += v * b12;
|
||
t21 += v * b13;
|
||
t22 += v * b14;
|
||
t23 += v * b15;
|
||
v = a[9];
|
||
t9 += v * b0;
|
||
t10 += v * b1;
|
||
t11 += v * b2;
|
||
t12 += v * b3;
|
||
t13 += v * b4;
|
||
t14 += v * b5;
|
||
t15 += v * b6;
|
||
t16 += v * b7;
|
||
t17 += v * b8;
|
||
t18 += v * b9;
|
||
t19 += v * b10;
|
||
t20 += v * b11;
|
||
t21 += v * b12;
|
||
t22 += v * b13;
|
||
t23 += v * b14;
|
||
t24 += v * b15;
|
||
v = a[10];
|
||
t10 += v * b0;
|
||
t11 += v * b1;
|
||
t12 += v * b2;
|
||
t13 += v * b3;
|
||
t14 += v * b4;
|
||
t15 += v * b5;
|
||
t16 += v * b6;
|
||
t17 += v * b7;
|
||
t18 += v * b8;
|
||
t19 += v * b9;
|
||
t20 += v * b10;
|
||
t21 += v * b11;
|
||
t22 += v * b12;
|
||
t23 += v * b13;
|
||
t24 += v * b14;
|
||
t25 += v * b15;
|
||
v = a[11];
|
||
t11 += v * b0;
|
||
t12 += v * b1;
|
||
t13 += v * b2;
|
||
t14 += v * b3;
|
||
t15 += v * b4;
|
||
t16 += v * b5;
|
||
t17 += v * b6;
|
||
t18 += v * b7;
|
||
t19 += v * b8;
|
||
t20 += v * b9;
|
||
t21 += v * b10;
|
||
t22 += v * b11;
|
||
t23 += v * b12;
|
||
t24 += v * b13;
|
||
t25 += v * b14;
|
||
t26 += v * b15;
|
||
v = a[12];
|
||
t12 += v * b0;
|
||
t13 += v * b1;
|
||
t14 += v * b2;
|
||
t15 += v * b3;
|
||
t16 += v * b4;
|
||
t17 += v * b5;
|
||
t18 += v * b6;
|
||
t19 += v * b7;
|
||
t20 += v * b8;
|
||
t21 += v * b9;
|
||
t22 += v * b10;
|
||
t23 += v * b11;
|
||
t24 += v * b12;
|
||
t25 += v * b13;
|
||
t26 += v * b14;
|
||
t27 += v * b15;
|
||
v = a[13];
|
||
t13 += v * b0;
|
||
t14 += v * b1;
|
||
t15 += v * b2;
|
||
t16 += v * b3;
|
||
t17 += v * b4;
|
||
t18 += v * b5;
|
||
t19 += v * b6;
|
||
t20 += v * b7;
|
||
t21 += v * b8;
|
||
t22 += v * b9;
|
||
t23 += v * b10;
|
||
t24 += v * b11;
|
||
t25 += v * b12;
|
||
t26 += v * b13;
|
||
t27 += v * b14;
|
||
t28 += v * b15;
|
||
v = a[14];
|
||
t14 += v * b0;
|
||
t15 += v * b1;
|
||
t16 += v * b2;
|
||
t17 += v * b3;
|
||
t18 += v * b4;
|
||
t19 += v * b5;
|
||
t20 += v * b6;
|
||
t21 += v * b7;
|
||
t22 += v * b8;
|
||
t23 += v * b9;
|
||
t24 += v * b10;
|
||
t25 += v * b11;
|
||
t26 += v * b12;
|
||
t27 += v * b13;
|
||
t28 += v * b14;
|
||
t29 += v * b15;
|
||
v = a[15];
|
||
t15 += v * b0;
|
||
t16 += v * b1;
|
||
t17 += v * b2;
|
||
t18 += v * b3;
|
||
t19 += v * b4;
|
||
t20 += v * b5;
|
||
t21 += v * b6;
|
||
t22 += v * b7;
|
||
t23 += v * b8;
|
||
t24 += v * b9;
|
||
t25 += v * b10;
|
||
t26 += v * b11;
|
||
t27 += v * b12;
|
||
t28 += v * b13;
|
||
t29 += v * b14;
|
||
t30 += v * b15;
|
||
|
||
t0 += 38 * t16;
|
||
t1 += 38 * t17;
|
||
t2 += 38 * t18;
|
||
t3 += 38 * t19;
|
||
t4 += 38 * t20;
|
||
t5 += 38 * t21;
|
||
t6 += 38 * t22;
|
||
t7 += 38 * t23;
|
||
t8 += 38 * t24;
|
||
t9 += 38 * t25;
|
||
t10 += 38 * t26;
|
||
t11 += 38 * t27;
|
||
t12 += 38 * t28;
|
||
t13 += 38 * t29;
|
||
t14 += 38 * t30;
|
||
// t15 left as is
|
||
|
||
// first car
|
||
c = 1;
|
||
v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
|
||
v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
|
||
v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
|
||
v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
|
||
v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
|
||
v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
|
||
v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
|
||
v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
|
||
v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
|
||
v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
|
||
v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
|
||
v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
|
||
v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
|
||
v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
|
||
v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
|
||
v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
|
||
t0 += c-1 + 37 * (c-1);
|
||
|
||
// second car
|
||
c = 1;
|
||
v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;
|
||
v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;
|
||
v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;
|
||
v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;
|
||
v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;
|
||
v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;
|
||
v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;
|
||
v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;
|
||
v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;
|
||
v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;
|
||
v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;
|
||
v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;
|
||
v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;
|
||
v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;
|
||
v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;
|
||
v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;
|
||
t0 += c-1 + 37 * (c-1);
|
||
|
||
o[ 0] = t0;
|
||
o[ 1] = t1;
|
||
o[ 2] = t2;
|
||
o[ 3] = t3;
|
||
o[ 4] = t4;
|
||
o[ 5] = t5;
|
||
o[ 6] = t6;
|
||
o[ 7] = t7;
|
||
o[ 8] = t8;
|
||
o[ 9] = t9;
|
||
o[10] = t10;
|
||
o[11] = t11;
|
||
o[12] = t12;
|
||
o[13] = t13;
|
||
o[14] = t14;
|
||
o[15] = t15;
|
||
}
|
||
|
||
function S(o, a) {
|
||
M(o, a, a);
|
||
}
|
||
|
||
function inv25519(o, i) {
|
||
var c = gf();
|
||
var a;
|
||
for (a = 0; a < 16; a++) c[a] = i[a];
|
||
for (a = 253; a >= 0; a--) {
|
||
S(c, c);
|
||
if(a !== 2 && a !== 4) M(c, c, i);
|
||
}
|
||
for (a = 0; a < 16; a++) o[a] = c[a];
|
||
}
|
||
|
||
function pow2523(o, i) {
|
||
var c = gf();
|
||
var a;
|
||
for (a = 0; a < 16; a++) c[a] = i[a];
|
||
for (a = 250; a >= 0; a--) {
|
||
S(c, c);
|
||
if(a !== 1) M(c, c, i);
|
||
}
|
||
for (a = 0; a < 16; a++) o[a] = c[a];
|
||
}
|
||
|
||
function crypto_scalarmult(q, n, p) {
|
||
var z = new Uint8Array(32);
|
||
var x = new Float64Array(80), r, i;
|
||
var a = gf(), b = gf(), c = gf(),
|
||
d = gf(), e = gf(), f = gf();
|
||
for (i = 0; i < 31; i++) z[i] = n[i];
|
||
z[31]=(n[31]&127)|64;
|
||
z[0]&=248;
|
||
unpack25519(x,p);
|
||
for (i = 0; i < 16; i++) {
|
||
b[i]=x[i];
|
||
d[i]=a[i]=c[i]=0;
|
||
}
|
||
a[0]=d[0]=1;
|
||
for (i=254; i>=0; --i) {
|
||
r=(z[i>>>3]>>>(i&7))&1;
|
||
sel25519(a,b,r);
|
||
sel25519(c,d,r);
|
||
A(e,a,c);
|
||
Z(a,a,c);
|
||
A(c,b,d);
|
||
Z(b,b,d);
|
||
S(d,e);
|
||
S(f,a);
|
||
M(a,c,a);
|
||
M(c,b,e);
|
||
A(e,a,c);
|
||
Z(a,a,c);
|
||
S(b,a);
|
||
Z(c,d,f);
|
||
M(a,c,_121665);
|
||
A(a,a,d);
|
||
M(c,c,a);
|
||
M(a,d,f);
|
||
M(d,b,x);
|
||
S(b,e);
|
||
sel25519(a,b,r);
|
||
sel25519(c,d,r);
|
||
}
|
||
for (i = 0; i < 16; i++) {
|
||
x[i+16]=a[i];
|
||
x[i+32]=c[i];
|
||
x[i+48]=b[i];
|
||
x[i+64]=d[i];
|
||
}
|
||
var x32 = x.subarray(32);
|
||
var x16 = x.subarray(16);
|
||
inv25519(x32,x32);
|
||
M(x16,x16,x32);
|
||
pack25519(q,x16);
|
||
return 0;
|
||
}
|
||
|
||
function crypto_scalarmult_base(q, n) {
|
||
return crypto_scalarmult(q, n, _9);
|
||
}
|
||
|
||
function crypto_box_keypair(y, x) {
|
||
randombytes(x, 32);
|
||
return crypto_scalarmult_base(y, x);
|
||
}
|
||
|
||
function crypto_box_beforenm(k, y, x) {
|
||
var s = new Uint8Array(32);
|
||
crypto_scalarmult(s, x, y);
|
||
return crypto_core_hsalsa20(k, _0, s, sigma);
|
||
}
|
||
|
||
var crypto_box_afternm = crypto_secretbox;
|
||
var crypto_box_open_afternm = crypto_secretbox_open;
|
||
|
||
function crypto_box(c, m, d, n, y, x) {
|
||
var k = new Uint8Array(32);
|
||
crypto_box_beforenm(k, y, x);
|
||
return crypto_box_afternm(c, m, d, n, k);
|
||
}
|
||
|
||
function crypto_box_open(m, c, d, n, y, x) {
|
||
var k = new Uint8Array(32);
|
||
crypto_box_beforenm(k, y, x);
|
||
return crypto_box_open_afternm(m, c, d, n, k);
|
||
}
|
||
|
||
var K = [
|
||
0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
|
||
0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
|
||
0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
|
||
0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
|
||
0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
|
||
0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
|
||
0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
|
||
0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
|
||
0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
|
||
0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
|
||
0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
|
||
0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
|
||
0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
|
||
0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
|
||
0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
|
||
0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
|
||
0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
|
||
0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
|
||
0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
|
||
0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
|
||
0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
|
||
0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
|
||
0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
|
||
0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
|
||
0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
|
||
0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
|
||
0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
|
||
0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
|
||
0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
|
||
0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
|
||
0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
|
||
0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
|
||
0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
|
||
0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
|
||
0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
|
||
0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
|
||
0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
|
||
0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
|
||
0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
|
||
0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
|
||
];
|
||
|
||
function crypto_hashblocks_hl(hh, hl, m, n) {
|
||
var wh = new Int32Array(16), wl = new Int32Array(16),
|
||
bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,
|
||
bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,
|
||
th, tl, i, j, h, l, a, b, c, d;
|
||
|
||
var ah0 = hh[0],
|
||
ah1 = hh[1],
|
||
ah2 = hh[2],
|
||
ah3 = hh[3],
|
||
ah4 = hh[4],
|
||
ah5 = hh[5],
|
||
ah6 = hh[6],
|
||
ah7 = hh[7],
|
||
|
||
al0 = hl[0],
|
||
al1 = hl[1],
|
||
al2 = hl[2],
|
||
al3 = hl[3],
|
||
al4 = hl[4],
|
||
al5 = hl[5],
|
||
al6 = hl[6],
|
||
al7 = hl[7];
|
||
|
||
var pos = 0;
|
||
while (n >= 128) {
|
||
for (i = 0; i < 16; i++) {
|
||
j = 8 * i + pos;
|
||
wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];
|
||
wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];
|
||
}
|
||
for (i = 0; i < 80; i++) {
|
||
bh0 = ah0;
|
||
bh1 = ah1;
|
||
bh2 = ah2;
|
||
bh3 = ah3;
|
||
bh4 = ah4;
|
||
bh5 = ah5;
|
||
bh6 = ah6;
|
||
bh7 = ah7;
|
||
|
||
bl0 = al0;
|
||
bl1 = al1;
|
||
bl2 = al2;
|
||
bl3 = al3;
|
||
bl4 = al4;
|
||
bl5 = al5;
|
||
bl6 = al6;
|
||
bl7 = al7;
|
||
|
||
// add
|
||
h = ah7;
|
||
l = al7;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
// Sigma1
|
||
h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));
|
||
l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
// Ch
|
||
h = (ah4 & ah5) ^ (~ah4 & ah6);
|
||
l = (al4 & al5) ^ (~al4 & al6);
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
// K
|
||
h = K[i*2];
|
||
l = K[i*2+1];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
// w
|
||
h = wh[i%16];
|
||
l = wl[i%16];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
th = c & 0xffff | d << 16;
|
||
tl = a & 0xffff | b << 16;
|
||
|
||
// add
|
||
h = th;
|
||
l = tl;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
// Sigma0
|
||
h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));
|
||
l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
// Maj
|
||
h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);
|
||
l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
bh7 = (c & 0xffff) | (d << 16);
|
||
bl7 = (a & 0xffff) | (b << 16);
|
||
|
||
// add
|
||
h = bh3;
|
||
l = bl3;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
h = th;
|
||
l = tl;
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
bh3 = (c & 0xffff) | (d << 16);
|
||
bl3 = (a & 0xffff) | (b << 16);
|
||
|
||
ah1 = bh0;
|
||
ah2 = bh1;
|
||
ah3 = bh2;
|
||
ah4 = bh3;
|
||
ah5 = bh4;
|
||
ah6 = bh5;
|
||
ah7 = bh6;
|
||
ah0 = bh7;
|
||
|
||
al1 = bl0;
|
||
al2 = bl1;
|
||
al3 = bl2;
|
||
al4 = bl3;
|
||
al5 = bl4;
|
||
al6 = bl5;
|
||
al7 = bl6;
|
||
al0 = bl7;
|
||
|
||
if (i%16 === 15) {
|
||
for (j = 0; j < 16; j++) {
|
||
// add
|
||
h = wh[j];
|
||
l = wl[j];
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
h = wh[(j+9)%16];
|
||
l = wl[(j+9)%16];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
// sigma0
|
||
th = wh[(j+1)%16];
|
||
tl = wl[(j+1)%16];
|
||
h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);
|
||
l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
// sigma1
|
||
th = wh[(j+14)%16];
|
||
tl = wl[(j+14)%16];
|
||
h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);
|
||
l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
wh[j] = (c & 0xffff) | (d << 16);
|
||
wl[j] = (a & 0xffff) | (b << 16);
|
||
}
|
||
}
|
||
}
|
||
|
||
// add
|
||
h = ah0;
|
||
l = al0;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
h = hh[0];
|
||
l = hl[0];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
hh[0] = ah0 = (c & 0xffff) | (d << 16);
|
||
hl[0] = al0 = (a & 0xffff) | (b << 16);
|
||
|
||
h = ah1;
|
||
l = al1;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
h = hh[1];
|
||
l = hl[1];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
hh[1] = ah1 = (c & 0xffff) | (d << 16);
|
||
hl[1] = al1 = (a & 0xffff) | (b << 16);
|
||
|
||
h = ah2;
|
||
l = al2;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
h = hh[2];
|
||
l = hl[2];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
hh[2] = ah2 = (c & 0xffff) | (d << 16);
|
||
hl[2] = al2 = (a & 0xffff) | (b << 16);
|
||
|
||
h = ah3;
|
||
l = al3;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
h = hh[3];
|
||
l = hl[3];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
hh[3] = ah3 = (c & 0xffff) | (d << 16);
|
||
hl[3] = al3 = (a & 0xffff) | (b << 16);
|
||
|
||
h = ah4;
|
||
l = al4;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
h = hh[4];
|
||
l = hl[4];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
hh[4] = ah4 = (c & 0xffff) | (d << 16);
|
||
hl[4] = al4 = (a & 0xffff) | (b << 16);
|
||
|
||
h = ah5;
|
||
l = al5;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
h = hh[5];
|
||
l = hl[5];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
hh[5] = ah5 = (c & 0xffff) | (d << 16);
|
||
hl[5] = al5 = (a & 0xffff) | (b << 16);
|
||
|
||
h = ah6;
|
||
l = al6;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
h = hh[6];
|
||
l = hl[6];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
hh[6] = ah6 = (c & 0xffff) | (d << 16);
|
||
hl[6] = al6 = (a & 0xffff) | (b << 16);
|
||
|
||
h = ah7;
|
||
l = al7;
|
||
|
||
a = l & 0xffff; b = l >>> 16;
|
||
c = h & 0xffff; d = h >>> 16;
|
||
|
||
h = hh[7];
|
||
l = hl[7];
|
||
|
||
a += l & 0xffff; b += l >>> 16;
|
||
c += h & 0xffff; d += h >>> 16;
|
||
|
||
b += a >>> 16;
|
||
c += b >>> 16;
|
||
d += c >>> 16;
|
||
|
||
hh[7] = ah7 = (c & 0xffff) | (d << 16);
|
||
hl[7] = al7 = (a & 0xffff) | (b << 16);
|
||
|
||
pos += 128;
|
||
n -= 128;
|
||
}
|
||
|
||
return n;
|
||
}
|
||
|
||
function crypto_hash(out, m, n) {
|
||
var hh = new Int32Array(8),
|
||
hl = new Int32Array(8),
|
||
x = new Uint8Array(256),
|
||
i, b = n;
|
||
|
||
hh[0] = 0x6a09e667;
|
||
hh[1] = 0xbb67ae85;
|
||
hh[2] = 0x3c6ef372;
|
||
hh[3] = 0xa54ff53a;
|
||
hh[4] = 0x510e527f;
|
||
hh[5] = 0x9b05688c;
|
||
hh[6] = 0x1f83d9ab;
|
||
hh[7] = 0x5be0cd19;
|
||
|
||
hl[0] = 0xf3bcc908;
|
||
hl[1] = 0x84caa73b;
|
||
hl[2] = 0xfe94f82b;
|
||
hl[3] = 0x5f1d36f1;
|
||
hl[4] = 0xade682d1;
|
||
hl[5] = 0x2b3e6c1f;
|
||
hl[6] = 0xfb41bd6b;
|
||
hl[7] = 0x137e2179;
|
||
|
||
crypto_hashblocks_hl(hh, hl, m, n);
|
||
n %= 128;
|
||
|
||
for (i = 0; i < n; i++) x[i] = m[b-n+i];
|
||
x[n] = 128;
|
||
|
||
n = 256-128*(n<112?1:0);
|
||
x[n-9] = 0;
|
||
ts64(x, n-8, (b / 0x20000000) | 0, b << 3);
|
||
crypto_hashblocks_hl(hh, hl, x, n);
|
||
|
||
for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);
|
||
|
||
return 0;
|
||
}
|
||
|
||
function add(p, q) {
|
||
var a = gf(), b = gf(), c = gf(),
|
||
d = gf(), e = gf(), f = gf(),
|
||
g = gf(), h = gf(), t = gf();
|
||
|
||
Z(a, p[1], p[0]);
|
||
Z(t, q[1], q[0]);
|
||
M(a, a, t);
|
||
A(b, p[0], p[1]);
|
||
A(t, q[0], q[1]);
|
||
M(b, b, t);
|
||
M(c, p[3], q[3]);
|
||
M(c, c, D2);
|
||
M(d, p[2], q[2]);
|
||
A(d, d, d);
|
||
Z(e, b, a);
|
||
Z(f, d, c);
|
||
A(g, d, c);
|
||
A(h, b, a);
|
||
|
||
M(p[0], e, f);
|
||
M(p[1], h, g);
|
||
M(p[2], g, f);
|
||
M(p[3], e, h);
|
||
}
|
||
|
||
function cswap(p, q, b) {
|
||
var i;
|
||
for (i = 0; i < 4; i++) {
|
||
sel25519(p[i], q[i], b);
|
||
}
|
||
}
|
||
|
||
function pack(r, p) {
|
||
var tx = gf(), ty = gf(), zi = gf();
|
||
inv25519(zi, p[2]);
|
||
M(tx, p[0], zi);
|
||
M(ty, p[1], zi);
|
||
pack25519(r, ty);
|
||
r[31] ^= par25519(tx) << 7;
|
||
}
|
||
|
||
function scalarmult(p, q, s) {
|
||
var b, i;
|
||
set25519(p[0], gf0);
|
||
set25519(p[1], gf1);
|
||
set25519(p[2], gf1);
|
||
set25519(p[3], gf0);
|
||
for (i = 255; i >= 0; --i) {
|
||
b = (s[(i/8)|0] >> (i&7)) & 1;
|
||
cswap(p, q, b);
|
||
add(q, p);
|
||
add(p, p);
|
||
cswap(p, q, b);
|
||
}
|
||
}
|
||
|
||
function scalarbase(p, s) {
|
||
var q = [gf(), gf(), gf(), gf()];
|
||
set25519(q[0], X);
|
||
set25519(q[1], Y);
|
||
set25519(q[2], gf1);
|
||
M(q[3], X, Y);
|
||
scalarmult(p, q, s);
|
||
}
|
||
|
||
function crypto_sign_keypair(pk, sk, seeded) {
|
||
var d = new Uint8Array(64);
|
||
var p = [gf(), gf(), gf(), gf()];
|
||
var i;
|
||
|
||
if (!seeded) randombytes(sk, 32);
|
||
crypto_hash(d, sk, 32);
|
||
d[0] &= 248;
|
||
d[31] &= 127;
|
||
d[31] |= 64;
|
||
|
||
scalarbase(p, d);
|
||
pack(pk, p);
|
||
|
||
for (i = 0; i < 32; i++) sk[i+32] = pk[i];
|
||
return 0;
|
||
}
|
||
|
||
var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);
|
||
|
||
function modL(r, x) {
|
||
var carry, i, j, k;
|
||
for (i = 63; i >= 32; --i) {
|
||
carry = 0;
|
||
for (j = i - 32, k = i - 12; j < k; ++j) {
|
||
x[j] += carry - 16 * x[i] * L[j - (i - 32)];
|
||
carry = (x[j] + 128) >> 8;
|
||
x[j] -= carry * 256;
|
||
}
|
||
x[j] += carry;
|
||
x[i] = 0;
|
||
}
|
||
carry = 0;
|
||
for (j = 0; j < 32; j++) {
|
||
x[j] += carry - (x[31] >> 4) * L[j];
|
||
carry = x[j] >> 8;
|
||
x[j] &= 255;
|
||
}
|
||
for (j = 0; j < 32; j++) x[j] -= carry * L[j];
|
||
for (i = 0; i < 32; i++) {
|
||
x[i+1] += x[i] >> 8;
|
||
r[i] = x[i] & 255;
|
||
}
|
||
}
|
||
|
||
function reduce(r) {
|
||
var x = new Float64Array(64), i;
|
||
for (i = 0; i < 64; i++) x[i] = r[i];
|
||
for (i = 0; i < 64; i++) r[i] = 0;
|
||
modL(r, x);
|
||
}
|
||
|
||
// Note: difference from C - smlen returned, not passed as argument.
|
||
function crypto_sign(sm, m, n, sk) {
|
||
var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);
|
||
var i, j, x = new Float64Array(64);
|
||
var p = [gf(), gf(), gf(), gf()];
|
||
|
||
crypto_hash(d, sk, 32);
|
||
d[0] &= 248;
|
||
d[31] &= 127;
|
||
d[31] |= 64;
|
||
|
||
var smlen = n + 64;
|
||
for (i = 0; i < n; i++) sm[64 + i] = m[i];
|
||
for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];
|
||
|
||
crypto_hash(r, sm.subarray(32), n+32);
|
||
reduce(r);
|
||
scalarbase(p, r);
|
||
pack(sm, p);
|
||
|
||
for (i = 32; i < 64; i++) sm[i] = sk[i];
|
||
crypto_hash(h, sm, n + 64);
|
||
reduce(h);
|
||
|
||
for (i = 0; i < 64; i++) x[i] = 0;
|
||
for (i = 0; i < 32; i++) x[i] = r[i];
|
||
for (i = 0; i < 32; i++) {
|
||
for (j = 0; j < 32; j++) {
|
||
x[i+j] += h[i] * d[j];
|
||
}
|
||
}
|
||
|
||
modL(sm.subarray(32), x);
|
||
return smlen;
|
||
}
|
||
|
||
function unpackneg(r, p) {
|
||
var t = gf(), chk = gf(), num = gf(),
|
||
den = gf(), den2 = gf(), den4 = gf(),
|
||
den6 = gf();
|
||
|
||
set25519(r[2], gf1);
|
||
unpack25519(r[1], p);
|
||
S(num, r[1]);
|
||
M(den, num, D);
|
||
Z(num, num, r[2]);
|
||
A(den, r[2], den);
|
||
|
||
S(den2, den);
|
||
S(den4, den2);
|
||
M(den6, den4, den2);
|
||
M(t, den6, num);
|
||
M(t, t, den);
|
||
|
||
pow2523(t, t);
|
||
M(t, t, num);
|
||
M(t, t, den);
|
||
M(t, t, den);
|
||
M(r[0], t, den);
|
||
|
||
S(chk, r[0]);
|
||
M(chk, chk, den);
|
||
if (neq25519(chk, num)) M(r[0], r[0], I);
|
||
|
||
S(chk, r[0]);
|
||
M(chk, chk, den);
|
||
if (neq25519(chk, num)) return -1;
|
||
|
||
if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);
|
||
|
||
M(r[3], r[0], r[1]);
|
||
return 0;
|
||
}
|
||
|
||
function crypto_sign_open(m, sm, n, pk) {
|
||
var i, mlen;
|
||
var t = new Uint8Array(32), h = new Uint8Array(64);
|
||
var p = [gf(), gf(), gf(), gf()],
|
||
q = [gf(), gf(), gf(), gf()];
|
||
|
||
mlen = -1;
|
||
if (n < 64) return -1;
|
||
|
||
if (unpackneg(q, pk)) return -1;
|
||
|
||
for (i = 0; i < n; i++) m[i] = sm[i];
|
||
for (i = 0; i < 32; i++) m[i+32] = pk[i];
|
||
crypto_hash(h, m, n);
|
||
reduce(h);
|
||
scalarmult(p, q, h);
|
||
|
||
scalarbase(q, sm.subarray(32));
|
||
add(p, q);
|
||
pack(t, p);
|
||
|
||
n -= 64;
|
||
if (crypto_verify_32(sm, 0, t, 0)) {
|
||
for (i = 0; i < n; i++) m[i] = 0;
|
||
return -1;
|
||
}
|
||
|
||
for (i = 0; i < n; i++) m[i] = sm[i + 64];
|
||
mlen = n;
|
||
return mlen;
|
||
}
|
||
|
||
var crypto_secretbox_KEYBYTES = 32,
|
||
crypto_secretbox_NONCEBYTES = 24,
|
||
crypto_secretbox_ZEROBYTES = 32,
|
||
crypto_secretbox_BOXZEROBYTES = 16,
|
||
crypto_scalarmult_BYTES = 32,
|
||
crypto_scalarmult_SCALARBYTES = 32,
|
||
crypto_box_PUBLICKEYBYTES = 32,
|
||
crypto_box_SECRETKEYBYTES = 32,
|
||
crypto_box_BEFORENMBYTES = 32,
|
||
crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,
|
||
crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,
|
||
crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,
|
||
crypto_sign_BYTES = 64,
|
||
crypto_sign_PUBLICKEYBYTES = 32,
|
||
crypto_sign_SECRETKEYBYTES = 64,
|
||
crypto_sign_SEEDBYTES = 32,
|
||
crypto_hash_BYTES = 64;
|
||
|
||
nacl.lowlevel = {
|
||
crypto_core_hsalsa20: crypto_core_hsalsa20,
|
||
crypto_stream_xor: crypto_stream_xor,
|
||
crypto_stream: crypto_stream,
|
||
crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,
|
||
crypto_stream_salsa20: crypto_stream_salsa20,
|
||
crypto_onetimeauth: crypto_onetimeauth,
|
||
crypto_onetimeauth_verify: crypto_onetimeauth_verify,
|
||
crypto_verify_16: crypto_verify_16,
|
||
crypto_verify_32: crypto_verify_32,
|
||
crypto_secretbox: crypto_secretbox,
|
||
crypto_secretbox_open: crypto_secretbox_open,
|
||
crypto_scalarmult: crypto_scalarmult,
|
||
crypto_scalarmult_base: crypto_scalarmult_base,
|
||
crypto_box_beforenm: crypto_box_beforenm,
|
||
crypto_box_afternm: crypto_box_afternm,
|
||
crypto_box: crypto_box,
|
||
crypto_box_open: crypto_box_open,
|
||
crypto_box_keypair: crypto_box_keypair,
|
||
crypto_hash: crypto_hash,
|
||
crypto_sign: crypto_sign,
|
||
crypto_sign_keypair: crypto_sign_keypair,
|
||
crypto_sign_open: crypto_sign_open,
|
||
|
||
crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,
|
||
crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,
|
||
crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,
|
||
crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,
|
||
crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,
|
||
crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,
|
||
crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,
|
||
crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,
|
||
crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,
|
||
crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,
|
||
crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,
|
||
crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,
|
||
crypto_sign_BYTES: crypto_sign_BYTES,
|
||
crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,
|
||
crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,
|
||
crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,
|
||
crypto_hash_BYTES: crypto_hash_BYTES
|
||
};
|
||
|
||
/* High-level API */
|
||
|
||
function checkLengths(k, n) {
|
||
if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');
|
||
if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');
|
||
}
|
||
|
||
function checkBoxLengths(pk, sk) {
|
||
if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');
|
||
if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');
|
||
}
|
||
|
||
function checkArrayTypes() {
|
||
var t, i;
|
||
for (i = 0; i < arguments.length; i++) {
|
||
if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]')
|
||
throw new TypeError('unexpected type ' + t + ', use Uint8Array');
|
||
}
|
||
}
|
||
|
||
function cleanup(arr) {
|
||
for (var i = 0; i < arr.length; i++) arr[i] = 0;
|
||
}
|
||
|
||
// TODO: Completely remove this in v0.15.
|
||
if (!nacl.util) {
|
||
nacl.util = {};
|
||
nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() {
|
||
throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js');
|
||
};
|
||
}
|
||
|
||
nacl.randomBytes = function(n) {
|
||
var b = new Uint8Array(n);
|
||
randombytes(b, n);
|
||
return b;
|
||
};
|
||
|
||
nacl.secretbox = function(msg, nonce, key) {
|
||
checkArrayTypes(msg, nonce, key);
|
||
checkLengths(key, nonce);
|
||
var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);
|
||
var c = new Uint8Array(m.length);
|
||
for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];
|
||
crypto_secretbox(c, m, m.length, nonce, key);
|
||
return c.subarray(crypto_secretbox_BOXZEROBYTES);
|
||
};
|
||
|
||
nacl.secretbox.open = function(box, nonce, key) {
|
||
checkArrayTypes(box, nonce, key);
|
||
checkLengths(key, nonce);
|
||
var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);
|
||
var m = new Uint8Array(c.length);
|
||
for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];
|
||
if (c.length < 32) return false;
|
||
if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false;
|
||
return m.subarray(crypto_secretbox_ZEROBYTES);
|
||
};
|
||
|
||
nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;
|
||
nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;
|
||
nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;
|
||
|
||
nacl.scalarMult = function(n, p) {
|
||
checkArrayTypes(n, p);
|
||
if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
|
||
if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');
|
||
var q = new Uint8Array(crypto_scalarmult_BYTES);
|
||
crypto_scalarmult(q, n, p);
|
||
return q;
|
||
};
|
||
|
||
nacl.scalarMult.base = function(n) {
|
||
checkArrayTypes(n);
|
||
if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');
|
||
var q = new Uint8Array(crypto_scalarmult_BYTES);
|
||
crypto_scalarmult_base(q, n);
|
||
return q;
|
||
};
|
||
|
||
nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;
|
||
nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;
|
||
|
||
nacl.box = function(msg, nonce, publicKey, secretKey) {
|
||
var k = nacl.box.before(publicKey, secretKey);
|
||
return nacl.secretbox(msg, nonce, k);
|
||
};
|
||
|
||
nacl.box.before = function(publicKey, secretKey) {
|
||
checkArrayTypes(publicKey, secretKey);
|
||
checkBoxLengths(publicKey, secretKey);
|
||
var k = new Uint8Array(crypto_box_BEFORENMBYTES);
|
||
crypto_box_beforenm(k, publicKey, secretKey);
|
||
return k;
|
||
};
|
||
|
||
nacl.box.after = nacl.secretbox;
|
||
|
||
nacl.box.open = function(msg, nonce, publicKey, secretKey) {
|
||
var k = nacl.box.before(publicKey, secretKey);
|
||
return nacl.secretbox.open(msg, nonce, k);
|
||
};
|
||
|
||
nacl.box.open.after = nacl.secretbox.open;
|
||
|
||
nacl.box.keyPair = function() {
|
||
var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
|
||
var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);
|
||
crypto_box_keypair(pk, sk);
|
||
return {publicKey: pk, secretKey: sk};
|
||
};
|
||
|
||
nacl.box.keyPair.fromSecretKey = function(secretKey) {
|
||
checkArrayTypes(secretKey);
|
||
if (secretKey.length !== crypto_box_SECRETKEYBYTES)
|
||
throw new Error('bad secret key size');
|
||
var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);
|
||
crypto_scalarmult_base(pk, secretKey);
|
||
return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
|
||
};
|
||
|
||
nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;
|
||
nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;
|
||
nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;
|
||
nacl.box.nonceLength = crypto_box_NONCEBYTES;
|
||
nacl.box.overheadLength = nacl.secretbox.overheadLength;
|
||
|
||
nacl.sign = function(msg, secretKey) {
|
||
checkArrayTypes(msg, secretKey);
|
||
if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
|
||
throw new Error('bad secret key size');
|
||
var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);
|
||
crypto_sign(signedMsg, msg, msg.length, secretKey);
|
||
return signedMsg;
|
||
};
|
||
|
||
nacl.sign.open = function(signedMsg, publicKey) {
|
||
if (arguments.length !== 2)
|
||
throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?');
|
||
checkArrayTypes(signedMsg, publicKey);
|
||
if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
|
||
throw new Error('bad public key size');
|
||
var tmp = new Uint8Array(signedMsg.length);
|
||
var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);
|
||
if (mlen < 0) return null;
|
||
var m = new Uint8Array(mlen);
|
||
for (var i = 0; i < m.length; i++) m[i] = tmp[i];
|
||
return m;
|
||
};
|
||
|
||
nacl.sign.detached = function(msg, secretKey) {
|
||
var signedMsg = nacl.sign(msg, secretKey);
|
||
var sig = new Uint8Array(crypto_sign_BYTES);
|
||
for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];
|
||
return sig;
|
||
};
|
||
|
||
nacl.sign.detached.verify = function(msg, sig, publicKey) {
|
||
checkArrayTypes(msg, sig, publicKey);
|
||
if (sig.length !== crypto_sign_BYTES)
|
||
throw new Error('bad signature size');
|
||
if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)
|
||
throw new Error('bad public key size');
|
||
var sm = new Uint8Array(crypto_sign_BYTES + msg.length);
|
||
var m = new Uint8Array(crypto_sign_BYTES + msg.length);
|
||
var i;
|
||
for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];
|
||
for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];
|
||
return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);
|
||
};
|
||
|
||
nacl.sign.keyPair = function() {
|
||
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
|
||
var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
|
||
crypto_sign_keypair(pk, sk);
|
||
return {publicKey: pk, secretKey: sk};
|
||
};
|
||
|
||
nacl.sign.keyPair.fromSecretKey = function(secretKey) {
|
||
checkArrayTypes(secretKey);
|
||
if (secretKey.length !== crypto_sign_SECRETKEYBYTES)
|
||
throw new Error('bad secret key size');
|
||
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
|
||
for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];
|
||
return {publicKey: pk, secretKey: new Uint8Array(secretKey)};
|
||
};
|
||
|
||
nacl.sign.keyPair.fromSeed = function(seed) {
|
||
checkArrayTypes(seed);
|
||
if (seed.length !== crypto_sign_SEEDBYTES)
|
||
throw new Error('bad seed size');
|
||
var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);
|
||
var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);
|
||
for (var i = 0; i < 32; i++) sk[i] = seed[i];
|
||
crypto_sign_keypair(pk, sk, true);
|
||
return {publicKey: pk, secretKey: sk};
|
||
};
|
||
|
||
nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;
|
||
nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;
|
||
nacl.sign.seedLength = crypto_sign_SEEDBYTES;
|
||
nacl.sign.signatureLength = crypto_sign_BYTES;
|
||
|
||
nacl.hash = function(msg) {
|
||
checkArrayTypes(msg);
|
||
var h = new Uint8Array(crypto_hash_BYTES);
|
||
crypto_hash(h, msg, msg.length);
|
||
return h;
|
||
};
|
||
|
||
nacl.hash.hashLength = crypto_hash_BYTES;
|
||
|
||
nacl.verify = function(x, y) {
|
||
checkArrayTypes(x, y);
|
||
// Zero length arguments are considered not equal.
|
||
if (x.length === 0 || y.length === 0) return false;
|
||
if (x.length !== y.length) return false;
|
||
return (vn(x, 0, y, 0, x.length) === 0) ? true : false;
|
||
};
|
||
|
||
nacl.setPRNG = function(fn) {
|
||
randombytes = fn;
|
||
};
|
||
|
||
(function() {
|
||
// Initialize PRNG if environment provides CSPRNG.
|
||
// If not, methods calling randombytes will throw.
|
||
var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;
|
||
if (crypto && crypto.getRandomValues) {
|
||
// Browsers.
|
||
var QUOTA = 65536;
|
||
nacl.setPRNG(function(x, n) {
|
||
var i, v = new Uint8Array(n);
|
||
for (i = 0; i < n; i += QUOTA) {
|
||
crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));
|
||
}
|
||
for (i = 0; i < n; i++) x[i] = v[i];
|
||
cleanup(v);
|
||
});
|
||
} else if (true) {
|
||
// Node.js.
|
||
crypto = __webpack_require__(28);
|
||
if (crypto && crypto.randomBytes) {
|
||
nacl.setPRNG(function(x, n) {
|
||
var i, v = crypto.randomBytes(n);
|
||
for (i = 0; i < n; i++) x[i] = v[i];
|
||
cleanup(v);
|
||
});
|
||
}
|
||
}
|
||
})();
|
||
|
||
})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));
|
||
|
||
|
||
/***/ }),
|
||
/* 28 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ }),
|
||
/* 29 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__(7);
|
||
|
||
|
||
/***/ })
|
||
/******/ ]);
|
||
});
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA1YTY5ODMxN2JkZDNhZjU0NzZmNiIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vbWFrZVRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL34vYnM1OC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L25vZGUtbGlicy1icm93c2VyL34vYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlSW5wdXRUZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vc2VyaWFsaXplVHJhbnNhY3Rpb25JbnRvQ2Fub25pY2FsU3RyaW5nLmpzIiwid2VicGFjazovLy8uL34vZml2ZS1iZWxscy1jb25kaXRpb24vZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3NyYy9FZDI1NTE5S2V5cGFpci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc2hhMjU2SGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vaGFzaFRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlQ3JlYXRlVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VFZDI1NTE5Q29uZGl0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlT3V0cHV0LmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlVHJhbnNmZXJUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vc2lnblRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL34vYmFzZS14L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vYmFzZTY0LWpzL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2lzYXJyYXkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9qcy1zaGEzL3NyYy9zaGEzLmpzIiwid2VicGFjazovLy8uL34vanNvbi1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vanNvbmlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzb25pZnkvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL34vanNvbmlmeS9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL34vcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL34vdHdlZXRuYWNsL25hY2wtZmFzdC5qcyIsIndlYnBhY2s6Ly8vY3J5cHRvIChpZ25vcmVkKSJdLCJuYW1lcyI6WyJtYWtlVHJhbnNhY3Rpb25UZW1wbGF0ZSIsIm1ha2VUcmFuc2FjdGlvbiIsIm9wZXJhdGlvbiIsImFzc2V0IiwibWV0YWRhdGEiLCJvdXRwdXRzIiwiaW5wdXRzIiwidHgiLCJpZCIsImhhc2hUcmFuc2FjdGlvbiIsIm1ha2VJbnB1dFRlbXBsYXRlIiwicHVibGljS2V5cyIsImZ1bGZpbGxzIiwiZnVsZmlsbG1lbnQiLCJzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmciLCJ0cmFuc2FjdGlvbiIsImlucHV0IiwiY2xvbmUiLCJtYXRjaCIsImZvckVhY2giLCJfaW5wdXQiLCJpbmRleE9mIiwic3RhYmxlU3RyaW5naWZ5IiwiYSIsImIiLCJrZXkiLCJFZDI1NTE5S2V5cGFpciIsImtleVBhaXIiLCJuYWNsIiwic2lnbiIsInB1YmxpY0tleSIsImJhc2U1OCIsImVuY29kZSIsInByaXZhdGVLZXkiLCJzZWNyZXRLZXkiLCJzbGljZSIsInNoYTI1Nkhhc2giLCJkYXRhIiwic2hhMyIsInNoYTNfMjU2IiwiY3JlYXRlIiwidXBkYXRlIiwiaGV4IiwibWFrZUNyZWF0ZVRyYW5zYWN0aW9uIiwiYXNzZXREZWZpbml0aW9uIiwiaXNzdWVycyIsIm1hcCIsImlzc3VlciIsIm1ha2VFZDI1NTE5Q29uZGl0aW9uIiwicHVibGljS2V5QnVmZmVyIiwiZGVjb2RlIiwiZWQyNTUxOUZ1bGZpbGxtZW50IiwiY2MiLCJFZDI1NTE5Iiwic2V0UHVibGljS2V5IiwiY29uZGl0aW9uVXJpIiwiZ2V0Q29uZGl0aW9uVXJpIiwibWFrZU91dHB1dCIsImNvbmRpdGlvbiIsImFtb3VudCIsImRldGFpbHMiLCJwdWJsaWNfa2V5IiwibWFrZVRyYW5zZmVyVHJhbnNhY3Rpb24iLCJ1bnNwZW50VHJhbnNhY3Rpb24iLCJmdWxmaWxsZWRPdXRwdXRzIiwib3V0cHV0SW5kZXgiLCJmdWxmaWxsZWRPdXRwdXQiLCJ0cmFuc2FjdGlvbkxpbmsiLCJwdWJsaWNfa2V5cyIsImFzc2V0TGluayIsInNpZ25UcmFuc2FjdGlvbiIsInByaXZhdGVLZXlzIiwic2lnbmVkVHgiLCJpbmRleCIsInByaXZhdGVLZXlCdWZmZXIiLCJzZXJpYWxpemVkVHJhbnNhY3Rpb24iLCJmdWxmaWxsbWVudFVyaSIsInNlcmlhbGl6ZVVyaSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7O0FDaEVBOztBQUdBLFNBQVNBLHVCQUFULEdBQW1DO0FBQy9CLFdBQU87QUFDSCxjQUFNLElBREg7QUFFSCxxQkFBYSxJQUZWO0FBR0gsbUJBQVcsRUFIUjtBQUlILGtCQUFVLEVBSlA7QUFLSCxvQkFBWSxJQUxUO0FBTUgsaUJBQVMsSUFOTjtBQU9ILG1CQUFXO0FBUFIsS0FBUDtBQVNIOztBQUdjLFNBQVNDLGVBQVQsQ0FBeUJDLFNBQXpCLEVBQW9DQyxLQUFwQyxFQUF1RjtBQUFBLFFBQTVDQyxRQUE0Qyx1RUFBakMsSUFBaUM7QUFBQSxRQUEzQkMsT0FBMkIsdUVBQWpCLEVBQWlCO0FBQUEsUUFBYkMsTUFBYSx1RUFBSixFQUFJOztBQUNsRyxRQUFNQyxLQUFLUCx5QkFBWDtBQUNBTyxPQUFHTCxTQUFILEdBQWVBLFNBQWY7QUFDQUssT0FBR0osS0FBSCxHQUFXQSxLQUFYO0FBQ0FJLE9BQUdILFFBQUgsR0FBY0EsUUFBZDtBQUNBRyxPQUFHRCxNQUFILEdBQVlBLE1BQVo7QUFDQUMsT0FBR0YsT0FBSCxHQUFhQSxPQUFiOztBQUVBO0FBQ0FFLE9BQUdDLEVBQUgsR0FBUSx3RkFBQUMsQ0FBZ0JGLEVBQWhCLENBQVI7QUFDQSxXQUFPQSxFQUFQO0FBQ0gsQzs7Ozs7O0FDM0JEO0FBQ0E7O0FBRUE7Ozs7Ozs7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbURBQW1EO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLFFBQVE7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQ0FBb0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsUUFBUTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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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= |